diff --git a/.github/workflows/build-dev-and-ci.yml b/.github/workflows/build-dev-and-ci.yml index e62ea3bca0..52beaa02fb 100644 --- a/.github/workflows/build-dev-and-ci.yml +++ b/.github/workflows/build-dev-and-ci.yml @@ -47,12 +47,15 @@ jobs: echo "Latest updated version:" rustc --version + - name: ๐Ÿฆ€ Fetch Rust dependencies + run: | + echo "If it fails here, the committed Cargo.lock may be out of date" + cargo fetch --locked + - name: โœ‚ Replace template in of index.html - if: github.ref != 'refs/heads/master' - env: - INDEX_HTML_HEAD_REPLACEMENT: "" run: | # Remove the INDEX_HTML_HEAD_REPLACEMENT environment variable for build links (not master deploys) + git rev-parse --abbrev-ref HEAD | grep master > /dev/null || export INDEX_HTML_HEAD_REPLACEMENT="" sed -i "s||$INDEX_HTML_HEAD_REPLACEMENT|" frontend/index.html - name: ๐ŸŒ Build Graphite web code @@ -105,7 +108,7 @@ jobs: - name: ๐Ÿงช Run Rust tests run: | - mold -run cargo test --all-features --workspace + mold -run cargo test --all-features - name: ๐Ÿ“ƒ Generate code documentation info for website if: github.ref == 'refs/heads/master' diff --git a/.github/workflows/comment-profiling-changes.yaml b/.github/workflows/comment-profiling-changes.yaml index d83e6d67e4..e51341538c 100644 --- a/.github/workflows/comment-profiling-changes.yaml +++ b/.github/workflows/comment-profiling-changes.yaml @@ -10,31 +10,33 @@ jobs: profile: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable + uses: dtolnay/rust-toolchain@stable - name: Install Valgrind run: | sudo apt update sudo apt install -y valgrind - - name: Cache dependencies - uses: actions/cache@v3 + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + # Cache on Cargo.lock file + cache-on-failure: true + + - name: Cache iai-callgrind binary + id: cache-iai + uses: actions/cache@v4 + with: + path: ~/.cargo/bin/iai-callgrind-runner + key: ${{ runner.os }}-iai-callgrind-runner-0.12.3 - name: Install iai-callgrind + if: steps.cache-iai.outputs.cache-hit != 'true' run: | cargo install iai-callgrind-runner@0.12.3 @@ -43,9 +45,29 @@ jobs: git fetch origin master:master git checkout master + - name: Get master commit SHA + id: master-sha + run: echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + + - name: Cache benchmark baselines + id: cache-benchmark-baselines + uses: actions/cache@v4 + with: + path: target/iai + key: ${{ runner.os }}-benchmark-baselines-master-${{ steps.master-sha.outputs.sha }} + restore-keys: | + ${{ runner.os }}-benchmark-baselines-master- + - name: Run baseline benchmarks + if: steps.cache-benchmark-baselines.outputs.cache-hit != 'true' run: | + # Compile benchmarks cargo bench --bench compile_demo_art_iai -- --save-baseline=master + + # Runtime benchmarks + cargo bench --bench update_executor_iai -- --save-baseline=master + cargo bench --bench run_once_iai -- --save-baseline=master + cargo bench --bench run_cached_iai -- --save-baseline=master - name: Checkout PR branch run: | @@ -54,13 +76,33 @@ jobs: - name: Run PR benchmarks id: benchmark run: | - BENCH_OUTPUT=$(cargo bench --bench compile_demo_art_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') - echo "BENCHMARK_OUTPUT<> $GITHUB_OUTPUT - echo "$BENCH_OUTPUT" >> $GITHUB_OUTPUT + # Compile benchmarks + COMPILE_OUTPUT=$(cargo bench --bench compile_demo_art_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') + + # Runtime benchmarks + UPDATE_OUTPUT=$(cargo bench --bench update_executor_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') + RUN_ONCE_OUTPUT=$(cargo bench --bench run_once_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') + RUN_CACHED_OUTPUT=$(cargo bench --bench run_cached_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') + + # Store outputs + echo "COMPILE_OUTPUT<> $GITHUB_OUTPUT + echo "$COMPILE_OUTPUT" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + echo "UPDATE_OUTPUT<> $GITHUB_OUTPUT + echo "$UPDATE_OUTPUT" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + echo "RUN_ONCE_OUTPUT<> $GITHUB_OUTPUT + echo "$RUN_ONCE_OUTPUT" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + echo "RUN_CACHED_OUTPUT<> $GITHUB_OUTPUT + echo "$RUN_CACHED_OUTPUT" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Make old comments collapsed by default - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | @@ -85,11 +127,15 @@ jobs: } - name: Comment PR - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | - const benchmarkOutput = JSON.parse(`${{ steps.benchmark.outputs.BENCHMARK_OUTPUT }}`); + const compileOutput = JSON.parse(`${{ steps.benchmark.outputs.COMPILE_OUTPUT }}`); + const updateOutput = JSON.parse(`${{ steps.benchmark.outputs.UPDATE_OUTPUT }}`); + const runOnceOutput = JSON.parse(`${{ steps.benchmark.outputs.RUN_ONCE_OUTPUT }}`); + const runCachedOutput = JSON.parse(`${{ steps.benchmark.outputs.RUN_CACHED_OUTPUT }}`); + let significantChanges = false; let commentBody = ""; @@ -110,58 +156,97 @@ jobs: return str.padStart(len); } - for (const benchmark of benchmarkOutput) { - if (benchmark.callgrind_summary && benchmark.callgrind_summary.summaries) { - const summary = benchmark.callgrind_summary.summaries[0]; - const irDiff = summary.events.Ir; - - if (irDiff.diff_pct !== null) { - const changePercentage = formatPercentage(irDiff.diff_pct); - const color = irDiff.diff_pct > 0 ? "red" : "lime"; + function processBenchmarkOutput(benchmarkOutput, sectionTitle, isLast = false) { + let sectionBody = ""; + let hasResults = false; + let hasSignificantChanges = false; + + for (const benchmark of benchmarkOutput) { + if (benchmark.callgrind_summary && benchmark.callgrind_summary.summaries) { + const summary = benchmark.callgrind_summary.summaries[0]; + const irDiff = summary.events.Ir; - commentBody += "---\n\n"; - commentBody += `${benchmark.module_path} ${benchmark.id}:${benchmark.details}\n`; - commentBody += `Instructions: \`${formatNumber(irDiff.old)}\` (master) -> \`${formatNumber(irDiff.new)}\` (HEAD) : `; - commentBody += `$$\\color{${color}}${changePercentage.replace("%", "\\\\%")}$$\n\n`; - - commentBody += "
\nDetailed metrics\n\n```\n"; - commentBody += `Baselines: master| HEAD\n`; - - for (const [eventKind, costsDiff] of Object.entries(summary.events)) { - if (costsDiff.diff_pct !== null) { - const changePercentage = formatPercentage(costsDiff.diff_pct); - const line = `${padRight(eventKind, 20)} ${padLeft(formatNumber(costsDiff.old), 11)}|${padLeft(formatNumber(costsDiff.new), 11)} ${padLeft(changePercentage, 15)}`; - commentBody += `${line}\n`; + if (irDiff.diff_pct !== null) { + hasResults = true; + const changePercentage = formatPercentage(irDiff.diff_pct); + const color = irDiff.diff_pct > 0 ? "red" : "lime"; + + sectionBody += `**${benchmark.module_path} ${benchmark.id}:${benchmark.details}**\n`; + sectionBody += `Instructions: \`${formatNumber(irDiff.old)}\` (master) โ†’ \`${formatNumber(irDiff.new)}\` (HEAD) : `; + sectionBody += `$$\\color{${color}}${changePercentage.replace("%", "\\\\%")}$$\n\n`; + + sectionBody += "
\nDetailed metrics\n\n```\n"; + sectionBody += `Baselines: master| HEAD\n`; + + for (const [eventKind, costsDiff] of Object.entries(summary.events)) { + if (costsDiff.diff_pct !== null) { + const changePercentage = formatPercentage(costsDiff.diff_pct); + const line = `${padRight(eventKind, 20)} ${padLeft(formatNumber(costsDiff.old), 11)}|${padLeft(formatNumber(costsDiff.new), 11)} ${padLeft(changePercentage, 15)}`; + sectionBody += `${line}\n`; + } + } + + sectionBody += "```\n
\n\n"; + + if (Math.abs(irDiff.diff_pct) > 5) { + significantChanges = true; + hasSignificantChanges = true; } - } - - commentBody += "```\n
\n\n"; - - if (Math.abs(irDiff.diff_pct) > 5) { - significantChanges = true; } } } + + if (hasResults) { + // Wrap section in collapsible details, open only if there are significant changes + const openAttribute = hasSignificantChanges ? " open" : ""; + const ruler = isLast ? "" : "\n\n---"; + return `\n

${sectionTitle}

\n\n${sectionBody}${ruler}\n`; + } + return ""; } - const output = ` -
+ // Process each benchmark category + const sections = [ + { output: compileOutput, title: "๐Ÿ”ง Graph Compilation" }, + { output: updateOutput, title: "๐Ÿ”„ Executor Update" }, + { output: runOnceOutput, title: "๐Ÿš€ Render: Cold Execution" }, + { output: runCachedOutput, title: "โšก Render: Cached Execution" } + ]; - Performance Benchmark Results + // Generate sections and determine which ones have results + const generatedSections = sections.map(({ output, title }) => + processBenchmarkOutput(output, title, true) // temporarily mark all as last + ).filter(section => section.length > 0); - ${commentBody} + // Re-generate with correct isLast flags + let sectionIndex = 0; + const finalSections = sections.map(({ output, title }) => { + const section = processBenchmarkOutput(output, title, true); // check if it has results + if (section.length > 0) { + const isLast = sectionIndex === generatedSections.length - 1; + sectionIndex++; + return processBenchmarkOutput(output, title, isLast); + } + return ""; + }).filter(section => section.length > 0); -
- `; + // Combine all sections + commentBody = finalSections.join("\n\n"); - if (significantChanges) { - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: output - }); + if (commentBody.length > 0) { + const output = `
\nPerformance Benchmark Results\n\n${commentBody}\n
`; + + if (significantChanges) { + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }); + } else { + console.log("No significant performance changes detected. Skipping comment."); + console.log(output); + } } else { - console.log("No significant performance changes detected. Skipping comment."); - console.log(output); + console.log("No benchmark results to display."); } diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index 7f8ca120d9..bbe490b12f 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -63,14 +63,14 @@ jobs: mkdir artifacts mv hierarchical_message_system_tree.txt artifacts/hierarchical_message_system_tree.txt - - name: ๐Ÿšš Move `artifacts` contents to `website/other/editor-structure` + - name: ๐Ÿšš Move `artifacts` contents to the project root run: | - mv artifacts/* website/other/editor-structure + mv artifacts/* . - name: ๐Ÿ”ง Build auto-generated code docs artifacts into HTML run: | - cd website/other/editor-structure - node generate.js hierarchical_message_system_tree.txt replacement.html + cd website + npm run generate-editor-structure - name: ๐ŸŒ Build Graphite website with Zola env: @@ -80,6 +80,7 @@ jobs: npm run install-fonts zola --config config.toml build --minify +<<<<<<< HEAD - name: ๐Ÿ’ฟ Restore cache of `website/other/dist` directory, if available and `website/other` didn't change if: steps.changes.outputs.website-other != 'true' id: cache-website-other-dist @@ -135,6 +136,41 @@ jobs: run: | mv artifacts/* website/public +||||||| 890da6a3 + - name: ๐Ÿ’ฟ Restore cache of `website/other/dist` directory, if available and `website/other` didn't change + if: steps.changes.outputs.website-other != 'true' + id: cache-website-other-dist + uses: actions/cache/restore@v3 + with: + path: website/other/dist + key: website-other-dist-${{ runner.os }} + + - name: ๐ŸŸข Set up Node only if we are going to build in the next step + if: steps.cache-website-other-dist.outputs.cache-hit != 'true' + uses: actions/setup-node@v4 + with: + node-version: "latest" + + - name: ๐Ÿ“ Build `website/other` directory only if changed or not cached + if: steps.cache-website-other-dist.outputs.cache-hit != 'true' + id: build-website-other + run: | + sh website/other/build.sh + + - name: ๐Ÿ’พ Save cache of `website/other/dist` directory if it was built above + if: steps.cache-website-other-dist.outputs.cache-hit != 'true' + uses: actions/cache/save@v3 + with: + path: website/other/dist + key: ${{ steps.cache-website-other-dist.outputs.cache-primary-key }} + + - name: ๐Ÿšš Move `website/other/dist` contents to `website/public` + run: | + mkdir -p website/public + mv website/other/dist/* website/public + +======= +>>>>>>> master - name: ๐Ÿ“ค Publish to Cloudflare Pages id: cloudflare uses: cloudflare/pages-action@1 diff --git a/.gitignore b/.gitignore index bdfa416126..29af1eed11 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,9 @@ target/ *.exrc perf.data* profile.json +profile.json.gz flamegraph.svg .idea/ .direnv hierarchical_message_system_tree.txt +hierarchical_message_system_tree.html diff --git a/.nix/flake.lock b/.nix/flake.lock index 5c11b23de1..dc9b853784 100644 --- a/.nix/flake.lock +++ b/.nix/flake.lock @@ -1,5 +1,19 @@ { "nodes": { + "flake-compat": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -20,27 +34,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748190013, - "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=", + "lastModified": 1754214453, + "narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "62b852f6c6742134ade1abdd2a21685fd617a291", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1748190013, - "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "62b852f6c6742134ade1abdd2a21685fd617a291", + "rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376", "type": "github" }, "original": { @@ -52,9 +50,9 @@ }, "root": { "inputs": { + "flake-compat": "flake-compat", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", - "nixpkgs-unstable": "nixpkgs-unstable", "rust-overlay": "rust-overlay" } }, @@ -65,11 +63,11 @@ ] }, "locked": { - "lastModified": 1748399823, - "narHash": "sha256-kahD8D5hOXOsGbNdoLLnqCL887cjHkx98Izc37nDjlA=", + "lastModified": 1753238793, + "narHash": "sha256-jmQeEpgX+++MEgrcikcwoSiI7vDZWLP0gci7XiWb9uQ=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "d68a69dc71bc19beb3479800392112c2f6218159", + "rev": "0ad7ab4ca8e83febf147197e65c006dff60623ab", "type": "github" }, "original": { diff --git a/.nix/flake.nix b/.nix/flake.nix index fc0cb6cbe4..03539534e7 100644 --- a/.nix/flake.nix +++ b/.nix/flake.nix @@ -1,84 +1,134 @@ # This is a helper file for people using NixOS as their operating system. # If you don't know what this file does, you can safely ignore it. -# This file defines both the development environment for the project. +# This file defines the reproducible development environment for the project. # # Development Environment: -# - Provides all necessary tools for Rust/WASM development -# - Includes Tauri dependencies for desktop app development +# - Provides all necessary tools for Rust/Wasm development +# - Includes dependencies for desktop app development # - Sets up profiling and debugging tools # - Configures mold as the default linker for faster builds # -# # Usage: -# - Development shell: `nix develop` +# - Development shell: `nix develop .nix` from the project root # - Run in dev shell with direnv: add `use flake` to .envrc { description = "Development environment and build configuration"; inputs = { - # This url should be changed to match your system packages if you work on tauri because you need to use the same graphics library versions as the ones used by your system nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; + + # This is used to provide a identical development shell at `shell.nix` for users that do not use flakes + flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"; }; - outputs = { nixpkgs, nixpkgs-unstable, rust-overlay, flake-utils, ... }: + outputs = { nixpkgs, rust-overlay, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; - pkgs-unstable = import nixpkgs-unstable { - inherit system overlays; - }; - - rustc-wasm = pkgs.rust-bin.stable.latest.default.override { + + rustExtensions = [ "rust-src" "rust-analyzer" "clippy" "cargo" ]; + rust = pkgs.rust-bin.stable.latest.default.override { targets = [ "wasm32-unknown-unknown" ]; - extensions = [ "rust-src" "rust-analyzer" "clippy" "cargo" ]; + extensions = rustExtensions; }; + rustGPUToolchainPkg = pkgs.rust-bin.nightly."2025-06-23".default.override { + extensions = rustExtensions ++ [ "rustc-dev" "llvm-tools" ]; + }; + rustGPUToolchainRustPlatform = pkgs.makeRustPlatform { + cargo = rustGPUToolchainPkg; + rustc = rustGPUToolchainPkg; + }; + rustc_codegen_spirv = rustGPUToolchainRustPlatform.buildRustPackage (finalAttrs: { + pname = "rustc_codegen_spirv"; + version = "0-unstable-2025-08-04"; + src = pkgs.fetchFromGitHub { + owner = "Rust-GPU"; + repo = "rust-gpu"; + rev = "c12f216121820580731440ee79ebc7403d6ea04f"; + hash = "sha256-rG1cZvOV0vYb1dETOzzbJ0asYdE039UZImobXZfKIno="; + }; + cargoHash = "sha256-AEigcEc5wiBd3zLqWN/2HSbkfOVFneAqNvg9HsouZf4="; + cargoBuildFlags = [ "-p" "rustc_codegen_spirv" "--features=use-compiled-tools" "--no-default-features" ]; + doCheck = false; + }); + rustGpuCargo = pkgs.writeShellScriptBin "cargo" '' + #!${pkgs.lib.getExe pkgs.bash} + + filtered_args=() + for arg in "$@"; do + case "$arg" in + +nightly|+nightly-*) ;; + *) filtered_args+=("$arg") ;; + esac + done + + exec ${rustGPUToolchainPkg}/bin/cargo ${"\${filtered_args[@]}"} + ''; + rustGpuPathOverride = "${rustGpuCargo}/bin:${rustGPUToolchainPkg}/bin"; + + libcef = pkgs.libcef.overrideAttrs (finalAttrs: previousAttrs: { + version = "139.0.17"; + gitRevision = "6c347eb"; + chromiumVersion = "139.0.7258.31"; + srcHash = "sha256-kRMO8DP4El1qytDsAZBdHvR9AAHXce90nPdyfJailBg="; + + __intentionallyOverridingVersion = true; + + postInstall = '' + strip $out/lib/* + ''; + }); + libcefPath = pkgs.runCommand "libcef-path" {} '' + mkdir -p $out + + ln -s ${libcef}/include $out/include + find ${libcef}/lib -type f -name "*" -exec ln -s {} $out/ \; + find ${libcef}/libexec -type f -name "*" -exec ln -s {} $out/ \; + cp -r ${libcef}/share/cef/* $out/ + + echo '${builtins.toJSON { + type = "minimal"; + name = builtins.baseNameOf libcef.src.url; + sha1 = ""; + }}' > $out/archive.json + ''; + # Shared build inputs - system libraries that need to be in LD_LIBRARY_PATH buildInputs = with pkgs; [ # System libraries + wayland openssl vulkan-loader - mesa libraw + libGL - - # Tauri dependencies: keep in sync with https://v2.tauri.app/start/prerequisites/#system-dependencies (under the NixOS tab) - at-spi2-atk - atkmm - cairo - gdk-pixbuf - glib - gtk3 - harfbuzz - librsvg - libsoup_3 - pango - webkitgtk_4_1 - openssl + # X11 libraries, not needed on wayland! Remove when x11 is finally dead + libxkbcommon + xorg.libXcursor + xorg.libxcb + xorg.libX11 ]; # Development tools that don't need to be in LD_LIBRARY_PATH buildTools = [ - rustc-wasm + rust pkgs.nodejs pkgs.nodePackages.npm pkgs.binaryen pkgs.wasm-bindgen-cli - pkgs-unstable.wasm-pack + pkgs.wasm-pack pkgs.pkg-config pkgs.git - pkgs.gobject-introspection - pkgs-unstable.cargo-tauri - pkgs-unstable.cargo-about + pkgs.cargo-about # Linker pkgs.mold @@ -88,12 +138,11 @@ cargo-watch cargo-nextest cargo-expand - + # Profiling tools gnuplot samply cargo-flamegraph - ]; in { @@ -101,10 +150,12 @@ devShells.default = pkgs.mkShell { packages = buildInputs ++ buildTools ++ devTools; - LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; - GIO_MODULE_DIR="${pkgs.glib-networking}/lib/gio/modules/"; + LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath buildInputs}:${libcefPath}"; + CEF_PATH = libcefPath; XDG_DATA_DIRS="${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:$XDG_DATA_DIRS"; - + + RUST_GPU_PATH_OVERRIDE = rustGpuPathOverride; + RUSTC_CODEGEN_SPIRV_PATH = "${rustc_codegen_spirv}/lib/librustc_codegen_spirv.so"; shellHook = '' alias cargo='mold --run cargo' diff --git a/.nix/shell.nix b/.nix/shell.nix new file mode 100644 index 0000000000..17dae9531b --- /dev/null +++ b/.nix/shell.nix @@ -0,0 +1,31 @@ +# This is a helper file for people using NixOS as their operating system. +# If you don't know what this file does, you can safely ignore it. + +# If you are using Nix as your package manager, you can run 'nix-shell .nix' +# in the root directory of the project and Nix will open a bash shell +# with all the packages needed to build and run Graphite installed. +# A shell.nix file is used in the Nix ecosystem to define a development +# environment with specific dependencies. When you enter a Nix shell using +# this file, it ensures that all the specified tools and libraries are +# available regardless of the host system's configuration. This provides +# a reproducible development environment across different machines and developers. + +# You can enter the Nix shell and run Graphite like normal with: +# > npm start +# Or you can run it like this without needing to first enter the Nix shell: +# > nix-shell .nix --command "npm start" + +# Uses flake compat to provide a development shell that is identical to the one defined in the flake +(import + ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + nodeName = lock.nodes.root.inputs.flake-compat; + in + fetchTarball { + url = lock.nodes.${nodeName}.locked.url; + sha256 = lock.nodes.${nodeName}.locked.narHash; + } + ) + { src = ./.; } +).shellNix diff --git a/.vscode/settings.json b/.vscode/settings.json index 7f48a1c56a..a9ae607985 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -33,18 +33,21 @@ }, // Rust Analyzer config "rust-analyzer.cargo.allTargets": false, + "rust-analyzer.procMacro.ignored": { + "serde_derive": ["Serialize", "Deserialize"], + "specta_macros": ["Type"] // Disabled because of: https://github.com/specta-rs/specta/issues/387 + }, // ESLint config "eslint.format.enable": true, - "eslint.workingDirectories": ["./frontend", "./website/other/bezier-rs-demos", "./website"], + "eslint.workingDirectories": ["./frontend", "./website"], "eslint.validate": ["javascript", "typescript", "svelte"], // Svelte config "svelte.plugin.svelte.compilerWarnings": { - // NOTICE: Keep this list in sync with the list in `frontend/vite.config.ts` - "css-unused-selector": "ignore", - "vite-plugin-svelte-css-no-scopable-elements": "ignore", - "a11y-no-static-element-interactions": "ignore", - "a11y-no-noninteractive-element-interactions": "ignore", - "a11y-click-events-have-key-events": "ignore" + "css-unused-selector": "ignore", // NOTICE: Keep this list in sync with the list in `frontend/vite.config.ts` + "vite-plugin-svelte-css-no-scopable-elements": "ignore", // NOTICE: Keep this list in sync with the list in `frontend/vite.config.ts` + "a11y-no-static-element-interactions": "ignore", // NOTICE: Keep this list in sync with the list in `frontend/vite.config.ts` + "a11y-no-noninteractive-element-interactions": "ignore", // NOTICE: Keep this list in sync with the list in `frontend/vite.config.ts` + "a11y-click-events-have-key-events": "ignore" // NOTICE: Keep this list in sync with the list in `frontend/vite.config.ts` }, // VS Code config "html.format.wrapLineLength": 200, diff --git a/Cargo.lock b/Cargo.lock index cf65dd37b4..79c9f1ab8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "Inflector" @@ -20,9 +20,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "addr2line" @@ -70,21 +70,6 @@ dependencies = [ "equator", ] -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - [[package]] name = "allocator-api2" version = "0.2.21" @@ -93,21 +78,21 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-activity" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.1", + "bitflags 2.9.3", "cc", "cesu8", "jni", "jni-sys", "libc", "log", - "ndk 0.8.0", + "ndk", "ndk-context", - "ndk-sys 0.5.0+25.2.9519653", + "ndk-sys 0.6.0+11769913", "num_enum", "thiserror 1.0.69", ] @@ -141,9 +126,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -171,35 +156,35 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arg_enum_proc_macro" @@ -209,7 +194,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -236,30 +221,182 @@ version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading 0.8.8", + "libloading", ] [[package]] -name = "atk" -version = "0.18.2" +name = "ashpd" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" dependencies = [ - "atk-sys", - "glib", - "libc", + "async-fs", + "async-net", + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.9.2", + "raw-window-handle", + "serde", + "serde_repr", + "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "zbus", ] [[package]] -name = "atk-sys" -version = "0.18.2" +name = "async-broadcast" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.0.8", + "slab", + "windows-sys 0.60.2", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix 1.0.8", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "async-signal" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.0.8", + "signal-hook-registry", + "slab", + "windows-sys 0.60.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -290,67 +427,13 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" +checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" dependencies = [ "arrayvec", ] -[[package]] -name = "axum" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" -dependencies = [ - "axum-core", - "bytes", - "form_urlencoded", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "backtrace" version = "0.3.75" @@ -366,39 +449,12 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bezier-rs" -version = "0.4.0" -dependencies = [ - "dyn-any", - "glam", - "kurbo", - "serde", -] - -[[package]] -name = "bezier-rs-wasm" -version = "0.0.0" -dependencies = [ - "bezier-rs", - "glam", - "js-sys", - "log", - "wasm-bindgen", -] - [[package]] name = "bincode" version = "1.3.3" @@ -425,9 +481,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bit_field" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" @@ -437,9 +493,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" dependencies = [ "serde", ] @@ -465,25 +521,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" -dependencies = [ - "objc-sys", -] - -[[package]] -name = "block2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" -dependencies = [ - "block-sys", - "objc2 0.4.1", -] - [[package]] name = "block2" version = "0.5.1" @@ -499,28 +536,20 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] -name = "brotli" -version = "8.0.1" +name = "blocking" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", ] [[package]] @@ -537,22 +566,22 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -572,42 +601,23 @@ name = "bytes" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -dependencies = [ - "serde", -] [[package]] -name = "cairo-rs" -version = "0.18.5" +name = "bzip2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" dependencies = [ - "bitflags 2.9.1", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror 1.0.69", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" -dependencies = [ - "glib-sys", - "libc", - "system-deps", + "libbz2-rs-sys", ] [[package]] name = "calloop" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "log", "polling", "rustix 0.38.44", @@ -617,9 +627,9 @@ dependencies = [ [[package]] name = "calloop-wayland-source" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ "calloop", "rustix 0.38.44", @@ -627,48 +637,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "camino" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror 2.0.12", -] - -[[package]] -name = "cargo_toml" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" -dependencies = [ - "serde", - "toml 0.8.23", -] - [[package]] name = "cast" version = "0.3.0" @@ -677,32 +645,44 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.30" +version = "1.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" dependencies = [ "jobserver", "libc", "shlex", ] +[[package]] +name = "cef" +version = "139.0.1+139.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39b749cfc4124f9505b3fbe32279c0e93f30831f1ecf3c2cf85863179319cd7b" +dependencies = [ + "cef-dll-sys", + "libloading", + "windows-sys 0.60.2", +] + +[[package]] +name = "cef-dll-sys" +version = "139.0.1+139.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc42adb0adc477860b705e967d9f899be05ba3775fe4d6dc4d844a1391ffa3dd" +dependencies = [ + "anyhow", + "cmake", + "download-cef", + "serde_json", +] + [[package]] name = "cesu8" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - [[package]] name = "cfg-expr" version = "0.15.8" @@ -715,15 +695,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -741,7 +715,6 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", - "serde", "wasm-bindgen", "windows-link", ] @@ -775,9 +748,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.41" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" dependencies = [ "clap_builder", "clap_derive", @@ -785,9 +758,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" dependencies = [ "anstream", "anstyle", @@ -797,14 +770,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -813,6 +786,15 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + [[package]] name = "codespan-reporting" version = "0.12.0" @@ -872,16 +854,23 @@ dependencies = [ ] [[package]] -name = "convert_case" -version = "0.4.0" +name = "console" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.60.2", +] [[package]] name = "convert_case" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" dependencies = [ "unicode-segmentation", ] @@ -899,15 +888,15 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" dependencies = [ "cookie", "document-features", "idna", + "indexmap", "log", - "publicsuffix", "serde", "serde_derive", "serde_json", @@ -925,16 +914,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -948,21 +927,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types 0.5.0", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" -dependencies = [ - "bitflags 2.9.1", - "core-foundation 0.10.1", - "core-graphics-types 0.2.0", + "core-foundation", + "core-graphics-types", "foreign-types 0.5.0", "libc", ] @@ -974,18 +940,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" -dependencies = [ - "bitflags 2.9.1", - "core-foundation 0.10.1", + "core-foundation", "libc", ] @@ -1018,25 +973,22 @@ dependencies = [ [[package]] name = "criterion" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" dependencies = [ "anes", "cast", "ciborium", "clap", "criterion-plot", - "is-terminal", - "itertools 0.10.5", + "itertools 0.13.0", "num-traits", - "once_cell", "oorandom", "plotters", "rayon", "regex", "serde", - "serde_derive", "serde_json", "tinytemplate", "walkdir", @@ -1044,21 +996,12 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" dependencies = [ "cast", - "itertools 0.10.5", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", + "itertools 0.13.0", ] [[package]] @@ -1102,33 +1045,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "cssparser" -version = "0.29.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "matches", - "phf 0.10.1", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.104", -] - [[package]] name = "ctor" version = "0.2.9" @@ -1136,7 +1052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1144,56 +1060,23 @@ name = "cursor-icon" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" - -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.104", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.104", + "serde", ] [[package]] name = "data-url" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", - "serde", ] [[package]] @@ -1209,15 +1092,22 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.20" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ - "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1269,8 +1159,10 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.3", + "block2 0.6.1", + "libc", + "objc2 0.6.2", ] [[package]] @@ -1281,7 +1173,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1290,30 +1182,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.8", -] - -[[package]] -name = "dlopen2" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" -dependencies = [ - "dlopen2_derive", - "libc", - "once_cell", - "winapi", -] - -[[package]] -name = "dlopen2_derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", + "libloading", ] [[package]] @@ -1331,6 +1200,25 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "download-cef" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de5f62da6c2850fd20cdefef7dd5389121869a88de8af3fda5a20bc849eafdd" +dependencies = [ + "bzip2", + "clap", + "indicatif", + "regex", + "semver", + "serde", + "serde_json", + "sha1_smol", + "tar", + "thiserror 2.0.16", + "ureq", +] + [[package]] name = "dpi" version = "0.1.2" @@ -1340,27 +1228,6 @@ dependencies = [ "serde", ] -[[package]] -name = "dtoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - [[package]] name = "dyn-any" version = "0.3.1" @@ -1377,15 +1244,9 @@ dependencies = [ "dyn-any", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] -[[package]] -name = "dyn-clone" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" - [[package]] name = "either" version = "1.15.0" @@ -1393,24 +1254,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] -name = "embed-resource" -version = "3.0.5" +name = "encode_unicode" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38" -dependencies = [ - "cc", - "memchr", - "rustc_version", - "toml 0.9.2", - "vswhom", - "winreg", -] - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" @@ -1421,6 +1268,33 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "env_filter" version = "0.1.3" @@ -1461,7 +1335,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1470,16 +1344,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "erased-serde" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" -dependencies = [ - "serde", - "typeid", -] - [[package]] name = "errno" version = "0.3.13" @@ -1499,6 +1363,27 @@ dependencies = [ "num-traits", ] +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "exr" version = "1.73.0" @@ -1529,6 +1414,26 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "fdeflate" version = "0.3.7" @@ -1549,13 +1454,15 @@ dependencies = [ ] [[package]] -name = "field-offset" -version = "0.3.6" +name = "filetime" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ - "memoffset", - "rustc_version", + "cfg-if", + "libc", + "libredox", + "windows-sys 0.60.2", ] [[package]] @@ -1634,6 +1541,20 @@ dependencies = [ "ttf-parser 0.24.1", ] +[[package]] +name = "fontdb" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.25.1", +] + [[package]] name = "fontique" version = "0.5.0" @@ -1642,10 +1563,10 @@ checksum = "39f97079e1293b8c1e9fb03a2875d328bd2ee8f3b95ce62959c0acc04049c708" dependencies = [ "bytemuck", "fontconfig-cache-parser", - "hashbrown 0.15.4", + "hashbrown", "icu_locid", "memmap2", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", "objc2-core-text", "objc2-foundation 0.3.1", @@ -1653,7 +1574,7 @@ dependencies = [ "read-fonts 0.29.3", "roxmltree", "smallvec", - "windows 0.58.0", + "windows", "windows-core 0.58.0", ] @@ -1684,7 +1605,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1701,23 +1622,13 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.31" @@ -1777,6 +1688,19 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.31" @@ -1785,7 +1709,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1818,114 +1742,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" -dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", - "once_cell", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" -dependencies = [ - "gdk", - "gdkx11-sys", - "gio", - "glib", - "libc", - "x11", -] - -[[package]] -name = "gdkx11-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1938,23 +1754,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.4.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "libc", - "windows-targets 0.48.5", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "rustix 1.0.8", + "windows-targets 0.52.6", ] [[package]] @@ -1980,7 +1785,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", "wasm-bindgen", ] @@ -2000,38 +1805,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "gio" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "gio-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - [[package]] name = "gl_generator" version = "0.14.0" @@ -2049,61 +1822,16 @@ version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" dependencies = [ + "bytemuck", + "libm", "serde", ] -[[package]] -name = "glib" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" -dependencies = [ - "bitflags 2.9.1", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "once_cell", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "glib-macros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 2.0.0", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "glib-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" -dependencies = [ - "libc", - "system-deps", -] - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "glow" @@ -2126,24 +1854,13 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "gobject-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - [[package]] name = "gpu-alloc" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "gpu-alloc-types", ] @@ -2153,7 +1870,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] @@ -2165,7 +1882,7 @@ dependencies = [ "log", "presser", "thiserror 1.0.69", - "windows 0.58.0", + "windows", ] [[package]] @@ -2174,9 +1891,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "gpu-descriptor-types", - "hashbrown 0.15.4", + "hashbrown", ] [[package]] @@ -2185,14 +1902,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] name = "graph-craft" version = "0.1.0" dependencies = [ - "bezier-rs", "criterion", "dyn-any", "glam", @@ -2269,33 +1985,49 @@ dependencies = [ name = "graphene-core" version = "0.1.0" dependencies = [ - "base64 0.22.1", - "bezier-rs", + "base64", "bytemuck", "ctor", "dyn-any", "glam", - "half", + "graphene-core-shaders", "image", "kurbo", "log", + "lyon_geom", "node-macro", - "num-derive", "num-traits", "parley", "petgraph 0.7.1", + "poly-cool", "rand 0.9.2", "rand_chacha 0.9.0", "rustc-hash 2.1.1", "serde", "serde_json", - "skrifa 0.32.0", + "skrifa 0.36.0", "specta", "tinyvec", "tokio", "wgpu", ] +[[package]] +name = "graphene-core-shaders" +version = "0.1.0" +dependencies = [ + "bytemuck", + "dyn-any", + "glam", + "graphene-core", + "half", + "log", + "num-derive", + "num-traits", + "serde", + "specta", +] + [[package]] name = "graphene-math-nodes" version = "0.1.0" @@ -2312,7 +2044,6 @@ dependencies = [ name = "graphene-path-bool" version = "0.1.0" dependencies = [ - "bezier-rs", "dyn-any", "glam", "graphene-core", @@ -2327,16 +2058,18 @@ dependencies = [ name = "graphene-raster-nodes" version = "0.1.0" dependencies = [ - "bezier-rs", "bytemuck", "dyn-any", "fastnoise-lite", "futures", "glam", "graphene-core", + "graphene-core-shaders", "image", + "kurbo", "ndarray", "node-macro", + "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "serde", @@ -2348,11 +2081,8 @@ dependencies = [ name = "graphene-std" version = "0.1.0" dependencies = [ - "base64 0.22.1", - "bytemuck", + "base64", "dyn-any", - "fastnoise-lite", - "futures", "glam", "graph-craft", "graphene-application-io", @@ -2364,10 +2094,7 @@ dependencies = [ "graphene-svg-renderer", "image", "log", - "ndarray", "node-macro", - "rand 0.9.2", - "rand_chacha 0.9.0", "reqwest", "tokio", "vello", @@ -2381,15 +2108,15 @@ dependencies = [ name = "graphene-svg-renderer" version = "0.1.0" dependencies = [ - "base64 0.22.1", - "bezier-rs", + "base64", "dyn-any", "glam", "graphene-core", + "kurbo", "log", "num-traits", "serde", - "usvg", + "usvg 0.45.1", "vello", ] @@ -2397,26 +2124,63 @@ dependencies = [ name = "graphite-desktop" version = "0.1.0" dependencies = [ - "axum", - "chrono", - "fern", + "ash", + "bytemuck", + "cef", + "cef-dll-sys", + "core-foundation", + "derivative", + "dirs", "futures", - "graphite-editor", - "log", + "glam", + "graphite-desktop-embedded-resources", + "graphite-desktop-wrapper", + "libc", + "objc2-io-surface", + "objc2-metal 0.3.1", + "open", + "rfd", "ron", - "tauri", - "tauri-build", - "tauri-plugin-http", - "tauri-plugin-shell", - "tokio", + "thiserror 2.0.16", + "tracing", + "tracing-subscriber", + "vello", + "wgpu", + "windows", + "winit", +] + +[[package]] +name = "graphite-desktop-embedded-resources" +version = "0.1.0" +dependencies = [ + "include_dir", +] + +[[package]] +name = "graphite-desktop-wrapper" +version = "0.1.0" +dependencies = [ + "dirs", + "futures", + "graph-craft", + "graphene-std", + "graphite-editor", + "image", + "ron", + "thiserror 2.0.16", + "tracing", + "vello", + "wgpu", + "wgpu-executor", ] [[package]] name = "graphite-editor" version = "0.0.0" dependencies = [ - "bezier-rs", - "bitflags 2.9.1", + "base64", + "bitflags 2.9.3", "derivative", "dyn-any", "env_logger", @@ -2432,16 +2196,15 @@ dependencies = [ "num_enum", "once_cell", "preprocessor", - "ron", "serde", "serde_json", "specta", "spin", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", - "usvg", + "usvg 0.45.1", + "vello", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", "wgpu-executor", ] @@ -2454,7 +2217,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2467,6 +2230,7 @@ dependencies = [ "js-sys", "log", "math-parser", + "ron", "serde", "serde-wasm-bindgen", "wasm-bindgen", @@ -2475,58 +2239,6 @@ dependencies = [ "wgpu", ] -[[package]] -name = "gtk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" -dependencies = [ - "atk", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "guillotiere" version = "0.6.2" @@ -2539,9 +2251,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -2549,7 +2261,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.10.0", + "indexmap", "slab", "tokio", "tokio-util", @@ -2571,27 +2283,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -2616,18 +2316,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "html5ever" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" -dependencies = [ - "log", - "mac", - "markup5ever", - "match_token", -] - [[package]] name = "http" version = "1.3.1" @@ -2668,28 +2356,23 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -2734,7 +2417,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", @@ -2746,7 +2429,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2", "system-configuration", "tokio", "tower-service", @@ -2756,34 +2439,36 @@ dependencies = [ [[package]] name = "iai-callgrind" -version = "0.12.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283f598a969822c70af13aae1272ba09c97014c7344d3b24652e5b1d7b771c36" +checksum = "0b1e4910d3a9137442723dfb772c32dc10674c4181ca078d2fd227cd5dce9db0" dependencies = [ "bincode", + "derive_more", "iai-callgrind-macros", "iai-callgrind-runner", ] [[package]] name = "iai-callgrind-macros" -version = "0.3.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e2ff2e86bdba764b66d94b65f2caa03da60d971a6930fdc2e67f12582c5bb8" +checksum = "4d03775318d3f9f01b39ac6612b01464006dc397a654a89dd57df2fd34fb68c3" dependencies = [ - "proc-macro-error", + "derive_more", + "proc-macro-error2", "proc-macro2", "quote", "serde", "serde_json", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "iai-callgrind-runner" -version = "0.12.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb92a65def0d3a0ef41029c411dc2ecdd3518708c062f8bd576fd4143be1c56b" +checksum = "b74c9743c00c3bca4aaffc69c87cae56837796cd362438daf354a3f785788c68" dependencies = [ "serde", ] @@ -2812,27 +2497,6 @@ dependencies = [ "cc", ] -[[package]] -name = "ico" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "icrate" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" -dependencies = [ - "block2 0.3.0", - "dispatch", - "objc2 0.4.1", -] - [[package]] name = "icu_collections" version = "2.0.0" @@ -2931,17 +2595,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2960,18 +2618,19 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "1c6a3ce16143778e24df6f95365f12ed105425b22abefd289dd88a64bab59605" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "exr", "gif", - "image-webp 0.2.3", + "image-webp 0.2.4", + "moxcms", "num-traits", - "png", + "png 0.18.0", "qoi", "ravif", "rayon", @@ -2993,9 +2652,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", "quick-error", @@ -3014,25 +2673,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] -name = "indexmap" -version = "1.9.3" +name = "include_dir" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", ] [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", - "hashbrown 0.15.4", - "serde", + "hashbrown", +] + +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console", + "portable-atomic", + "unicode-width", + "unit-prefix", + "web-time", ] [[package]] @@ -3041,15 +2720,6 @@ version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" -[[package]] -name = "infer" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" -dependencies = [ - "cfb", -] - [[package]] name = "interpolate_name" version = "0.2.4" @@ -3058,7 +2728,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3073,6 +2743,7 @@ dependencies = [ "graphene-core", "graphene-path-bool", "graphene-std", + "iai-callgrind", "log", "once_cell", "serde", @@ -3081,11 +2752,11 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "cfg-if", "libc", ] @@ -3115,17 +2786,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "is-wsl" version = "0.4.0" @@ -3144,18 +2804,18 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" -version = "0.10.5" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -3166,29 +2826,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" -[[package]] -name = "javascriptcore-rs" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" -dependencies = [ - "bitflags 1.3.2", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "jiff" version = "0.2.15" @@ -3210,7 +2847,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3237,20 +2874,14 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" version = "0.3.77" @@ -3261,39 +2892,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json-patch" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" -dependencies = [ - "jsonptr", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "jsonptr" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "keyboard-types" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" -dependencies = [ - "bitflags 2.9.1", - "serde", - "unicode-segmentation", -] - [[package]] name = "khronos-egl" version = "6.0.0" @@ -3301,7 +2899,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.8", + "libloading", "pkg-config", ] @@ -3311,18 +2909,6 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" -[[package]] -name = "kuchikiki" -version = "0.8.8-speedreader" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" -dependencies = [ - "cssparser", - "html5ever", - "indexmap 2.10.0", - "selectors", -] - [[package]] name = "kurbo" version = "0.11.3" @@ -3348,34 +2934,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] -name = "libappindicator" -version = "0.9.0" +name = "libbz2-rs-sys" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" -dependencies = [ - "glib", - "gtk", - "gtk-sys", - "libappindicator-sys", - "log", -] - -[[package]] -name = "libappindicator-sys" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" -dependencies = [ - "gtk-sys", - "libloading 0.7.4", - "once_cell", -] +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libfuzzer-sys" @@ -3387,16 +2955,6 @@ dependencies = [ "cc", ] -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - [[package]] name = "libloading" version = "0.8.8" @@ -3404,7 +2962,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -3415,13 +2973,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "libc", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", ] [[package]] @@ -3450,9 +3008,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lock_api" @@ -3486,10 +3044,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] -name = "mac" -version = "0.1.1" +name = "lyon_geom" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" +checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +dependencies = [ + "arrayvec", + "euclid", + "num-traits", +] [[package]] name = "malloc_buf" @@ -3501,42 +3064,14 @@ dependencies = [ ] [[package]] -name = "markup5ever" -version = "0.14.1" +name = "matchers" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "log", - "phf 0.11.3", - "phf_codegen 0.11.3", - "string_cache", - "string_cache_codegen", - "tendril", + "regex-automata", ] -[[package]] -name = "match_token" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matchit" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - [[package]] name = "math-parser" version = "0.0.0" @@ -3546,7 +3081,7 @@ dependencies = [ "num-complex", "pest", "pest_derive", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -3577,9 +3112,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -3599,9 +3134,9 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "block", - "core-graphics-types 0.1.3", + "core-graphics-types", "foreign-types 0.5.0", "log", "objc", @@ -3642,24 +3177,13 @@ dependencies = [ ] [[package]] -name = "muda" -version = "0.17.0" +name = "moxcms" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988" +checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" dependencies = [ - "crossbeam-channel", - "dpi", - "gtk", - "keyboard-types", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation 0.3.1", - "once_cell", - "png", - "serde", - "thiserror 2.0.12", - "windows-sys 0.59.0", + "num-traits", + "pxfm", ] [[package]] @@ -3670,21 +3194,21 @@ checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.1", - "cfg_aliases 0.2.1", + "bitflags 2.9.3", + "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.15.4", + "hashbrown", "hexf-parse", - "indexmap 2.10.0", + "indexmap", "log", "num-traits", "once_cell", "petgraph 0.8.2", "rustc-hash 1.1.0", "spirv", - "strum", - "thiserror 2.0.12", + "strum 0.26.3", + "thiserror 2.0.16", "unicode-ident", ] @@ -3720,28 +3244,13 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "ndk" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" -dependencies = [ - "bitflags 2.9.1", - "jni-sys", - "log", - "ndk-sys 0.5.0+25.2.9519653", - "num_enum", - "raw-window-handle", - "thiserror 1.0.69", -] - [[package]] name = "ndk" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -3781,24 +3290,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] -name = "node-macro" -version = "0.0.0" +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "convert_case 0.7.1", - "graphene-core", - "indoc", - "proc-macro-crate 3.3.0", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.104", + "bitflags 2.9.3", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", ] [[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +name = "node-macro" +version = "0.0.0" +dependencies = [ + "convert_case", + "graphene-core", + "indoc", + "proc-macro-crate", + "proc-macro-error2", + "proc-macro2", + "quote", + "strum 0.27.2", + "syn 2.0.106", +] [[package]] name = "nom" @@ -3816,6 +3333,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -3849,7 +3375,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3898,10 +3424,10 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3919,16 +3445,6 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" -[[package]] -name = "objc2" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" -dependencies = [ - "objc-sys", - "objc2-encode 3.0.0", -] - [[package]] name = "objc2" version = "0.5.2" @@ -3936,17 +3452,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ "objc-sys", - "objc2-encode 4.1.0", + "objc2-encode", ] [[package]] name = "objc2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" dependencies = [ - "objc2-encode 4.1.0", - "objc2-exception-helper", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.9.3", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation 0.2.2", + "objc2-quartz-core", ] [[package]] @@ -3955,39 +3486,46 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "block2 0.6.1", - "libc", - "objc2 0.6.1", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", + "objc2 0.6.2", "objc2-foundation 0.3.1", - "objc2-quartz-core 0.3.1", ] [[package]] name = "objc2-cloud-kit" -version = "0.3.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", - "objc2-foundation 0.3.1", + "bitflags 2.9.3", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] name = "objc2-core-data" -version = "0.3.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", - "objc2-foundation 0.3.1", + "bitflags 2.9.3", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3996,32 +3534,33 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "dispatch2", - "objc2 0.6.1", -] - -[[package]] -name = "objc2-core-graphics" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" -dependencies = [ - "bitflags 2.9.1", - "dispatch2", - "objc2 0.6.1", - "objc2-core-foundation", - "objc2-io-surface", + "objc2 0.6.2", ] [[package]] name = "objc2-core-image" -version = "0.3.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "objc2 0.6.1", - "objc2-foundation 0.3.1", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal 0.2.2", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-contacts", + "objc2-foundation 0.2.2", ] [[package]] @@ -4030,39 +3569,25 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ba833d4a1cb1aac330f8c973fd92b6ff1858e4aef5cdd00a255eefb28022fb5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "objc2-core-foundation", ] -[[package]] -name = "objc2-encode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" - [[package]] name = "objc2-encode" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" -[[package]] -name = "objc2-exception-helper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" -dependencies = [ - "cc", -] - [[package]] name = "objc2-foundation" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "block2 0.5.1", + "dispatch", "libc", "objc2 0.5.2", ] @@ -4073,10 +3598,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.1", - "block2 0.6.1", - "libc", - "objc2 0.6.1", + "bitflags 2.9.3", + "objc2 0.6.2", "objc2-core-foundation", ] @@ -4086,9 +3609,23 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.3", + "libc", + "objc2 0.6.2", "objc2-core-foundation", + "objc2-foundation 0.3.1", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -4097,60 +3634,92 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-metal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" +dependencies = [ + "bitflags 2.9.3", + "block2 0.6.1", + "dispatch2", + "objc2 0.6.2", + "objc2-core-foundation", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-quartz-core" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", - "objc2-metal", + "objc2-metal 0.2.2", ] [[package]] -name = "objc2-quartz-core" -version = "0.3.1" +name = "objc2-symbols" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", - "objc2-foundation 0.3.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] name = "objc2-ui-kit" -version = "0.3.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", - "objc2-core-foundation", - "objc2-foundation 0.3.1", + "bitflags 2.9.3", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation 0.2.2", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", ] [[package]] -name = "objc2-web-kit" -version = "0.3.1" +name = "objc2-uniform-type-identifiers" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "bitflags 2.9.1", - "block2 0.6.1", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation 0.3.1", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.9.3", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation 0.2.2", ] [[package]] @@ -4186,7 +3755,6 @@ version = "5.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" dependencies = [ - "dunce", "is-wsl", "libc", "pathdiff", @@ -4198,7 +3766,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "cfg-if", "foreign-types 0.3.2", "libc", @@ -4215,7 +3783,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4261,48 +3829,29 @@ dependencies = [ ] [[package]] -name = "os_pipe" -version = "1.2.2" +name = "ordered-stream" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ - "libc", - "windows-sys 0.59.0", + "futures-core", + "pin-project-lite", ] [[package]] name = "owned_ttf_parser" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ "ttf-parser 0.25.1", ] [[package]] -name = "pango" -version = "0.18.3" +name = "parking" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" -dependencies = [ - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -4322,7 +3871,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", "smallvec", "windows-targets 0.52.6", ] @@ -4334,7 +3883,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13e57638545cf2ba4c3e72cc5715e53b1880b829cc3dbefda3d1700c58efe723" dependencies = [ "fontique", - "hashbrown 0.15.4", + "hashbrown", "peniko", "skrifa 0.31.3", "swash", @@ -4354,9 +3903,13 @@ dependencies = [ "glam", "glob", "image", + "lyon_geom", "regex", "resvg", + "roots", + "rustc-hash 2.1.1", "slotmap", + "smallvec", "svg", ] @@ -4379,9 +3932,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" @@ -4390,7 +3943,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.16", "ucd-trie", ] @@ -4414,7 +3967,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4434,7 +3987,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.10.0", + "indexmap", ] [[package]] @@ -4444,151 +3997,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca" dependencies = [ "fixedbitset", - "hashbrown 0.15.4", - "indexmap 2.10.0", + "hashbrown", + "indexmap", "serde", ] -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_shared 0.8.0", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.1", -] - [[package]] name = "pico-args" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -4601,25 +4040,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "plist" -version = "1.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" -dependencies = [ - "base64 0.22.1", - "indexmap 2.10.0", - "quick-xml 0.38.0", - "serde", - "time", -] - [[package]] name = "plotters" version = "0.3.7" @@ -4662,10 +4099,23 @@ dependencies = [ ] [[package]] -name = "polling" -version = "3.9.0" +name = "png" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.3", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", @@ -4675,6 +4125,21 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "pollster" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" + +[[package]] +name = "poly-cool" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8370a553db72b99cd797d84e98f4f3a43bc7b57a3d9f0c9f095cbb24683694c1" +dependencies = [ + "arrayvec", +] + [[package]] name = "portable-atomic" version = "1.11.1" @@ -4692,9 +4157,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -4714,12 +4179,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "preprocessor" version = "0.1.0" @@ -4727,6 +4186,7 @@ dependencies = [ "graph-craft", "graphene-std", "interpreted-executor", + "log", ] [[package]] @@ -4745,56 +4205,13 @@ dependencies = [ "yansi", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" -dependencies = [ - "toml_edit 0.20.7", -] - [[package]] name = "proc-macro-crate" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.27", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", + "toml_edit", ] [[package]] @@ -4816,20 +4233,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -4850,23 +4261,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] -name = "psl-types" -version = "2.0.11" +name = "pxfm" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "publicsuffix" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +checksum = "6e790881194f6f6e86945f0a42a6981977323669aeb6c40e9c7ec253133b96f8" dependencies = [ - "idna", - "psl-types", + "num-traits", ] [[package]] @@ -4893,40 +4297,31 @@ dependencies = [ "memchr", ] -[[package]] -name = "quick-xml" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" -dependencies = [ - "memchr", -] - [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", - "cfg_aliases 0.2.1", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2 0.5.10", - "thiserror 2.0.12", + "socket2", + "thiserror 2.0.16", "tokio", "tracing", - "web-time 1.1.0", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.3", @@ -4937,24 +4332,24 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.16", "tinyvec", "tracing", - "web-time 1.1.0", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4972,20 +4367,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - [[package]] name = "rand" version = "0.8.5" @@ -5007,16 +4388,6 @@ dependencies = [ "rand_core 0.9.3", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -5037,15 +4408,6 @@ dependencies = [ "rand_core 0.9.3", ] -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - [[package]] name = "rand_core" version = "0.6.4" @@ -5064,24 +4426,6 @@ dependencies = [ "getrandom 0.3.3", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "range-alloc" version = "0.1.4" @@ -5152,9 +4496,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -5162,9 +4506,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -5182,9 +4526,9 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.30.1" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "192735ef611aac958468e670cb98432c925426f3cb71521fda202130f7388d91" +checksum = "8941f8e9d5f8ad3aebea330d01ac68c0167600eb31a86ecd86e97be4d13b51f5" dependencies = [ "bytemuck", "font-types", @@ -5192,58 +4536,38 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.5.15" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", -] - -[[package]] -name = "ref-cast" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", + "thiserror 2.0.16", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", @@ -5253,9 +4577,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -5264,9 +4588,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "renderdoc-sys" @@ -5276,14 +4600,12 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ - "base64 0.22.1", + "base64", "bytes", - "cookie", - "cookie_store", "encoding_rs", "futures-channel", "futures-core", @@ -5312,14 +4634,12 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", - "tokio-util", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", "webpki-roots", ] @@ -5337,10 +4657,34 @@ dependencies = [ "rgb", "svgtypes", "tiny-skia", - "usvg", + "usvg 0.44.0", "zune-jpeg", ] +[[package]] +name = "rfd" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" +dependencies = [ + "ashpd", + "block2 0.6.1", + "dispatch2", + "js-sys", + "log", + "objc2 0.6.2", + "objc2-app-kit 0.3.1", + "objc2-core-foundation", + "objc2-foundation 0.3.1", + "pollster", + "raw-window-handle", + "urlencoding", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.59.0", +] + [[package]] name = "rgb" version = "0.8.52" @@ -5366,16 +4710,23 @@ dependencies = [ [[package]] name = "ron" -version = "0.8.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" dependencies = [ - "base64 0.21.7", - "bitflags 2.9.1", + "base64", + "bitflags 2.9.3", "serde", "serde_derive", + "unicode-ident", ] +[[package]] +name = "roots" +version = "0.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082f11ffa03bbef6c2c6ea6bea1acafaade2fd9050ae0234ab44a2153742b058" + [[package]] name = "roxmltree" version = "0.20.0" @@ -5384,9 +4735,9 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -5400,22 +4751,13 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5428,7 +4770,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "errno", "libc", "linux-raw-sys 0.9.4", @@ -5437,10 +4779,11 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -5449,13 +4792,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "web-time 1.1.0", + "web-time", "zeroize", ] @@ -5472,9 +4824,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustybuzz" @@ -5482,14 +4834,32 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c85d1ccd519e61834798eb52c4e886e8c2d7d698dd3d6ce0b1b47eb8557f1181" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "bytemuck", "core_maths", "log", "smallvec", "ttf-parser 0.24.1", - "unicode-bidi-mirroring", - "unicode-ccc", + "unicode-bidi-mirroring 0.3.0", + "unicode-ccc 0.3.0", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "rustybuzz" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" +dependencies = [ + "bitflags 2.9.3", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser 0.25.1", + "unicode-bidi-mirroring 0.4.0", + "unicode-ccc 0.4.0", "unicode-properties", "unicode-script", ] @@ -5518,57 +4888,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", - "url", - "uuid", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.104", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -5583,9 +4902,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" -version = "0.8.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ "ab_glyph", "log", @@ -5600,8 +4919,8 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", - "core-foundation 0.9.4", + "bitflags 2.9.3", + "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", @@ -5617,32 +4936,11 @@ dependencies = [ "libc", ] -[[package]] -name = "selectors" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" -dependencies = [ - "bitflags 1.3.2", - "cssparser", - "derive_more", - "fxhash", - "log", - "phf 0.8.0", - "phf_codegen 0.8.0", - "precomputed-hash", - "servo_arc", - "smallvec", -] - [[package]] name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] [[package]] name = "serde" @@ -5653,17 +4951,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-untagged" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" -dependencies = [ - "erased-serde", - "serde", - "typeid", -] - [[package]] name = "serde-wasm-bindgen" version = "0.6.5" @@ -5683,25 +4970,14 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "itoa", "memchr", @@ -5709,16 +4985,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" -dependencies = [ - "itoa", - "serde", -] - [[package]] name = "serde_repr" version = "0.1.20" @@ -5727,7 +4993,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5739,15 +5005,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -5761,68 +5018,10 @@ dependencies = [ ] [[package]] -name = "serde_with" -version = "3.14.0" +name = "sha1_smol" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.10.0", - "schemars 0.9.0", - "schemars 1.0.4", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" -dependencies = [ - "nodrop", - "stable_deref_trait", -] +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sha2" @@ -5836,14 +5035,12 @@ dependencies = [ ] [[package]] -name = "shared_child" -version = "1.1.1" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "libc", - "sigchld", - "windows-sys 0.60.2", + "lazy_static", ] [[package]] @@ -5852,32 +5049,11 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "sigchld" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" -dependencies = [ - "libc", - "os_pipe", - "signal-hook", -] - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -5906,12 +5082,6 @@ dependencies = [ "log", ] -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "siphasher" version = "1.0.1" @@ -5930,19 +5100,19 @@ dependencies = [ [[package]] name = "skrifa" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d632b5a73f566303dbeabd344dc3e716fd4ddc9a70d6fc8ea8e6f06617da97" +checksum = "37004372610e83ee2a4c69c7d896b41f33da6a3dc1a4fe07dd9b2629a549b1dc" dependencies = [ "bytemuck", - "read-fonts 0.30.1", + "read-fonts 0.34.0", ] [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slotmap" @@ -5964,11 +5134,11 @@ dependencies = [ [[package]] name = "smithay-client-toolkit" -version = "0.18.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "calloop", "calloop-wayland-source", "cursor-icon", @@ -5996,16 +5166,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.0" @@ -6017,51 +5177,14 @@ dependencies = [ ] [[package]] -name = "softbuffer" -version = "0.4.6" +name = "socks" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" dependencies = [ - "bytemuck", - "cfg_aliases 0.2.1", - "core-graphics 0.24.0", - "foreign-types 0.5.0", - "js-sys", - "log", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", - "raw-window-handle", - "redox_syscall 0.5.15", - "wasm-bindgen", - "web-sys", - "windows-sys 0.59.0", -] - -[[package]] -name = "soup3" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" -dependencies = [ - "futures-channel", - "gio", - "glib", + "byteorder", "libc", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "winapi", ] [[package]] @@ -6084,14 +5207,14 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "spin" -version = "0.9.8" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" dependencies = [ "lock_api", ] @@ -6102,7 +5225,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] @@ -6126,31 +5249,6 @@ dependencies = [ "float-cmp", ] -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - [[package]] name = "strsim" version = "0.11.1" @@ -6163,7 +5261,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros 0.27.2", ] [[package]] @@ -6172,11 +5279,23 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -6204,7 +5323,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" dependencies = [ "kurbo", - "siphasher 1.0.1", + "siphasher", ] [[package]] @@ -6218,17 +5337,6 @@ dependencies = [ "zeno", ] -[[package]] -name = "swift-rs" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" -dependencies = [ - "base64 0.21.7", - "serde", - "serde_json", -] - [[package]] name = "syn" version = "1.0.109" @@ -6242,9 +5350,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -6268,7 +5376,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6277,8 +5385,8 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", - "core-foundation 0.9.4", + "bitflags 2.9.3", + "core-foundation", "system-configuration-sys", ] @@ -6299,60 +5407,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.5.0", + "heck", "pkg-config", - "toml 0.8.23", + "toml", "version-compare", ] [[package]] -name = "tao" -version = "0.34.0" +name = "tar" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" dependencies = [ - "bitflags 2.9.1", - "core-foundation 0.10.1", - "core-graphics 0.24.0", - "crossbeam-channel", - "dispatch", - "dlopen2", - "dpi", - "gdkwayland-sys", - "gdkx11-sys", - "gtk", - "jni", - "lazy_static", + "filetime", "libc", - "log", - "ndk 0.9.0", - "ndk-context", - "ndk-sys 0.6.0+11769913", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-foundation 0.3.1", - "once_cell", - "parking_lot", - "raw-window-handle", - "scopeguard", - "tao-macros", - "unicode-segmentation", - "url", - "windows 0.61.3", - "windows-core 0.61.2", - "windows-version", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", + "xattr", ] [[package]] @@ -6361,323 +5430,17 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" -[[package]] -name = "tauri" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7" -dependencies = [ - "anyhow", - "bytes", - "dirs", - "dunce", - "embed_plist", - "getrandom 0.3.3", - "glob", - "gtk", - "heck 0.5.0", - "http", - "jni", - "libc", - "log", - "mime", - "muda", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-foundation 0.3.1", - "objc2-ui-kit", - "percent-encoding", - "plist", - "raw-window-handle", - "reqwest", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "swift-rs", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "thiserror 2.0.12", - "tokio", - "tray-icon", - "url", - "urlpattern", - "webkit2gtk", - "webview2-com", - "window-vibrancy", - "windows 0.61.3", -] - -[[package]] -name = "tauri-build" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064" -dependencies = [ - "anyhow", - "cargo_toml", - "dirs", - "glob", - "heck 0.5.0", - "json-patch", - "schemars 0.8.22", - "semver", - "serde", - "serde_json", - "tauri-utils", - "tauri-winres", - "toml 0.8.23", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a" -dependencies = [ - "base64 0.22.1", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "syn 2.0.104", - "tauri-utils", - "thiserror 2.0.12", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.104", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02" -dependencies = [ - "anyhow", - "glob", - "plist", - "schemars 0.8.22", - "serde", - "serde_json", - "tauri-utils", - "toml 0.8.23", - "walkdir", -] - -[[package]] -name = "tauri-plugin-fs" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99" -dependencies = [ - "anyhow", - "dunce", - "glob", - "percent-encoding", - "schemars 0.8.22", - "serde", - "serde_json", - "serde_repr", - "tauri", - "tauri-plugin", - "tauri-utils", - "thiserror 2.0.12", - "toml 0.8.23", - "url", -] - -[[package]] -name = "tauri-plugin-http" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2" -dependencies = [ - "bytes", - "cookie_store", - "data-url", - "http", - "regex", - "reqwest", - "schemars 0.8.22", - "serde", - "serde_json", - "tauri", - "tauri-plugin", - "tauri-plugin-fs", - "thiserror 2.0.12", - "tokio", - "url", - "urlpattern", -] - -[[package]] -name = "tauri-plugin-shell" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b9ffadec5c3523f11e8273465cacb3d86ea7652a28e6e2a2e9b5c182f791d25" -dependencies = [ - "encoding_rs", - "log", - "open", - "os_pipe", - "regex", - "schemars 0.8.22", - "serde", - "serde_json", - "shared_child", - "tauri", - "tauri-plugin", - "thiserror 2.0.12", - "tokio", -] - -[[package]] -name = "tauri-runtime" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676" -dependencies = [ - "cookie", - "dpi", - "gtk", - "http", - "jni", - "objc2 0.6.1", - "objc2-ui-kit", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror 2.0.12", - "url", - "windows 0.61.3", -] - -[[package]] -name = "tauri-runtime-wry" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439" -dependencies = [ - "gtk", - "http", - "jni", - "log", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-foundation 0.3.1", - "once_cell", - "percent-encoding", - "raw-window-handle", - "softbuffer", - "tao", - "tauri-runtime", - "tauri-utils", - "url", - "webkit2gtk", - "webview2-com", - "windows 0.61.3", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e" -dependencies = [ - "anyhow", - "brotli", - "cargo_metadata", - "ctor", - "dunce", - "glob", - "html5ever", - "http", - "infer", - "json-patch", - "kuchikiki", - "log", - "memchr", - "phf 0.11.3", - "proc-macro2", - "quote", - "regex", - "schemars 0.8.22", - "semver", - "serde", - "serde-untagged", - "serde_json", - "serde_with", - "swift-rs", - "thiserror 2.0.12", - "toml 0.8.23", - "url", - "urlpattern", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-winres" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4" -dependencies = [ - "embed-resource", - "indexmap 2.10.0", - "toml 0.8.23", -] - [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.0.8", - "windows-sys 0.59.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", + "windows-sys 0.60.2", ] [[package]] @@ -6700,11 +5463,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -6715,39 +5478,50 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", ] [[package]] name = "tiff" -version = "0.9.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ + "fax", "flate2", - "jpeg-decoder", + "half", + "quick-error", "weezl", + "zune-jpeg", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "8ca967379f9d8eb8058d86ed467d81d03e81acd45757e4ca341c24affbe8e8e3" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde", @@ -6757,15 +5531,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "a9108bb380861b07264b950ded55a44a14a4adc68b9f5efd85aafc3aa4d40a68" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "7182799245a7264ce590b349d90338f1c1affad93d2639aed5f8f69c090b334c" dependencies = [ "num-conv", "time-core", @@ -6782,7 +5556,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png", + "png 0.17.16", "tiny-skia-path", ] @@ -6828,9 +5602,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -6843,9 +5617,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -6854,9 +5628,9 @@ dependencies = [ "mio", "pin-project-lite", "slab", - "socket2 0.5.10", + "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6867,7 +5641,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6892,9 +5666,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -6910,24 +5684,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac" -dependencies = [ - "indexmap 2.10.0", - "serde", - "serde_spanned 1.0.0", - "toml_datetime 0.7.0", - "toml_parser", - "toml_writer", - "winnow 0.7.12", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] @@ -6939,72 +5698,19 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_datetime" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.10.0", - "toml_datetime 0.6.11", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" -dependencies = [ - "indexmap 2.10.0", - "toml_datetime 0.6.11", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap", "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_write", - "winnow 0.7.12", + "serde_spanned", + "toml_datetime", + "winnow", ] -[[package]] -name = "toml_parser" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" -dependencies = [ - "winnow 0.7.12", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "toml_writer" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" - [[package]] name = "tower" version = "0.5.2" @@ -7018,7 +5724,6 @@ dependencies = [ "tokio", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -7027,7 +5732,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "bytes", "futures-util", "http", @@ -7057,11 +5762,22 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "tracing-core" version = "0.1.34" @@ -7069,28 +5785,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", + "valuable", ] [[package]] -name = "tray-icon" -version = "0.21.0" +name = "tracing-log" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "crossbeam-channel", - "dirs", - "libappindicator", - "muda", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation 0.3.1", + "log", "once_cell", - "png", - "serde", - "thiserror 2.0.12", - "windows-sys 0.59.0", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] @@ -7113,12 +5837,9 @@ name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" - -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" +dependencies = [ + "core_maths", +] [[package]] name = "typenum" @@ -7133,44 +5854,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] -name = "unic-char-property" -version = "0.9.0" +name = "uds_windows" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ - "unic-char-range", -] - -[[package]] -name = "unic-char-range" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" - -[[package]] -name = "unic-common" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" - -[[package]] -name = "unic-ucd-ident" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" -dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", -] - -[[package]] -name = "unic-ucd-version" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -dependencies = [ - "unic-common", + "memoffset", + "tempfile", + "winapi", ] [[package]] @@ -7185,12 +5876,24 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64af057ad7466495ca113126be61838d8af947f41d93a949980b2389a118082f" +[[package]] +name = "unicode-bidi-mirroring" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" + [[package]] name = "unicode-ccc" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42" +[[package]] +name = "unicode-ccc" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" + [[package]] name = "unicode-ident" version = "1.0.18" @@ -7227,6 +5930,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + [[package]] name = "untrusted" version = "0.9.0" @@ -7234,10 +5943,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "url" -version = "2.5.4" +name = "ureq" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "00432f493971db5d8e47a65aeb3b02f8226b9b11f1450ff86bb772776ebadd70" +dependencies = [ + "base64", + "cookie_store", + "flate2", + "log", + "percent-encoding", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "socks", + "ureq-proto", + "utf-8", + "webpki-roots", +] + +[[package]] +name = "ureq-proto" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe120bb823a0061680e66e9075942fcdba06d46551548c2c259766b9558bc9a" +dependencies = [ + "base64", + "http", + "httparse", + "log", +] + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -7246,16 +5989,10 @@ dependencies = [ ] [[package]] -name = "urlpattern" -version = "0.3.0" +name = "urlencoding" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" -dependencies = [ - "regex", - "serde", - "unic-ucd-ident", - "url", -] +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "usvg" @@ -7263,18 +6000,45 @@ version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7447e703d7223b067607655e625e0dbca80822880248937da65966194c4864e6" dependencies = [ - "base64 0.22.1", + "base64", "data-url", "flate2", - "fontdb", + "fontdb 0.22.0", "imagesize", "kurbo", "log", "pico-args", "roxmltree", - "rustybuzz", + "rustybuzz 0.18.0", "simplecss", - "siphasher 1.0.1", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + +[[package]] +name = "usvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +dependencies = [ + "base64", + "data-url", + "flate2", + "fontdb 0.23.0", + "imagesize", + "kurbo", + "log", + "pico-args", + "roxmltree", + "rustybuzz 0.20.1", + "simplecss", + "siphasher", "strict-num", "svgtypes", "tiny-skia-path", @@ -7302,18 +6066,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" -dependencies = [ - "getrandom 0.3.3", - "js-sys", - "serde", - "wasm-bindgen", -] - [[package]] name = "v_frame" version = "0.3.9" @@ -7325,6 +6077,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcpkg" version = "0.2.15" @@ -7334,16 +6092,16 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vello" version = "0.5.0" -source = "git+https://github.com/linebender/vello.git#daf940230a24cbb123a458b6de95721af47aef98" +source = "git+https://github.com/linebender/vello.git?rev=87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b#87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" dependencies = [ "bytemuck", "futures-intrusive", "log", "peniko", - "png", + "png 0.17.16", "skrifa 0.31.3", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.16", "vello_encoding", "vello_shaders", "wgpu", @@ -7352,7 +6110,7 @@ dependencies = [ [[package]] name = "vello_encoding" version = "0.5.0" -source = "git+https://github.com/linebender/vello.git#daf940230a24cbb123a458b6de95721af47aef98" +source = "git+https://github.com/linebender/vello.git?rev=87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b#87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" dependencies = [ "bytemuck", "guillotiere", @@ -7364,12 +6122,12 @@ dependencies = [ [[package]] name = "vello_shaders" version = "0.5.0" -source = "git+https://github.com/linebender/vello.git#daf940230a24cbb123a458b6de95721af47aef98" +source = "git+https://github.com/linebender/vello.git?rev=87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b#87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" dependencies = [ "bytemuck", "log", "naga", - "thiserror 2.0.12", + "thiserror 2.0.16", "vello_encoding", ] @@ -7385,26 +6143,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vswhom" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" -dependencies = [ - "libc", - "vswhom-sys", -] - -[[package]] -name = "vswhom-sys" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "walkdir" version = "2.5.0" @@ -7424,12 +6162,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -7438,11 +6170,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -7467,7 +6199,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -7502,7 +6234,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7516,28 +6248,15 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wayland-backend" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.44", + "rustix 1.0.8", "scoped-tls", "smallvec", "wayland-sys", @@ -7545,12 +6264,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.1", - "rustix 0.38.44", + "bitflags 2.9.3", + "rustix 1.0.8", "wayland-backend", "wayland-scanner", ] @@ -7561,29 +6280,29 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" +checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 0.38.44", + "rustix 1.0.8", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.31.2" +version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "wayland-backend", "wayland-client", "wayland-scanner", @@ -7591,11 +6310,11 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.2.0" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7604,11 +6323,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.2.0" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7617,20 +6336,20 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2", - "quick-xml 0.37.5", + "quick-xml", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" dependencies = [ "dlib", "log", @@ -7648,16 +6367,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-time" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "web-time" version = "1.1.0" @@ -7668,50 +6377,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webkit2gtk" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" -dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" -dependencies = [ - "bitflags 1.3.2", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - [[package]] name = "webpki-roots" version = "1.0.2" @@ -7721,42 +6386,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "webview2-com" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.61.3", - "windows-core 0.61.2", - "windows-implement 0.60.0", - "windows-interface 0.59.1", -] - -[[package]] -name = "webview2-com-macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "webview2-com-sys" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" -dependencies = [ - "thiserror 2.0.12", - "windows 0.61.3", - "windows-core 0.61.2", -] - [[package]] name = "weezl" version = "0.1.10" @@ -7770,10 +6399,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9" dependencies = [ "arrayvec", - "bitflags 2.9.1", - "cfg_aliases 0.2.1", + "bitflags 2.9.3", + "cfg_aliases", "document-features", - "hashbrown 0.15.4", + "hashbrown", "js-sys", "log", "naga", @@ -7800,12 +6429,12 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.9.1", + "bitflags 2.9.3", "bytemuck", - "cfg_aliases 0.2.1", + "cfg_aliases", "document-features", - "hashbrown 0.15.4", - "indexmap 2.10.0", + "hashbrown", + "indexmap", "log", "naga", "once_cell", @@ -7815,7 +6444,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", @@ -7855,6 +6484,7 @@ name = "wgpu-executor" version = "0.1.0" dependencies = [ "anyhow", + "bytemuck", "dyn-any", "futures", "glam", @@ -7878,22 +6508,22 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.9.1", + "bitflags 2.9.3", "block", "bytemuck", "cfg-if", - "cfg_aliases 0.2.1", - "core-graphics-types 0.1.3", + "cfg_aliases", + "core-graphics-types", "glow", "glutin_wgl_sys", "gpu-alloc", "gpu-allocator", "gpu-descriptor", - "hashbrown 0.15.4", + "hashbrown", "js-sys", "khronos-egl", "libc", - "libloading 0.8.8", + "libloading", "log", "metal", "naga", @@ -7907,11 +6537,11 @@ dependencies = [ "raw-window-handle", "renderdoc-sys", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "wasm-bindgen", "web-sys", "wgpu-types", - "windows 0.58.0", + "windows", "windows-core 0.58.0", ] @@ -7921,11 +6551,11 @@ version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "bytemuck", "js-sys", "log", - "thiserror 2.0.12", + "thiserror 2.0.16", "web-sys", ] @@ -7947,11 +6577,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -7960,21 +6590,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "window-vibrancy" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" -dependencies = [ - "objc2 0.6.1", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation 0.3.1", - "raw-window-handle", - "windows-sys 0.59.0", - "windows-version", -] - [[package]] name = "windows" version = "0.58.0" @@ -7985,28 +6600,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link", - "windows-numerics", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", -] - [[package]] name = "windows-core" version = "0.58.0" @@ -8033,17 +6626,6 @@ dependencies = [ "windows-strings 0.4.2", ] -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link", - "windows-threading", -] - [[package]] name = "windows-implement" version = "0.58.0" @@ -8052,7 +6634,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8063,7 +6645,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8074,7 +6656,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8085,7 +6667,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8094,16 +6676,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" -[[package]] -name = "windows-numerics" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link", -] - [[package]] name = "windows-registry" version = "0.5.3" @@ -8161,15 +6733,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -8194,7 +6757,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -8212,21 +6775,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -8245,10 +6793,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -8259,36 +6808,12 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-version" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" -dependencies = [ - "windows-link", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -8307,12 +6832,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -8331,12 +6850,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -8367,12 +6880,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -8391,12 +6898,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -8415,12 +6916,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -8439,12 +6934,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -8459,37 +6948,42 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.29.15" +version = "0.30.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.1", + "bitflags 2.9.3", + "block2 0.5.1", "bytemuck", "calloop", - "cfg_aliases 0.1.1", - "core-foundation 0.9.4", - "core-graphics 0.23.2", + "cfg_aliases", + "concurrent-queue", + "core-foundation", + "core-graphics", "cursor-icon", - "icrate", + "dpi", "js-sys", "libc", - "log", "memmap2", - "ndk 0.8.0", - "ndk-sys 0.5.0+25.2.9519653", - "objc2 0.4.1", - "once_cell", + "ndk", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", + "objc2-ui-kit", "orbclient", "percent-encoding", + "pin-project", "raw-window-handle", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "rustix 0.38.44", "sctk-adwaita", + "serde", "smithay-client-toolkit", "smol_str", + "tracing", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", @@ -8498,8 +6992,8 @@ dependencies = [ "wayland-protocols", "wayland-protocols-plasma", "web-sys", - "web-time 0.2.4", - "windows-sys 0.48.0", + "web-time", + "windows-sys 0.52.0", "x11-dl", "x11rb", "xkbcommon-dl", @@ -8507,40 +7001,18 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.40" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "winnow" -version = "0.7.12" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.55.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" -dependencies = [ - "cfg-if", - "windows-sys 0.59.0", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" @@ -8554,60 +7026,6 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" -[[package]] -name = "wry" -version = "0.52.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9" -dependencies = [ - "base64 0.22.1", - "block2 0.6.1", - "cookie", - "crossbeam-channel", - "dpi", - "dunce", - "gdkx11", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "jni", - "kuchikiki", - "libc", - "ndk 0.9.0", - "objc2 0.6.1", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation 0.3.1", - "objc2-ui-kit", - "objc2-web-kit", - "once_cell", - "percent-encoding", - "raw-window-handle", - "sha2", - "soup3", - "tao-macros", - "thiserror 2.0.12", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.61.3", - "windows-core 0.61.2", - "windows-version", - "x11-dl", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "x11-dl" version = "2.21.0" @@ -8621,24 +7039,34 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.8", + "libloading", "once_cell", - "rustix 0.38.44", + "rustix 1.0.8", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xattr" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +dependencies = [ + "libc", + "rustix 1.0.8", +] [[package]] name = "xcursor" @@ -8652,7 +7080,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "dlib", "log", "once_cell", @@ -8709,10 +7137,70 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] +[[package]] +name = "zbus" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a073be99ace1adc48af593701c8015cd9817df372e14a1a6b0ee8f8bf043be" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "nix", + "ordered-stream", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "windows-sys 0.60.2", + "winnow", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e80cd713a45a49859dcb648053f63265f4f2851b6420d47a958e5697c68b131" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" +dependencies = [ + "serde", + "static_assertions", + "winnow", + "zvariant", +] + [[package]] name = "zeno" version = "0.3.3" @@ -8736,7 +7224,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8756,7 +7244,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] @@ -8779,9 +7267,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -8796,7 +7284,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8816,9 +7304,50 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" +checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ "zune-core", ] + +[[package]] +name = "zvariant" +version = "5.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" +dependencies = [ + "endi", + "enumflags2", + "serde", + "url", + "winnow", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.106", + "winnow", +] diff --git a/Cargo.toml b/Cargo.toml index 2f21fd39ad..94671aec4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,55 +1,74 @@ [workspace] members = [ + "desktop", + "desktop/wrapper", + "desktop/embedded-resources", "editor", - "proc-macros", "frontend/wasm", - "frontend/src-tauri", + "libraries/dyn-any", + "libraries/path-bool", + "libraries/math-parser", "node-graph/gapplication-io", "node-graph/gbrush", "node-graph/gcore", - "node-graph/gstd", + "node-graph/gcore-shaders", "node-graph/gmath-nodes", "node-graph/gpath-bool", "node-graph/graph-craft", "node-graph/graphene-cli", "node-graph/graster-nodes", + "node-graph/gstd", "node-graph/gsvg-renderer", "node-graph/interpreted-executor", "node-graph/node-macro", "node-graph/preprocessor", - "libraries/dyn-any", - "libraries/path-bool", - "libraries/bezier-rs", - "libraries/math-parser", - "website/other/bezier-rs-demos/wasm", + "node-graph/wgpu-executor", + "proc-macros", ] default-members = [ + "desktop", + "desktop/wrapper", "editor", "frontend/wasm", + "libraries/dyn-any", + "libraries/path-bool", + "libraries/math-parser", + "node-graph/gapplication-io", "node-graph/gbrush", "node-graph/gcore", - "node-graph/gstd", + "node-graph/gcore-shaders", "node-graph/gmath-nodes", "node-graph/gpath-bool", "node-graph/graph-craft", "node-graph/graphene-cli", "node-graph/graster-nodes", + "node-graph/gstd", "node-graph/gsvg-renderer", "node-graph/interpreted-executor", "node-graph/node-macro", + "node-graph/preprocessor", + "node-graph/wgpu-executor", + # blocked by https://github.com/rust-lang/cargo/issues/15890 +# "proc-macros", ] resolver = "2" [workspace.dependencies] # Local dependencies -bezier-rs = { path = "libraries/bezier-rs", features = ["dyn-any", "serde"] } -dyn-any = { path = "libraries/dyn-any", features = ["derive", "glam", "reqwest", "log-bad-types", "rc"] } -preprocessor = { path = "node-graph/preprocessor"} +dyn-any = { path = "libraries/dyn-any", features = [ + "derive", + "glam", + "reqwest", + "log-bad-types", + "rc", +] } +preprocessor = { path = "node-graph/preprocessor" } math-parser = { path = "libraries/math-parser" } path-bool = { path = "libraries/path-bool" } graphene-application-io = { path = "node-graph/gapplication-io" } graphene-brush = { path = "node-graph/gbrush" } graphene-core = { path = "node-graph/gcore" } +graphene-core-shaders = { path = "node-graph/gcore-shaders" } graphene-math-nodes = { path = "node-graph/gmath-nodes" } graphene-path-bool = { path = "node-graph/gpath-bool" } graph-craft = { path = "node-graph/graph-craft" } @@ -73,17 +92,16 @@ env_logger = "0.11" log = "0.4" bitflags = { version = "2.4", features = ["serde"] } ctor = "0.2" -convert_case = "0.7" +convert_case = "0.8" derivative = "2.2" thiserror = "2" anyhow = "1.0" -proc-macro2 = { version = "1", features = [ "span-locations" ] } +proc-macro2 = { version = "1", features = ["span-locations"] } quote = "1.0" -axum = "0.8" chrono = "0.4" -ron = "0.8" +ron = "0.11" fastnoise-lite = "1.1" -wgpu = { version = "25.0.2", features = [ +wgpu = { version = "25.0", features = [ # We don't have wgpu on multiple threads (yet) https://github.com/gfx-rs/wgpu/blob/trunk/CHANGELOG.md#wgpu-types-now-send-sync-on-wasm "fragile-send-sync-non-atomic-wasm", "spirv", @@ -111,24 +129,32 @@ web-sys = { version = "=0.3.77", features = [ "HtmlImageElement", "ImageBitmapRenderingContext", ] } -winit = "0.29" +winit = { version = "0.30", features = ["wayland", "rwh_06"] } url = "2.5" tokio = { version = "1.29", features = ["fs", "macros", "io-std", "rt"] } -vello = { git = "https://github.com/linebender/vello.git" } # TODO switch back to stable when a release is made -resvg = "0.44" -usvg = "0.44" +vello = { git = "https://github.com/linebender/vello.git", rev = "87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" } # TODO switch back to stable when a release is made +resvg = "0.45" +usvg = "0.45" rand = { version = "0.9", default-features = false, features = ["std_rng"] } rand_chacha = "0.9" -glam = { version = "0.29", default-features = false, features = ["serde", "scalar-math", "debug-glam-assert"] } +glam = { version = "0.29", default-features = false, features = [ + "nostd-libm", + "scalar-math", + "bytemuck", +] } base64 = "0.22" -image = { version = "0.25", default-features = false, features = ["png", "jpeg", "bmp"] } -parley = "0.5.0" -skrifa = "0.32.0" -pretty_assertions = "1.4.1" +image = { version = "0.25", default-features = false, features = [ + "png", + "jpeg", + "bmp", +] } +parley = "0.5" +skrifa = "0.36" +pretty_assertions = "1.4" fern = { version = "0.7", features = ["colored"] } num_enum = "0.7" num-derive = "0.4" -num-traits = { version = "0.2", default-features = false, features = ["i128"] } +num-traits = { version = "0.2", default-features = false, features = ["libm"] } specta = { version = "2.0.0-rc.22", features = [ "glam", "derive", @@ -145,21 +171,33 @@ syn = { version = "2.0", default-features = false, features = [ "extra-traits", "proc-macro", ] } -kurbo = { version = "0.11.0", features = ["serde"] } -petgraph = { version = "0.7.1", default-features = false, features = [ - "graphmap", -] } -half = { version = "2.4.1", default-features = false, features = ["bytemuck", "serde"] } +kurbo = { version = "0.11", features = ["serde"] } +lyon_geom = "1.0" +petgraph = { version = "0.7", default-features = false, features = ["graphmap"] } +half = { version = "2.4", default-features = false, features = ["bytemuck"] } tinyvec = { version = "1", features = ["std"] } -criterion = { version = "0.5", features = ["html_reports"] } -iai-callgrind = { version = "0.12.3" } -ndarray = "0.16.1" +criterion = { version = "0.7", features = ["html_reports"] } +iai-callgrind = { version = "0.16" } +ndarray = "0.16" +strum = { version = "0.27", features = ["derive"] } +dirs = "6.0" +cef = "=139.0.1" +cef-dll-sys = "=139.0.1" +include_dir = "0.7" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +tracing = "0.1" +rfd = "0.15" +open = "5.3" +poly-cool = "0.3" +spin = "0.10" +clap = "4.5" [profile.dev] opt-level = 1 [profile.dev.package] graphite-editor = { opt-level = 1 } +graphene-core-shaders = { opt-level = 1 } graphene-core = { opt-level = 1 } graphene-std = { opt-level = 1 } interpreted-executor = { opt-level = 1 } # This is a mitigation for https://github.com/rustwasm/wasm-pack/issues/981 which is needed because the node_registry function is too large diff --git a/about.toml b/about.toml index 796e061fd4..7f9568c754 100644 --- a/about.toml +++ b/about.toml @@ -1,21 +1,22 @@ -# Keep this list in sync with those in `/deny.toml` and `/frontend/vite.config.ts`. accepted = [ - "Apache-2.0 WITH LLVM-exception", - "Apache-2.0", - "BSD-2-Clause", - "BSD-3-Clause", - "BSL-1.0", - "CC0-1.0", - "CDLA-Permissive-2.0", - "ISC", - "MIT-0", - "MIT", - "MPL-2.0", - "OpenSSL", - "Unicode-3.0", - "Unicode-DFS-2016", - "Zlib", - "NCSA", + "Apache-2.0 WITH LLVM-exception", # Keep this list in sync with those in `/deny.toml` + "Apache-2.0", # Keep this list in sync with those in `/deny.toml` + "BSD-2-Clause", # Keep this list in sync with those in `/deny.toml` + "BSD-3-Clause", # Keep this list in sync with those in `/deny.toml` + "BSL-1.0", # Keep this list in sync with those in `/deny.toml` + "CC0-1.0", # Keep this list in sync with those in `/deny.toml` + "CDLA-Permissive-2.0", # Keep this list in sync with those in `/deny.toml` + "ISC", # Keep this list in sync with those in `/deny.toml` + "MIT-0", # Keep this list in sync with those in `/deny.toml` + "MIT", # Keep this list in sync with those in `/deny.toml` + "MPL-2.0", # Keep this list in sync with those in `/deny.toml` + "OpenSSL", # Keep this list in sync with those in `/deny.toml` + "Unicode-3.0", # Keep this list in sync with those in `/deny.toml` + "Unicode-DFS-2016", # Keep this list in sync with those in `/deny.toml` + "Zlib", # Keep this list in sync with those in `/deny.toml` + "NCSA", # Keep this list in sync with those in `/deny.toml` + "bzip2-1.0.6", # Keep this list in sync with those in `/deny.toml` + "OFL-1.1", # Keep this list in sync with those in `/deny.toml` ] workarounds = ["ring"] ignore-build-dependencies = true diff --git a/demo-artwork/changing-seasons.graphite b/demo-artwork/changing-seasons.graphite index 48f5f03c62..b79e0566f1 100644 --- a/demo-artwork/changing-seasons.graphite +++ b/demo-artwork/changing-seasons.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":3143874172491239000,"output_index":0,"lambda":false}}],"nodes":[[10316247453530667000,{"inputs":[{"Node":{"node_id":9079109751490757000,"output_index":0,"lambda":false}},{"Node":{"node_id":12796400626461303056,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[7954638344846060000,{"inputs":[{"Node":{"node_id":5991296268862790000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.1875,"green":0.0,"blue":0.0,"alpha":0.203125}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.19140625,"green":0.0,"blue":0.0,"alpha":0.203125}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17021405646895729000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":1.0,"green":0.31764707,"blue":0.15686275,"alpha":1.0}],[0.5,{"red":1.0,"green":0.5686275,"blue":0.25490198,"alpha":1.0}],[1.0,{"red":1.0,"green":0.7294118,"blue":0.16078432,"alpha":1.0}]]},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false}],[8366826746721323000,{"inputs":[{"Node":{"node_id":5591755359500854000,"output_index":0,"lambda":false}},{"Node":{"node_id":13846904447064916285,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1250460246919467000,{"inputs":[{"Node":{"node_id":4742778578215475000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14337610765966946000,{"inputs":[{"Node":{"node_id":14250786159408925409,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14253625255053304000,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.09778450863315612,0.7264556766766779],"end":[0.09778450863315612,0.3634234796342139],"transform":[-371.95192745983906,4.5550973740038046e-14,0.0,965.1086770605688,766.3711364618157,-61.108677060568766]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3143874172491239000,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":18233215297647862000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15908863353600836000,{"inputs":[{"Node":{"node_id":7094974507355892337,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":350.0},"exposed":false}},{"Node":{"node_id":4373650744391914031,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8895289679682140000,{"inputs":[{"Node":{"node_id":213744308682803360,"output_index":0,"lambda":false}},{"Node":{"node_id":7954638344846060000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17725188707009528000,{"inputs":[{"Node":{"node_id":10316247453530667000,"output_index":0,"lambda":false}},{"Node":{"node_id":17025512774010843000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[5591755359500854000,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":1789832635968548900,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3223387122603246085,{"inputs":[{"Node":{"node_id":9641606876402405523,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"String":"2 - 0.2A"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MathNode"}},"visible":true,"skip_deduplication":false}],[1789832635968548900,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.99215686,"green":0.49019608,"blue":0.11764706,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17855766443650990000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.1764706,"green":0.44313726,"blue":0.05882353,"alpha":1.0}],[0.5,{"red":0.45490196,"green":0.627451,"blue":0.3254902,"alpha":1.0}],[1.0,{"red":1.0,"green":0.5529412,"blue":0.16078432,"alpha":1.0}]]},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false}],[16084834641749443000,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.99215686,"green":0.49019608,"blue":0.11764706,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1924303400883620400,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12399235852192450000,16255990754021933000,15620668684239604000,5432878891027338000],"remove":[5992115648840007000],"delta":[[12399235852192450000,[3.4492455418381667,-6.252914951989055]],[5432878891027338000,[-0.8525377229081244,-6.779663923182397]],[16255990754021933000,[3.423868312757215,60.83950617283953]],[15620668684239604000,[-7.105427357601002e-15,61.89300411522633]]]},"segments":{"add":[1366074222973177300,9911415907547690000,3820594103877681000,5933636287523951000],"remove":[16939395239973712000],"start_point":[[1366074222973177300,12399235852192450000],[9911415907547690000,16255990754021933000],[5933636287523951000,5432878891027338000],[3820594103877681000,15620668684239604000]],"end_point":[[5933636287523951000,12399235852192450000],[9911415907547690000,15620668684239604000],[1366074222973177300,16255990754021933000],[3820594103877681000,5432878891027338000]],"handle_primary":[[5933636287523951000,[0.0,0.0]],[3820594103877681000,[-1.2746024488136916,-0.5300005080526233]],[9911415907547690000,[-0.6380090646381761,1.00935799390129]],[1366074222973177300,[-12.729766803840905,34.6776406035666]]],"handle_end":[[3820594103877681000,[-11.281207133058956,31.692729766803836]],[5933636287523951000,[0.0,0.0]],[9911415907547690000,[1.1025726645520375,0.4584677151070898]],[1366074222973177300,[1.0502464055275982,-1.6615353350607336]]],"stroke":[[9911415907547690000,0],[5933636287523951000,0],[3820594103877681000,0],[1366074222973177300,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":9911415907547690000},{"ty":"End","segment":1366074222973177300}],[{"ty":"Primary","segment":3820594103877681000},{"ty":"End","segment":9911415907547690000}]],"remove_g1_continuous":[[{"ty":"Primary","segment":1366074222973177300},{"ty":"End","segment":5933636287523951000}],[{"ty":"End","segment":3820594103877681000},{"ty":"Primary","segment":16939395239973712000}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2233138531352324200,{"inputs":[{"Node":{"node_id":366962978353611840,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4040070953711778000,{"inputs":[{"Node":{"node_id":15908863353600836000,"output_index":0,"lambda":false}},{"Node":{"node_id":2166474486859326700,"output_index":0,"lambda":false}},{"Node":{"node_id":10690271318666670633,"output_index":0,"lambda":false}},{"Node":{"node_id":12004715210677400127,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":360.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17025512774010843000,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9490196,"green":0.38039216,"blue":0.10980392,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9490196,"green":0.38039216,"blue":0.10980392,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.3155737704918033,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.203125}]],"gradient_type":"Radial","start":[0.5024847204000202,0.41434795196968177],"end":[0.9633481630366972,0.41434795196968194],"transform":[1191.785811691441,0.0,0.0,1109.5999999999997,274.8958396355149,62.489512494441215]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4742778578215475000,{"inputs":[{"Node":{"node_id":6102164880094062000,"output_index":0,"lambda":false}},{"Node":{"node_id":8876924567444570473,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10463288500489480000,{"inputs":[{"Node":{"node_id":4600332392291315000,"output_index":0,"lambda":false}},{"Node":{"node_id":4040070953711778000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3602127523880426500,{"inputs":[{"Value":{"tagged_value":{"RasterData":{"instance":[{"width":0,"height":0,"data":[0,""]}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Node":{"node_id":17725188707009528000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[6102164880094062000,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14253625255053304000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4002029424845293600,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[4839542169175255000,[-127.45378793812174,-12.06205126188287]],[16211201987812043000,[-7.105427357601002e-15,-23.90123456790124]],[9934671969500465000,[-43.209876543209866,-14.975308641975468]],[7888691908524886000,[4.351165980795637,-8.105624142661181]],[753144493519442600,[-50.013717421124845,21.17283950617286]],[891169987742051100,[-4.148148148148122,-38.03703703703696]],[4570709177617499000,[-62.76543209876538,-6.827160493827164]],[5755835744378529000,[-17.333333333333343,-33.1358024691358]],[11897064075526275000,[-61.65765794556601,-32.902083082000814]],[353992768245212100,[-42.27413685969588,-41.62581710194484]],[15620564416450861000,[-47.66529492455423,-18.042524005486992]],[6358127410693457000,[-37.72290809327849,-10.54183813443079]],[11874978858302702000,[5.843621399176955,-10.914951989026145]],[10418348123687606000,[-61.3893894663837,-52.000301612710835]],[12582713598977278000,[9.333333333333268,-66.33333333333327]],[4305429814263425000,[-22.598416051654286,-32.71009758017498]],[9664410344080632000,[-35.276890617605005,-25.55103086414088]],[16594203120813726000,[-62.53607037678802,-36.02218510909459]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[3138315255762406000,[4.038408779149492,-14.5733882030178]],[3270826560526153000,[-10.966434817733528,4.317749647005792]],[16362428386097514000,[-23.70370370370371,19.950617283950606]],[4590600976245504500,[-6.49657064471878,1.2290809327846404]],[8119312711427333000,[0.0,0.0]],[15866454419016458000,[-9.913311783442964,6.121455371873111]],[12441313998107066000,[-4.938271604938336,6.518518518518476]],[2092445122112560000,[-7.308641975308667,2.9629629629629903]],[17948338937502876000,[0.0,0.0]],[9552874240071498000,[-5.53086419753086,-0.9657064471879552]],[3359087961315235300,[-0.2881601545358876,-1.8891182956799923]],[2416974091592514600,[0.0,0.0]],[1562499453192082400,[-0.08779149519892826,-1.6680384087791111]],[4183498485018509000,[-37.13580246913581,14.485596707818928]],[18320159308706247000,[0.0,0.0]],[14351209823603001000,[0.0,0.0]],[5680639457836474000,[0.0,0.0]]],"handle_end":[[4590600976245504500,[14.222222222222207,7.989026063100134]],[9552874240071498000,[-7.286694101508885,7.55006858710567]],[3138315255762406000,[-8.098765432098759,2.947337553780912]],[3270826560526153000,[-49.33882030178324,27.10562414266127]],[18320159308706247000,[-41.26200274348419,15.978052126200277]],[16362428386097514000,[-6.962962962962983,53.17283950617292]],[4183498485018509000,[-21.94787379972564,36.565157750342905]],[1562499453192082400,[-0.6668238551234532,2.406364346749864]],[2416974091592514600,[37.06995884773662,-14.595336076817532]],[17948338937502876000,[-50.30452674897121,26.776406035665325]],[3359087961315235300,[-7.813443072702299,7.725651577503442]],[2092445122112560000,[-9.086419753086416,21.135802469135797]],[7709585677887591000,[-8.603566529492472,0.8779149519890552]],[15866454419016458000,[2.458161865569238,7.637860082304542]],[12441313998107066000,[5.171144805176233,13.506721506057374]],[5680639457836474000,[0.2881601545359018,1.8891182956799923]],[8119312711427333000,[-16.241426611796967,5.355281207133061]],[14351209823603001000,[-7.374485596707803,5.70644718792866]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[366962978353611840,{"inputs":[{"Node":{"node_id":8366826746721323000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16379524086934900000,{"inputs":[{"Node":{"node_id":9609388203059839318,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.41796875,"green":0.1028595,"blue":0.1028595,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.421875,"green":0.1038208,"blue":0.1038208,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4600332392291315000,{"inputs":[{"Node":{"node_id":4040070953711778000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Node":{"node_id":11677958249556146000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false}],[7386572856931342000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::PercentageValueNode"}},"visible":true,"skip_deduplication":false}],[4373650744391914031,{"inputs":[{"Node":{"node_id":9641606876402405523,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[16141281339223525000,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8940743774820468000,11897064075526275000,9664410344080632000,10418348123687606000,16594203120813726000,4839542169175255000,353992768245212100,4305429814263425000,15620564416450861000,4570709177617499000,9934671969500465000,6358127410693457000,753144493519442600,11874978858302702000,7888691908524886000,12582713598977278000,891169987742051100,5755835744378529000,16211201987812043000],"remove":[],"delta":[[891169987742051100,[63.802469135802426,-190.90123456790127]],[753144493519442600,[136.8395061728395,-177.6172839506173]],[7888691908524886000,[66.32098765432096,-154.30864197530863]],[4839542169175255000,[157.56627079134535,-37.10118604950259]],[16594203120813726000,[126.09711290079348,-8.575894451947931]],[4570709177617499000,[114.716049382716,-90.16049382716052]],[11897064075526275000,[72.71938634062775,26.932261408475423]],[12582713598977278000,[49.135802469135854,-136.33333333333334]],[10418348123687606000,[112.8352056529406,14.952290638773944]],[9664410344080632000,[64.51145851883956,11.32880864191867]],[353992768245212100,[114.87770338918835,-41.33714586101814]],[16211201987812043000,[0.0,-231.0]],[15620564416450861000,[141.77777777777777,-86.60493827160491]],[4305429814263425000,[91.25136529719612,-51.92090379156713]],[6358127410693457000,[115.50617283950618,-132.38271604938265]],[8940743774820468000,[0.0,0.0]],[5755835744378529000,[28.444444444444457,-210.4567901234568]],[11874978858302702000,[92.39506172839504,-161.41975308641972]],[9934671969500465000,[125.38271604938268,-124.67901234567891]]]},"segments":{"add":[7709585677887591000,14351209823603001000,18320159308706247000,8119312711427333000,4590600976245504500,17948338937502876000,1562499453192082400,3138315255762406000,2416974091592514600,3270826560526153000,5680639457836474000,3359087961315235300,9552874240071498000,15866454419016458000,4183498485018509000,2092445122112560000,16362428386097514000,12441313998107066000],"remove":[],"start_point":[[14351209823603001000,11897064075526275000],[3270826560526153000,4570709177617499000],[4183498485018509000,7888691908524886000],[15866454419016458000,11874978858302702000],[18320159308706247000,9664410344080632000],[16362428386097514000,891169987742051100],[9552874240071498000,753144493519442600],[3359087961315235300,6358127410693457000],[5680639457836474000,9934671969500465000],[1562499453192082400,353992768245212100],[2416974091592514600,15620564416450861000],[4590600976245504500,16594203120813726000],[8119312711427333000,10418348123687606000],[17948338937502876000,4839542169175255000],[12441313998107066000,5755835744378529000],[2092445122112560000,12582713598977278000],[3138315255762406000,4305429814263425000],[7709585677887591000,8940743774820468000]],"end_point":[[2416974091592514600,4570709177617499000],[18320159308706247000,10418348123687606000],[1562499453192082400,4305429814263425000],[17948338937502876000,353992768245212100],[12441313998107066000,16211201987812043000],[16362428386097514000,5755835744378529000],[3138315255762406000,15620564416450861000],[3270826560526153000,9934671969500465000],[14351209823603001000,9664410344080632000],[3359087961315235300,753144493519442600],[15866454419016458000,7888691908524886000],[5680639457836474000,6358127410693457000],[4183498485018509000,12582713598977278000],[7709585677887591000,11897064075526275000],[2092445122112560000,891169987742051100],[8119312711427333000,16594203120813726000],[9552874240071498000,11874978858302702000],[4590600976245504500,4839542169175255000]],"handle_primary":[[17948338937502876000,[0.0,0.0]],[14351209823603001000,[0.0,0.0]],[2092445122112560000,[-1.5802469135804245,-5.5308641975308035]],[16362428386097514000,[-14.913580246913511,12.641975308642031]],[4590600976245504500,[-7.759646437163781,-18.695929243596197]],[18320159308706247000,[0.0,0.0]],[7709585677887591000,[0.0,0.0]],[5680639457836474000,[0.0,0.0]],[1562499453192082400,[-15.34246181071461,-3.7168967220297873]],[3270826560526153000,[-9.086419753086432,-7.506172839506121]],[8119312711427333000,[0.0,0.0]],[15866454419016458000,[-10.469135802469168,13.432098765432102]],[4183498485018509000,[-6.617283950617207,15.308641975308689]],[3138315255762406000,[-2.469006630399008,-5.902063388586043]],[12441313998107066000,[-4.938271604938336,6.518518518518533]],[2416974091592514600,[0.0,0.0]],[3359087961315235300,[2.7654320987655296,-14.419753086419746]],[9552874240071498000,[-21.33333333333331,12.049382716049422]]],"handle_end":[[12441313998107066000,[13.234567901234527,34.5679012345679]],[1562499453192082400,[2.0974057383288596,5.01376604938514]],[14351209823603001000,[5.742854988208705,6.327636391047918]],[4590600976245504500,[-5.92501398131742,10.665547436428083]],[9552874240071498000,[4.938271604938279,11.061728395061806]],[17948338937502876000,[25.51458639999055,20.651563178633637]],[5680639457836474000,[-2.7654320987655296,14.419753086419746]],[7709585677887591000,[-42.51530058403631,-10.382498109968708]],[15866454419016458000,[0.19753086419757435,13.827160493827137]],[2416974091592514600,[9.086419753086377,7.506172839506235]],[4183498485018509000,[4.938271604938336,-1.1851851851851052]],[18320159308706247000,[-24.983271918092953,-7.776766653003392]],[3138315255762406000,[-21.33333333333337,3.753086419753061]],[3359087961315235300,[-27.099224819820336,19.753086419753146]],[3270826560526153000,[-13.03703703703701,9.679012345678984]],[8119312711427333000,[-40.68684029964413,7.631779585305026]],[16362428386097514000,[-8.0,38.419753086419746]],[2092445122112560000,[-20.345679012345613,18.5679012345679]]],"stroke":[[3138315255762406000,0],[2416974091592514600,0],[15866454419016458000,0],[5680639457836474000,0],[3359087961315235300,0],[4183498485018509000,0],[2092445122112560000,0],[18320159308706247000,0],[3270826560526153000,0],[1562499453192082400,0],[9552874240071498000,0],[7709585677887591000,0],[14351209823603001000,0],[4590600976245504500,0],[17948338937502876000,0],[12441313998107066000,0],[8119312711427333000,0],[16362428386097514000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":1562499453192082400},{"ty":"Primary","segment":3138315255762406000}],[{"ty":"End","segment":5680639457836474000},{"ty":"Primary","segment":3359087961315235300}],[{"ty":"End","segment":2416974091592514600},{"ty":"Primary","segment":3270826560526153000}]],"remove_g1_continuous":[[{"ty":"End","segment":4183498485018509000},{"ty":"Primary","segment":2092445122112560000}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9641606876402405523,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::InstanceIndexNode"}},"visible":true,"skip_deduplication":false}],[9609388203059839318,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[799182088624980700,{"inputs":[{"Node":{"node_id":7386572856931342000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::DivideNode"}},"visible":true,"skip_deduplication":false}],[9079109751490757000,{"inputs":[{"Value":{"tagged_value":{"RasterData":{"instance":[{"width":0,"height":0,"data":[0,""]}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Node":{"node_id":2233138531352324200,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[11677958249556146000,{"inputs":[{"Node":{"node_id":17021405646895729000,"output_index":0,"lambda":false}},{"Node":{"node_id":17855766443650990000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BlendMode":"Normal"},"exposed":false}},{"Node":{"node_id":7386572856931342000,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::adjustments::BlendNode"}},"visible":true,"skip_deduplication":false}],[13846904447064916285,{"inputs":[{"Node":{"node_id":16084834641749443000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::MirrorNode"}},"visible":true,"skip_deduplication":false}],[16236970157339521798,{"inputs":[{"Node":{"node_id":8895289679682140000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"U64":8},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::InstanceRepeatNode"}},"visible":true,"skip_deduplication":false}],[7094974507355892337,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[2166474486859326700,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0}],[0.6885245901639344,{"red":0.08984375,"green":0.08984375,"blue":0.08984375,"alpha":0.08775313}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157}]],"gradient_type":"Radial","start":[0.5024847204000202,0.41434795196968177],"end":[0.9633481630366972,0.41434795196968194],"transform":[1191.785811691441,0.0,0.0,1109.5999999999997,274.8958396355149,62.489512494441215]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9490196,"green":0.38039216,"blue":0.10980392,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0}],[0.6885245901639344,{"red":0.08984375,"green":0.08984375,"blue":0.08984375,"alpha":0.08775313}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157}]],"gradient_type":"Radial","start":[0.5024847204000202,0.41434795196968177],"end":[0.9633481630366972,0.41434795196968194],"transform":[1191.785811691441,0.0,0.0,1109.5999999999997,274.8958396355149,62.489512494441215]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13712392741217151405,{"inputs":[{"Node":{"node_id":5348726859432207000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5348726859432207000,{"inputs":[{"Node":{"node_id":12796400626461303056,"output_index":0,"lambda":false}},{"Node":{"node_id":2233138531352324200,"output_index":0,"lambda":false}},{"Node":{"node_id":799182088624980700,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::MorphNode"}},"visible":true,"skip_deduplication":false}],[10690271318666670633,{"inputs":[{"Node":{"node_id":12004715210677400127,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.2},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::SubtractNode"}},"visible":true,"skip_deduplication":false}],[3430686124240113700,{"inputs":[{"Node":{"node_id":3602127523880426500,"output_index":0,"lambda":false}},{"Node":{"node_id":16379524086934900000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18233215297647862000,{"inputs":[{"Node":{"node_id":14337610765966946000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,500.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5991296268862790000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[8876924567444570473,{"inputs":[{"Node":{"node_id":26023588519449590,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::MirrorNode"}},"visible":true,"skip_deduplication":false}],[213744308682803360,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":10463288500489480000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12004715210677400127,{"inputs":[{"Node":{"node_id":3223387122603246085,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.1},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MaxNode"}},"visible":true,"skip_deduplication":false}],[14250786159408925409,{"inputs":[{"Node":{"node_id":3430686124240113700,"output_index":0,"lambda":false}},{"Node":{"node_id":16236970157339521798,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[26023588519449590,{"inputs":[{"Node":{"node_id":4002029424845293600,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.09778450863315612,0.7264556766766779],"end":[0.09778450863315612,0.3634234796342139],"transform":[-371.95192745983906,4.5550973740038046e-14,0.0,965.1086770605688,766.3711364618157,-61.108677060568766]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12796400626461303056,{"inputs":[{"Node":{"node_id":1250460246919467000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[7386572856931342000,{"persistent_metadata":{"reference":"Percentage Value","display_name":"Percentage Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Percentage","input_description":""}}],"output_names":["f64"],"has_primary_output":true,"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-47,-39]}}},"network_metadata":null}}],[4373650744391914031,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-37]}}},"network_metadata":null}}],[4742778578215475000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-22]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[26023588519449590,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[213744308682803360,{"persistent_metadata":{"reference":"Merge","display_name":"Leaves","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[366962978353611840,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-16]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4040070953711778000,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-38]}}},"network_metadata":null}}],[4600332392291315000,{"persistent_metadata":{"reference":"Assign Colors","display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Vector Group","input_description":"The vector elements, or group of vector elements, to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Vector Group"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16141281339223525000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Vector Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-58,-22]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4002029424845293600,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Vector Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7094974507355892337,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-38]}}},"network_metadata":null}}],[17855766443650990000,{"persistent_metadata":{"reference":"Gradient Value","display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":["GradientStops"],"has_primary_output":true,"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-47,-40]}}},"network_metadata":null}}],[5991296268862790000,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1924303400883620400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Vector Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-44,-19]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17025512774010843000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16236970157339521798,{"persistent_metadata":{"reference":"Instance Repeat","display_name":"Instance Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9609388203059839318,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5348726859432207000,{"persistent_metadata":{"reference":"Morph","display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Source","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Target","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Time","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-32]}}},"network_metadata":null}}],[8876924567444570473,{"persistent_metadata":{"reference":"Mirror","display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2166474486859326700,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[2,-32]}}},"network_metadata":null}}],[11677958249556146000,{"persistent_metadata":{"reference":"Blend","display_name":"Blend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Under","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":["Color"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-41]}}},"network_metadata":null}}],[13712392741217151405,{"persistent_metadata":{"reference":"Cache","display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-5,-32]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10316247453530667000,{"persistent_metadata":{"reference":"Merge","display_name":"Oak Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":1}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3430686124240113700,{"persistent_metadata":{"reference":"Merge","display_name":"Solid Backdrop","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":8}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8895289679682140000,{"persistent_metadata":{"reference":"Merge","display_name":"Depth Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[2,-45]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1789832635968548900,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16379524086934900000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15908863353600836000,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-38]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10690271318666670633,{"persistent_metadata":{"reference":"Subtract","display_name":"Subtract","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Minuend","input_description":"The left-hand side of the subtraction operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Subtrahend","input_description":"The right-hand side of the subtraction operation.\n"}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-36]}}},"network_metadata":null}}],[14250786159408925409,{"persistent_metadata":{"reference":"Merge","display_name":"Leaf Levels","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5591755359500854000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10463288500489480000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8366826746721323000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-13]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[799182088624980700,{"persistent_metadata":{"reference":"Divide","display_name":"Divide","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Numerator","input_description":"The left-hand side of the division operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Denominator","input_description":"The right-hand side of the division operation.\n"}}],"output_names":["Output"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-30]}}},"network_metadata":null}}],[3602127523880426500,{"persistent_metadata":{"reference":"Merge","display_name":"Individual Leaf Views","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17725188707009528000,{"persistent_metadata":{"reference":"Merge","display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[9,-29]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6102164880094062000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1250460246919467000,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-25]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9641606876402405523,{"persistent_metadata":{"reference":null,"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Loop Level","input_description":"TODO"}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-36]}}},"network_metadata":null}}],[18233215297647862000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3223387122603246085,{"persistent_metadata":{"reference":"Math","display_name":"Math","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand A","input_description":"The value of \"A\" when calculating the expression\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Expression","input_description":"A math expression that may incorporate \"A\" and/or \"B\", such as \"sqrt(A + B) - B^2\"\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand B","input_description":"The value of \"B\" when calculating the expression\n"}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-35]}}},"network_metadata":null}}],[12796400626461303056,{"persistent_metadata":{"reference":"Cache","display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-25]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7954638344846060000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12004715210677400127,{"persistent_metadata":{"reference":"Max","display_name":"Max","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"One of the two numbers, of which the greater will be returned.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Other Value","input_description":"The other of the two numbers, of which the greater will be returned.\n"}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-35]}}},"network_metadata":null}}],[2233138531352324200,{"persistent_metadata":{"reference":"Cache","display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-16]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16084834641749443000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13846904447064916285,{"persistent_metadata":{"reference":"Mirror","display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14337610765966946000,{"persistent_metadata":{"reference":"Merge","display_name":"NOTE: Change seasons with the \"Percentage Value\" parameter","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[14,-52]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14253625255053304000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17021405646895729000,{"persistent_metadata":{"reference":"Gradient Value","display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":["GradientStops"],"has_primary_output":true,"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-47,-41]}}},"network_metadata":null}}],[3143874172491239000,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[26,-56]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9079109751490757000,{"persistent_metadata":{"reference":"Merge","display_name":"Maple Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[287.6272550000002,767.89247],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1278.0,1349.0],"node_graph_top_right":[1980.800048828125,0.0]},"selection_undo_history":[[1924303400883620400,8366826746721323000,16084834641749443000,13846904447064916285,366962978353611840,14253625255053304000,4002029424845293600,6102164880094062000,1250460246919467000,26023588519449590,5591755359500854000,8876924567444570473,4742778578215475000,1789832635968548900,16141281339223525000],[799182088624980700,4002029424845293600,366962978353611840,14253625255053304000,5348726859432207000,4742778578215475000,16084834641749443000,8876924567444570473,1924303400883620400,26023588519449590,16141281339223525000,1789832635968548900,1250460246919467000,13846904447064916285,5591755359500854000,6102164880094062000,8366826746721323000],[8876924567444570473,799182088624980700,26023588519449590,8366826746721323000,16084834641749443000,5591755359500854000,6102164880094062000,16141281339223525000,366962978353611840,1250460246919467000,4002029424845293600,1789832635968548900,1924303400883620400,14253625255053304000,13712392741217151405,13846904447064916285,5348726859432207000,4742778578215475000],[1250460246919467000,16084834641749443000,8366826746721323000,4002029424845293600,799182088624980700,26023588519449590,5348726859432207000,366962978353611840,8876924567444570473,6102164880094062000,13712392741217151405,13846904447064916285,9079109751490757000,5591755359500854000,16141281339223525000,1789832635968548900,1924303400883620400,14253625255053304000,4742778578215475000],[1250460246919467000,5348726859432207000,8366826746721323000,14253625255053304000,5591755359500854000,13846904447064916285,26023588519449590,799182088624980700,4742778578215475000,8876924567444570473,6102164880094062000,1924303400883620400,10316247453530667000,13712392741217151405,366962978353611840,1789832635968548900,4002029424845293600,16084834641749443000,9079109751490757000,16141281339223525000],[4742778578215475000,13712392741217151405,9079109751490757000,8876924567444570473,8366826746721323000,10316247453530667000,5348726859432207000,16084834641749443000,13846904447064916285,5591755359500854000,1789832635968548900,16141281339223525000,1250460246919467000,14253625255053304000,799182088624980700,366962978353611840,4002029424845293600,1924303400883620400,17725188707009528000,26023588519449590,6102164880094062000,17025512774010843000],[5591755359500854000,366962978353611840,4002029424845293600,3602127523880426500,5348726859432207000,13846904447064916285,6102164880094062000,26023588519449590,17025512774010843000,14253625255053304000,17725188707009528000,13712392741217151405,4742778578215475000,1924303400883620400,1789832635968548900,1250460246919467000,16141281339223525000,799182088624980700,8366826746721323000,9079109751490757000,8876924567444570473,10316247453530667000,16084834641749443000],[5591755359500854000,8366826746721323000,366962978353611840,6102164880094062000],[8366826746721323000,6102164880094062000,5591755359500854000,14253625255053304000,1789832635968548900,8876924567444570473,4742778578215475000,13846904447064916285,366962978353611840],[1789832635968548900,8366826746721323000,366962978353611840,5591755359500854000,4742778578215475000,26023588519449590,8876924567444570473,6102164880094062000,13846904447064916285,16084834641749443000,14253625255053304000],[8366826746721323000,13846904447064916285,26023588519449590,8876924567444570473,366962978353611840,4002029424845293600,1789832635968548900,16084834641749443000,4742778578215475000,6102164880094062000,5591755359500854000,1250460246919467000,14253625255053304000],[8876924567444570473,799182088624980700,5348726859432207000,13846904447064916285,366962978353611840,8366826746721323000,5591755359500854000,4742778578215475000,26023588519449590,4002029424845293600,16084834641749443000,14253625255053304000,1250460246919467000,6102164880094062000,1789832635968548900],[6102164880094062000,16084834641749443000,4742778578215475000,366962978353611840,16141281339223525000,1789832635968548900,26023588519449590,5591755359500854000,8876924567444570473,13846904447064916285,1924303400883620400,799182088624980700,8366826746721323000,4002029424845293600,5348726859432207000,1250460246919467000,14253625255053304000],[1250460246919467000,26023588519449590,13846904447064916285,14253625255053304000,1924303400883620400,16141281339223525000,6102164880094062000,4742778578215475000,5348726859432207000,8366826746721323000,799182088624980700,1789832635968548900,4002029424845293600,16084834641749443000,8876924567444570473,366962978353611840,13712392741217151405,5591755359500854000],[8366826746721323000,8876924567444570473,1924303400883620400,1250460246919467000,26023588519449590,366962978353611840,14253625255053304000,6102164880094062000,4002029424845293600,16084834641749443000,4742778578215475000,13846904447064916285,1789832635968548900,5348726859432207000,5591755359500854000,799182088624980700,16141281339223525000],[799182088624980700,8366826746721323000,6102164880094062000,26023588519449590,1250460246919467000,1789832635968548900,16084834641749443000,8876924567444570473,4002029424845293600,4742778578215475000,5348726859432207000,13846904447064916285,366962978353611840,14253625255053304000,5591755359500854000],[16084834641749443000,4742778578215475000,6102164880094062000,13846904447064916285,5348726859432207000,1789832635968548900,1250460246919467000,14253625255053304000,799182088624980700,26023588519449590,5591755359500854000,366962978353611840,8366826746721323000,8876924567444570473],[8876924567444570473,26023588519449590,366962978353611840,1250460246919467000,4742778578215475000,14253625255053304000,5591755359500854000,13846904447064916285,6102164880094062000,4002029424845293600,16084834641749443000,8366826746721323000,5348726859432207000,799182088624980700,1789832635968548900],[5591755359500854000,8876924567444570473,16141281339223525000,4002029424845293600,1789832635968548900,1250460246919467000,5348726859432207000,4742778578215475000,6102164880094062000,366962978353611840,16084834641749443000,8366826746721323000,1924303400883620400,799182088624980700,26023588519449590,14253625255053304000,13846904447064916285],[1924303400883620400,8876924567444570473,1789832635968548900,4002029424845293600,799182088624980700,16084834641749443000,13846904447064916285,8366826746721323000,26023588519449590,6102164880094062000,13712392741217151405,5348726859432207000,366962978353611840,16141281339223525000,14253625255053304000,4742778578215475000,5591755359500854000,1250460246919467000],[5591755359500854000,8366826746721323000,366962978353611840,6102164880094062000],[8366826746721323000,366962978353611840,4742778578215475000,5591755359500854000,6102164880094062000],[14253625255053304000,8366826746721323000,366962978353611840,1789832635968548900,8876924567444570473,5591755359500854000,4742778578215475000,6102164880094062000,13846904447064916285],[4742778578215475000,5591755359500854000,13846904447064916285,366962978353611840,14253625255053304000,8876924567444570473,16084834641749443000,8366826746721323000,1789832635968548900,26023588519449590,6102164880094062000],[1789832635968548900,5591755359500854000,4742778578215475000,8366826746721323000,13846904447064916285,6102164880094062000,1250460246919467000,16084834641749443000,8876924567444570473,14253625255053304000,4002029424845293600,366962978353611840,26023588519449590],[1789832635968548900,5348726859432207000,5591755359500854000,8876924567444570473,8366826746721323000,26023588519449590,6102164880094062000,366962978353611840,16084834641749443000,4742778578215475000,13846904447064916285,14253625255053304000,1250460246919467000,4002029424845293600],[16084834641749443000,4002029424845293600,8366826746721323000,5591755359500854000,6102164880094062000,14253625255053304000,4742778578215475000,8876924567444570473,13846904447064916285,16141281339223525000,1924303400883620400,26023588519449590,1250460246919467000,366962978353611840,1789832635968548900,5348726859432207000],[1789832635968548900,13846904447064916285,1924303400883620400,6102164880094062000,4742778578215475000,8876924567444570473,16084834641749443000,5591755359500854000,13712392741217151405,366962978353611840,16141281339223525000,26023588519449590,8366826746721323000,1250460246919467000,5348726859432207000,4002029424845293600,14253625255053304000],[6102164880094062000,26023588519449590,8876924567444570473,4002029424845293600,4742778578215475000,8366826746721323000,5348726859432207000,5591755359500854000,16141281339223525000,13846904447064916285,1789832635968548900,1250460246919467000,14253625255053304000,16084834641749443000,366962978353611840,1924303400883620400],[1250460246919467000,13712392741217151405,1924303400883620400,16141281339223525000,6102164880094062000,8876924567444570473,366962978353611840,13846904447064916285,8366826746721323000,14253625255053304000,16084834641749443000,1789832635968548900,26023588519449590,4742778578215475000,5348726859432207000,4002029424845293600,5591755359500854000],[9079109751490757000],[9079109751490757000,10316247453530667000],[10316247453530667000,9079109751490757000,5348726859432207000],[10316247453530667000,4742778578215475000,8366826746721323000,1250460246919467000,6102164880094062000,366962978353611840,5591755359500854000,9079109751490757000,5348726859432207000],[4742778578215475000,9079109751490757000,17725188707009528000,10316247453530667000,5591755359500854000,8366826746721323000,5348726859432207000,366962978353611840,1250460246919467000,6102164880094062000],[1250460246919467000,14253625255053304000,1789832635968548900,17725188707009528000,5348726859432207000,5591755359500854000,8366826746721323000,9079109751490757000,10316247453530667000,8876924567444570473,4742778578215475000,13846904447064916285,366962978353611840,6102164880094062000],[4742778578215475000,5348726859432207000,14253625255053304000,10316247453530667000,9079109751490757000,366962978353611840,1789832635968548900,13846904447064916285,5591755359500854000,1250460246919467000,6102164880094062000,799182088624980700,8876924567444570473,8366826746721323000,17725188707009528000],[9079109751490757000,13846904447064916285,5591755359500854000,5348726859432207000,366962978353611840,799182088624980700,4742778578215475000,8876924567444570473,1789832635968548900,14253625255053304000,17725188707009528000,8366826746721323000,10316247453530667000,6102164880094062000,16084834641749443000,26023588519449590,1250460246919467000],[10316247453530667000,366962978353611840,17025512774010843000,799182088624980700,6102164880094062000,16084834641749443000,8366826746721323000,17725188707009528000,5348726859432207000,14253625255053304000,4002029424845293600,1250460246919467000,26023588519449590,9079109751490757000,13846904447064916285,1789832635968548900,5591755359500854000,4742778578215475000,13712392741217151405,8876924567444570473],[17725188707009528000,1250460246919467000,1789832635968548900,366962978353611840,5591755359500854000,9079109751490757000,14253625255053304000,5348726859432207000,4742778578215475000,6102164880094062000,10316247453530667000,799182088624980700,4002029424845293600,13846904447064916285,1924303400883620400,17025512774010843000,8876924567444570473,26023588519449590,13712392741217151405,16141281339223525000,16084834641749443000,8366826746721323000],[9641606876402405523,7094974507355892337,2166474486859326700,4373650744391914031,15908863353600836000,10690271318666670633,5348726859432207000,3223387122603246085,799182088624980700,17725188707009528000,4040070953711778000,12004715210677400127,13712392741217151405],[4040070953711778000,10690271318666670633,9641606876402405523,799182088624980700,12004715210677400127,13712392741217151405,17725188707009528000,2166474486859326700,4373650744391914031,7094974507355892337,3223387122603246085,15908863353600836000,17025512774010843000,5348726859432207000],[10690271318666670633,5348726859432207000,17725188707009528000,3223387122603246085,12004715210677400127,13712392741217151405,1250460246919467000,4373650744391914031,799182088624980700,9641606876402405523,4040070953711778000,7094974507355892337,15908863353600836000,17025512774010843000,2166474486859326700],[7094974507355892337,3223387122603246085,13712392741217151405,10316247453530667000,15908863353600836000,12004715210677400127,4040070953711778000,1250460246919467000,799182088624980700,17725188707009528000,2166474486859326700,5348726859432207000,9641606876402405523,10690271318666670633,17025512774010843000,4373650744391914031],[13712392741217151405,17025512774010843000,15908863353600836000,12004715210677400127,10690271318666670633,17725188707009528000,4373650744391914031,7094974507355892337,3602127523880426500,2166474486859326700,799182088624980700,10316247453530667000,5348726859432207000,3223387122603246085,4040070953711778000,1250460246919467000,9641606876402405523],[17025512774010843000,4040070953711778000,5348726859432207000,12004715210677400127,17725188707009528000,3602127523880426500,10690271318666670633,7094974507355892337,3223387122603246085,1250460246919467000,4742778578215475000,4002029424845293600,10316247453530667000,799182088624980700,4373650744391914031,9641606876402405523,2166474486859326700,13712392741217151405,15908863353600836000],[17725188707009528000,17025512774010843000,13712392741217151405,10690271318666670633,7094974507355892337,12004715210677400127,3223387122603246085,26023588519449590,15908863353600836000,10316247453530667000,3602127523880426500,4002029424845293600,799182088624980700,5348726859432207000,4373650744391914031,9641606876402405523,4742778578215475000,4040070953711778000,2166474486859326700,1250460246919467000],[2166474486859326700,1250460246919467000,3223387122603246085,9641606876402405523,8366826746721323000,799182088624980700,8876924567444570473,16141281339223525000,10316247453530667000,13846904447064916285,26023588519449590,7094974507355892337,15908863353600836000,3602127523880426500,4742778578215475000,5348726859432207000,17025512774010843000,6102164880094062000,4040070953711778000,14253625255053304000,17725188707009528000,10690271318666670633,4002029424845293600,12004715210677400127,13712392741217151405,16084834641749443000,4373650744391914031],[1250460246919467000,3223387122603246085,10316247453530667000,5348726859432207000,2166474486859326700,6102164880094062000,17725188707009528000,12004715210677400127,3602127523880426500,4742778578215475000,4373650744391914031,8876924567444570473,1789832635968548900,799182088624980700,17025512774010843000,4040070953711778000,7094974507355892337,9641606876402405523,5591755359500854000,4002029424845293600,26023588519449590,13712392741217151405,15908863353600836000,16141281339223525000,1924303400883620400,8366826746721323000,13846904447064916285,10690271318666670633,16084834641749443000,14253625255053304000],[13846904447064916285,4373650744391914031,4742778578215475000,366962978353611840,4002029424845293600,17725188707009528000,17025512774010843000,3223387122603246085,15908863353600836000,8876924567444570473,1924303400883620400,8366826746721323000,6102164880094062000,12004715210677400127,16141281339223525000,10316247453530667000,3602127523880426500,1789832635968548900,799182088624980700,7094974507355892337,2166474486859326700,26023588519449590,10690271318666670633,14253625255053304000,1250460246919467000,4040070953711778000,9641606876402405523,13712392741217151405,16084834641749443000,5348726859432207000,5591755359500854000],[9079109751490757000],[17725188707009528000],[13712392741217151405,17725188707009528000,5348726859432207000,17025512774010843000,2166474486859326700],[17725188707009528000,2166474486859326700,17025512774010843000,5348726859432207000,1250460246919467000,13712392741217151405],[2166474486859326700,10316247453530667000,1250460246919467000,17025512774010843000,17725188707009528000,13712392741217151405,5348726859432207000],[17025512774010843000,2166474486859326700,17725188707009528000,5348726859432207000,13712392741217151405,9079109751490757000,1250460246919467000,10316247453530667000],[17025512774010843000,13712392741217151405,8366826746721323000,2166474486859326700,1250460246919467000,5348726859432207000,9079109751490757000,10316247453530667000,5591755359500854000,17725188707009528000],[6102164880094062000,5591755359500854000,17025512774010843000,17725188707009528000,9079109751490757000,1250460246919467000,2166474486859326700,8366826746721323000,10316247453530667000,5348726859432207000,366962978353611840,13712392741217151405],[6102164880094062000,4742778578215475000,1250460246919467000,366962978353611840,1789832635968548900,14253625255053304000,5591755359500854000,2166474486859326700,13712392741217151405,17025512774010843000,17725188707009528000,9079109751490757000,10316247453530667000,5348726859432207000,13846904447064916285,8366826746721323000],[13846904447064916285,16084834641749443000,1789832635968548900,2166474486859326700,5348726859432207000,26023588519449590,1250460246919467000,6102164880094062000,366962978353611840,13712392741217151405,5591755359500854000,9079109751490757000,10316247453530667000,8876924567444570473,17725188707009528000,17025512774010843000,8366826746721323000,14253625255053304000,4742778578215475000,1924303400883620400],[9079109751490757000,366962978353611840,8876924567444570473,2166474486859326700,5348726859432207000,26023588519449590,13712392741217151405,14253625255053304000,10316247453530667000,1924303400883620400,17025512774010843000,6102164880094062000,16084834641749443000,5591755359500854000,1789832635968548900,13846904447064916285,1250460246919467000,17725188707009528000,8366826746721323000,4742778578215475000,4002029424845293600],[4002029424845293600,2166474486859326700,1924303400883620400,16084834641749443000,17725188707009528000,4742778578215475000,13846904447064916285,16141281339223525000,9079109751490757000,6102164880094062000,5591755359500854000,13712392741217151405,26023588519449590,10316247453530667000,17025512774010843000,5348726859432207000,1789832635968548900,366962978353611840,1250460246919467000,8876924567444570473,14253625255053304000,8366826746721323000],[16141281339223525000,4002029424845293600,4742778578215475000,8876924567444570473,799182088624980700,26023588519449590],[16141281339223525000,4742778578215475000,799182088624980700,4002029424845293600,1250460246919467000,26023588519449590,8876924567444570473,6102164880094062000],[14253625255053304000,8876924567444570473,1924303400883620400,1250460246919467000,799182088624980700,16141281339223525000,4742778578215475000,6102164880094062000,26023588519449590,4002029424845293600],[1924303400883620400,6102164880094062000,799182088624980700,1250460246919467000,26023588519449590,5348726859432207000,16141281339223525000,8876924567444570473,4002029424845293600,4742778578215475000,14253625255053304000],[8876924567444570473,799182088624980700,26023588519449590,14253625255053304000,6102164880094062000,1924303400883620400,16141281339223525000,4002029424845293600,366962978353611840,5348726859432207000,4742778578215475000,1250460246919467000],[26023588519449590,4742778578215475000,8366826746721323000,8876924567444570473,1250460246919467000,5348726859432207000,366962978353611840,14253625255053304000,799182088624980700,1924303400883620400,6102164880094062000,16141281339223525000,4002029424845293600],[1924303400883620400,799182088624980700,8366826746721323000,14253625255053304000,16141281339223525000,17725188707009528000,1250460246919467000,26023588519449590,5348726859432207000,4002029424845293600,6102164880094062000,4742778578215475000,8876924567444570473,366962978353611840],[1250460246919467000,8876924567444570473,14253625255053304000,16141281339223525000,1924303400883620400,17725188707009528000,4742778578215475000,13846904447064916285,6102164880094062000,8366826746721323000,16084834641749443000,17025512774010843000,4002029424845293600,799182088624980700,26023588519449590,366962978353611840,5348726859432207000],[14253625255053304000,26023588519449590,4742778578215475000,16084834641749443000,6102164880094062000,366962978353611840,17725188707009528000,799182088624980700,1924303400883620400,16141281339223525000,5591755359500854000,4002029424845293600,1250460246919467000,13846904447064916285,8876924567444570473,5348726859432207000,8366826746721323000,17025512774010843000],[799182088624980700,5591755359500854000,1789832635968548900,8366826746721323000,17025512774010843000,1250460246919467000,26023588519449590,13846904447064916285,1924303400883620400,16084834641749443000,5348726859432207000,14253625255053304000,4742778578215475000,6102164880094062000,8876924567444570473,366962978353611840,17725188707009528000,16141281339223525000,4002029424845293600],[8366826746721323000,4742778578215475000,10316247453530667000,26023588519449590,5348726859432207000,9079109751490757000,799182088624980700,13846904447064916285,14253625255053304000,1789832635968548900,366962978353611840,8876924567444570473,16084834641749443000,17725188707009528000,17025512774010843000,5591755359500854000,16141281339223525000,1924303400883620400,1250460246919467000,6102164880094062000,4002029424845293600],[16084834641749443000,17725188707009528000,16141281339223525000,799182088624980700,14253625255053304000,13712392741217151405,8366826746721323000,17025512774010843000,5348726859432207000,8876924567444570473,4002029424845293600,9079109751490757000,6102164880094062000,1250460246919467000,5591755359500854000,4742778578215475000,1789832635968548900,10316247453530667000,13846904447064916285,366962978353611840,26023588519449590,1924303400883620400],[16084834641749443000,14253625255053304000,1789832635968548900,8876924567444570473,5591755359500854000,366962978353611840,2166474486859326700,17725188707009528000,13712392741217151405,17025512774010843000,4002029424845293600,10316247453530667000,1924303400883620400,26023588519449590,1250460246919467000,9079109751490757000,8366826746721323000,16141281339223525000,799182088624980700,5348726859432207000,13846904447064916285,4742778578215475000,6102164880094062000],[3602127523880426500],[5591755359500854000,8366826746721323000],[6102164880094062000,2233138531352324200,5591755359500854000,8366826746721323000,366962978353611840],[8366826746721323000,13846904447064916285,6102164880094062000,8876924567444570473,5591755359500854000,366962978353611840,2233138531352324200,4742778578215475000,14253625255053304000,1789832635968548900],[13846904447064916285,2233138531352324200,8876924567444570473,366962978353611840,1924303400883620400,1789832635968548900,14253625255053304000,5591755359500854000,16084834641749443000,8366826746721323000,26023588519449590,4742778578215475000,6102164880094062000],[14253625255053304000,4742778578215475000,6102164880094062000,1789832635968548900,12796400626461303056,2233138531352324200,8876924567444570473,26023588519449590,8366826746721323000,366962978353611840,13846904447064916285,1924303400883620400,1250460246919467000,16084834641749443000,5591755359500854000],[4002029424845293600,366962978353611840,1789832635968548900,14253625255053304000,4742778578215475000,13846904447064916285,1924303400883620400,2233138531352324200,1250460246919467000,6102164880094062000,16084834641749443000,12796400626461303056,5591755359500854000,8366826746721323000,26023588519449590,8876924567444570473],[4002029424845293600,14253625255053304000,366962978353611840,1924303400883620400,12796400626461303056,5591755359500854000,16141281339223525000,1789832635968548900,16084834641749443000,26023588519449590,13846904447064916285,8366826746721323000,2233138531352324200,1250460246919467000,6102164880094062000,8876924567444570473,4742778578215475000],[9079109751490757000],[9079109751490757000,10316247453530667000],[10316247453530667000,17725188707009528000,9079109751490757000],[3602127523880426500],[9079109751490757000],[2233138531352324200,9079109751490757000],[2233138531352324200,8366826746721323000,366962978353611840,5591755359500854000,9079109751490757000],[366962978353611840,2233138531352324200,5591755359500854000,8366826746721323000,6102164880094062000,9079109751490757000],[5591755359500854000,9079109751490757000,13846904447064916285,2233138531352324200,366962978353611840,1789832635968548900,14253625255053304000,6102164880094062000,8366826746721323000],[1924303400883620400,13846904447064916285,366962978353611840,14253625255053304000,8366826746721323000,2233138531352324200,16084834641749443000,5591755359500854000,6102164880094062000,9079109751490757000,1789832635968548900],[366962978353611840,8366826746721323000,6102164880094062000,14253625255053304000,2233138531352324200,1924303400883620400,9079109751490757000,5591755359500854000,16084834641749443000,4742778578215475000,13846904447064916285,1789832635968548900],[14253625255053304000,1924303400883620400,26023588519449590,5591755359500854000,16084834641749443000,1789832635968548900,9079109751490757000,13846904447064916285,366962978353611840,6102164880094062000,4742778578215475000,4002029424845293600,2233138531352324200,8366826746721323000],[1789832635968548900,26023588519449590,5591755359500854000,1924303400883620400,16084834641749443000,13846904447064916285,4742778578215475000,9079109751490757000,366962978353611840,8876924567444570473,2233138531352324200,14253625255053304000,8366826746721323000,4002029424845293600,6102164880094062000],[5591755359500854000,16141281339223525000,4742778578215475000,14253625255053304000,26023588519449590,2233138531352324200,13846904447064916285,1789832635968548900,1924303400883620400,16084834641749443000,8366826746721323000,8876924567444570473,6102164880094062000,9079109751490757000,366962978353611840,4002029424845293600],[16141281339223525000,1789832635968548900,16084834641749443000,26023588519449590,8876924567444570473,13846904447064916285,1924303400883620400,2233138531352324200,8366826746721323000,10316247453530667000,5591755359500854000,4742778578215475000,6102164880094062000,366962978353611840,4002029424845293600,9079109751490757000,14253625255053304000],[4002029424845293600,2233138531352324200,1789832635968548900,1924303400883620400,16084834641749443000,1250460246919467000,5591755359500854000,4742778578215475000,14253625255053304000,9079109751490757000,8876924567444570473,10316247453530667000,13846904447064916285,6102164880094062000,8366826746721323000,26023588519449590,12796400626461303056,366962978353611840,16141281339223525000],[]],"selection_redo_history":[]}}},"collapsed":[17725188707009528001,9079109751490757001,3602127523880426501],"name":"changing-seasons.graphite","commit_hash":"e647ca9f91a5e823137122126fe9e980f65d62ea","document_ptz":{"pan":[-999.7861718531644,-499.944688737096],"tilt":0.0,"zoom":0.940975,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":3143874172491239000,"output_index":0}}],"nodes":[[10316247453530667000,{"inputs":[{"Node":{"node_id":9079109751490757000,"output_index":0}},{"Node":{"node_id":12796400626461303056,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[7954638344846060000,{"inputs":[{"Node":{"node_id":5991296268862790000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.1875,"green":0.0,"blue":0.0,"alpha":0.203125}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.19140625,"green":0.0,"blue":0.0,"alpha":0.203125}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17021405646895729000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":1.0,"green":0.31764707,"blue":0.15686275,"alpha":1.0}],[0.5,{"red":1.0,"green":0.5686275,"blue":0.25490198,"alpha":1.0}],[1.0,{"red":1.0,"green":0.7294118,"blue":0.16078432,"alpha":1.0}]]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false}],[8366826746721323000,{"inputs":[{"Node":{"node_id":5591755359500854000,"output_index":0}},{"Node":{"node_id":13846904447064916285,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1250460246919467000,{"inputs":[{"Node":{"node_id":4742778578215475000,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18233215297647862000,{"inputs":[{"Node":{"node_id":14337610765966946000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1000.0,500.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[26023588519449590,{"inputs":[{"Node":{"node_id":4002029424845293600,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.09778450863315612,0.7264556766766779],"end":[0.09778450863315612,0.3634234796342139]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3143874172491239000,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":18233215297647862000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15908863353600836000,{"inputs":[{"Node":{"node_id":7094974507355892337,"output_index":0}},{"Value":{"tagged_value":{"F64":350.0},"exposed":false}},{"Node":{"node_id":4373650744391914031,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8895289679682140000,{"inputs":[{"Node":{"node_id":213744308682803360,"output_index":0}},{"Node":{"node_id":7954638344846060000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17725188707009528000,{"inputs":[{"Node":{"node_id":10316247453530667000,"output_index":0}},{"Node":{"node_id":17025512774010843000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[5591755359500854000,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":1789832635968548900,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12796400626461303056,{"inputs":[{"Node":{"node_id":1250460246919467000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1789832635968548900,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.99215686,"green":0.49019608,"blue":0.11764706,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17855766443650990000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.1764706,"green":0.44313726,"blue":0.05882353,"alpha":1.0}],[0.5,{"red":0.45490196,"green":0.627451,"blue":0.3254902,"alpha":1.0}],[1.0,{"red":1.0,"green":0.5529412,"blue":0.16078432,"alpha":1.0}]]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::GradientValueNode"}},"visible":true,"skip_deduplication":false}],[16084834641749443000,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.99215686,"green":0.49019608,"blue":0.11764706,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.25}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1924303400883620400,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12399235852192450000,16255990754021933000,15620668684239604000,5432878891027338000],"remove":[5992115648840007000],"delta":[[15620668684239604000,[-7.105427357601002e-15,61.89300411522633]],[5432878891027338000,[-0.8525377229081244,-6.779663923182397]],[12399235852192450000,[3.4492455418381667,-6.252914951989055]],[16255990754021933000,[3.423868312757215,60.83950617283953]]]},"segments":{"add":[1366074222973177300,9911415907547690000,3820594103877681000,5933636287523951000],"remove":[16939395239973712000],"start_point":[[9911415907547690000,16255990754021933000],[1366074222973177300,12399235852192450000],[3820594103877681000,15620668684239604000],[5933636287523951000,5432878891027338000]],"end_point":[[9911415907547690000,15620668684239604000],[5933636287523951000,12399235852192450000],[3820594103877681000,5432878891027338000],[1366074222973177300,16255990754021933000]],"handle_primary":[[1366074222973177300,[-12.729766803840905,34.6776406035666]],[9911415907547690000,[-0.6380090646381761,1.00935799390129]],[5933636287523951000,[0.0,0.0]],[3820594103877681000,[-1.2746024488136916,-0.5300005080526233]]],"handle_end":[[9911415907547690000,[1.1025726645520375,0.4584677151070898]],[5933636287523951000,[0.0,0.0]],[3820594103877681000,[-11.281207133058956,31.692729766803836]],[1366074222973177300,[1.0502464055275982,-1.6615353350607336]]],"stroke":[[1366074222973177300,0],[9911415907547690000,0],[5933636287523951000,0],[3820594103877681000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3820594103877681000},{"ty":"End","segment":9911415907547690000}],[{"ty":"Primary","segment":9911415907547690000},{"ty":"End","segment":1366074222973177300}]],"remove_g1_continuous":[[{"ty":"Primary","segment":1366074222973177300},{"ty":"End","segment":5933636287523951000}],[{"ty":"End","segment":3820594103877681000},{"ty":"Primary","segment":16939395239973712000}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2233138531352324200,{"inputs":[{"Node":{"node_id":366962978353611840,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4040070953711778000,{"inputs":[{"Node":{"node_id":15908863353600836000,"output_index":0}},{"Node":{"node_id":2166474486859326700,"output_index":0}},{"Node":{"node_id":10690271318666670633,"output_index":0}},{"Node":{"node_id":12004715210677400127,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":360.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17025512774010843000,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9490196,"green":0.38039216,"blue":0.10980392,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9490196,"green":0.38039216,"blue":0.10980392,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.3155737704918033,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.203125}]],"gradient_type":"Radial","start":[0.5024847204000202,0.41434795196968177],"end":[0.9633481630366972,0.41434795196968194]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4742778578215475000,{"inputs":[{"Node":{"node_id":6102164880094062000,"output_index":0}},{"Node":{"node_id":8876924567444570473,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10463288500489480000,{"inputs":[{"Node":{"node_id":4600332392291315000,"output_index":0}},{"Node":{"node_id":4040070953711778000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3602127523880426500,{"inputs":[{"Value":{"tagged_value":{"Raster":{"element":[{"width":0,"height":0,"data":[0,""]}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Node":{"node_id":17725188707009528000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[6102164880094062000,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14253625255053304000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4002029424845293600,{"inputs":[{"Node":{"node_id":16141281339223525000,"output_index":0}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[891169987742051100,[-4.148148148148122,-38.03703703703696]],[9664410344080632000,[-35.276890617605005,-25.55103086414088]],[15620564416450861000,[-47.66529492455423,-18.042524005486992]],[11874978858302702000,[5.843621399176955,-10.914951989026145]],[353992768245212100,[-42.27413685969588,-41.62581710194484]],[9934671969500465000,[-43.209876543209866,-14.975308641975468]],[753144493519442600,[-50.013717421124845,21.17283950617286]],[4839542169175255000,[-127.45378793812174,-12.06205126188287]],[16594203120813726000,[-62.53607037678802,-36.02218510909459]],[4305429814263425000,[-22.598416051654286,-32.71009758017498]],[6358127410693457000,[-37.72290809327849,-10.54183813443079]],[10418348123687606000,[-61.3893894663837,-52.000301612710835]],[4570709177617499000,[-62.76543209876538,-6.827160493827164]],[11897064075526275000,[-61.65765794556601,-32.902083082000814]],[5755835744378529000,[-17.333333333333343,-33.1358024691358]],[7888691908524886000,[4.351165980795637,-8.105624142661181]],[12582713598977278000,[9.333333333333268,-66.33333333333327]],[16211201987812043000,[-7.105427357601002e-15,-23.90123456790124]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[14351209823603001000,[0.0,0.0]],[4183498485018509000,[-37.13580246913581,14.485596707818928]],[3138315255762406000,[4.038408779149492,-14.5733882030178]],[9552874240071498000,[-5.53086419753086,-0.9657064471879552]],[17948338937502876000,[0.0,0.0]],[18320159308706247000,[0.0,0.0]],[15866454419016458000,[-9.913311783442964,6.121455371873111]],[3359087961315235300,[-0.2881601545358876,-1.8891182956799923]],[12441313998107066000,[-4.938271604938336,6.518518518518476]],[5680639457836474000,[0.0,0.0]],[1562499453192082400,[-0.08779149519892826,-1.6680384087791111]],[2416974091592514600,[0.0,0.0]],[3270826560526153000,[-10.966434817733528,4.317749647005792]],[4590600976245504500,[-6.49657064471878,1.2290809327846404]],[8119312711427333000,[0.0,0.0]],[16362428386097514000,[-23.70370370370371,19.950617283950606]],[2092445122112560000,[-7.308641975308667,2.9629629629629903]]],"handle_end":[[5680639457836474000,[0.2881601545359018,1.8891182956799923]],[15866454419016458000,[2.458161865569238,7.637860082304542]],[16362428386097514000,[-6.962962962962983,53.17283950617292]],[3138315255762406000,[-8.098765432098759,2.947337553780912]],[17948338937502876000,[-50.30452674897121,26.776406035665325]],[9552874240071498000,[-7.286694101508885,7.55006858710567]],[1562499453192082400,[-0.6668238551234532,2.406364346749864]],[18320159308706247000,[-41.26200274348419,15.978052126200277]],[2416974091592514600,[37.06995884773662,-14.595336076817532]],[12441313998107066000,[5.171144805176233,13.506721506057374]],[3270826560526153000,[-49.33882030178324,27.10562414266127]],[3359087961315235300,[-7.813443072702299,7.725651577503442]],[2092445122112560000,[-9.086419753086416,21.135802469135797]],[4590600976245504500,[14.222222222222207,7.989026063100134]],[4183498485018509000,[-21.94787379972564,36.565157750342905]],[8119312711427333000,[-16.241426611796967,5.355281207133061]],[7709585677887591000,[-8.603566529492472,0.8779149519890552]],[14351209823603001000,[-7.374485596707803,5.70644718792866]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[366962978353611840,{"inputs":[{"Node":{"node_id":8366826746721323000,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Union"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16379524086934900000,{"inputs":[{"Node":{"node_id":9609388203059839318,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.41796875,"green":0.1028595,"blue":0.1028595,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.421875,"green":0.1038208,"blue":0.1038208,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4600332392291315000,{"inputs":[{"Node":{"node_id":4040070953711778000,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Node":{"node_id":11677958249556146000,"output_index":0}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false}],[7386572856931342000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::PercentageValueNode"}},"visible":true,"skip_deduplication":false}],[4373650744391914031,{"inputs":[{"Node":{"node_id":9641606876402405523,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[16141281339223525000,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8940743774820468000,11897064075526275000,9664410344080632000,10418348123687606000,16594203120813726000,4839542169175255000,353992768245212100,4305429814263425000,15620564416450861000,4570709177617499000,9934671969500465000,6358127410693457000,753144493519442600,11874978858302702000,7888691908524886000,12582713598977278000,891169987742051100,5755835744378529000,16211201987812043000],"remove":[],"delta":[[4839542169175255000,[157.56627079134535,-37.10118604950259]],[8940743774820468000,[0.0,0.0]],[4305429814263425000,[91.25136529719612,-51.92090379156713]],[9934671969500465000,[125.38271604938268,-124.67901234567891]],[891169987742051100,[63.802469135802426,-190.90123456790127]],[11874978858302702000,[92.39506172839504,-161.41975308641972]],[16594203120813726000,[126.09711290079348,-8.575894451947931]],[4570709177617499000,[114.716049382716,-90.16049382716052]],[12582713598977278000,[49.135802469135854,-136.33333333333334]],[15620564416450861000,[141.77777777777777,-86.60493827160491]],[753144493519442600,[136.8395061728395,-177.6172839506173]],[5755835744378529000,[28.444444444444457,-210.4567901234568]],[6358127410693457000,[115.50617283950618,-132.38271604938265]],[11897064075526275000,[72.71938634062775,26.932261408475423]],[10418348123687606000,[112.8352056529406,14.952290638773944]],[353992768245212100,[114.87770338918835,-41.33714586101814]],[9664410344080632000,[64.51145851883956,11.32880864191867]],[16211201987812043000,[0.0,-231.0]],[7888691908524886000,[66.32098765432096,-154.30864197530863]]]},"segments":{"add":[7709585677887591000,14351209823603001000,18320159308706247000,8119312711427333000,4590600976245504500,17948338937502876000,1562499453192082400,3138315255762406000,2416974091592514600,3270826560526153000,5680639457836474000,3359087961315235300,9552874240071498000,15866454419016458000,4183498485018509000,2092445122112560000,16362428386097514000,12441313998107066000],"remove":[],"start_point":[[5680639457836474000,9934671969500465000],[8119312711427333000,10418348123687606000],[7709585677887591000,8940743774820468000],[16362428386097514000,891169987742051100],[9552874240071498000,753144493519442600],[4183498485018509000,7888691908524886000],[2092445122112560000,12582713598977278000],[15866454419016458000,11874978858302702000],[12441313998107066000,5755835744378529000],[1562499453192082400,353992768245212100],[17948338937502876000,4839542169175255000],[18320159308706247000,9664410344080632000],[2416974091592514600,15620564416450861000],[3359087961315235300,6358127410693457000],[3138315255762406000,4305429814263425000],[14351209823603001000,11897064075526275000],[4590600976245504500,16594203120813726000],[3270826560526153000,4570709177617499000]],"end_point":[[17948338937502876000,353992768245212100],[7709585677887591000,11897064075526275000],[16362428386097514000,5755835744378529000],[3270826560526153000,9934671969500465000],[2092445122112560000,891169987742051100],[9552874240071498000,11874978858302702000],[14351209823603001000,9664410344080632000],[4590600976245504500,4839542169175255000],[1562499453192082400,4305429814263425000],[3138315255762406000,15620564416450861000],[12441313998107066000,16211201987812043000],[18320159308706247000,10418348123687606000],[4183498485018509000,12582713598977278000],[3359087961315235300,753144493519442600],[5680639457836474000,6358127410693457000],[2416974091592514600,4570709177617499000],[8119312711427333000,16594203120813726000],[15866454419016458000,7888691908524886000]],"handle_primary":[[12441313998107066000,[-4.938271604938336,6.518518518518533]],[3359087961315235300,[2.7654320987655296,-14.419753086419746]],[18320159308706247000,[0.0,0.0]],[2416974091592514600,[0.0,0.0]],[5680639457836474000,[0.0,0.0]],[4590600976245504500,[-7.759646437163781,-18.695929243596197]],[1562499453192082400,[-15.34246181071461,-3.7168967220297873]],[9552874240071498000,[-21.33333333333331,12.049382716049422]],[17948338937502876000,[0.0,0.0]],[4183498485018509000,[-6.617283950617207,15.308641975308689]],[2092445122112560000,[-1.5802469135804245,-5.5308641975308035]],[8119312711427333000,[0.0,0.0]],[7709585677887591000,[0.0,0.0]],[15866454419016458000,[-10.469135802469168,13.432098765432102]],[14351209823603001000,[0.0,0.0]],[3270826560526153000,[-9.086419753086432,-7.506172839506121]],[3138315255762406000,[-2.469006630399008,-5.902063388586043]],[16362428386097514000,[-14.913580246913511,12.641975308642031]]],"handle_end":[[8119312711427333000,[-40.68684029964413,7.631779585305026]],[3359087961315235300,[-27.099224819820336,19.753086419753146]],[5680639457836474000,[-2.7654320987655296,14.419753086419746]],[4590600976245504500,[-5.92501398131742,10.665547436428083]],[2092445122112560000,[-20.345679012345613,18.5679012345679]],[14351209823603001000,[5.742854988208705,6.327636391047918]],[12441313998107066000,[13.234567901234527,34.5679012345679]],[3138315255762406000,[-21.33333333333337,3.753086419753061]],[7709585677887591000,[-42.51530058403631,-10.382498109968708]],[15866454419016458000,[0.19753086419757435,13.827160493827137]],[18320159308706247000,[-24.983271918092953,-7.776766653003392]],[16362428386097514000,[-8.0,38.419753086419746]],[4183498485018509000,[4.938271604938336,-1.1851851851851052]],[17948338937502876000,[25.51458639999055,20.651563178633637]],[1562499453192082400,[2.0974057383288596,5.01376604938514]],[3270826560526153000,[-13.03703703703701,9.679012345678984]],[9552874240071498000,[4.938271604938279,11.061728395061806]],[2416974091592514600,[9.086419753086377,7.506172839506235]]],"stroke":[[12441313998107066000,0],[15866454419016458000,0],[9552874240071498000,0],[3359087961315235300,0],[3138315255762406000,0],[1562499453192082400,0],[16362428386097514000,0],[7709585677887591000,0],[2092445122112560000,0],[2416974091592514600,0],[3270826560526153000,0],[18320159308706247000,0],[5680639457836474000,0],[4183498485018509000,0],[17948338937502876000,0],[14351209823603001000,0],[4590600976245504500,0],[8119312711427333000,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":2416974091592514600},{"ty":"Primary","segment":3270826560526153000}],[{"ty":"End","segment":5680639457836474000},{"ty":"Primary","segment":3359087961315235300}],[{"ty":"End","segment":1562499453192082400},{"ty":"Primary","segment":3138315255762406000}]],"remove_g1_continuous":[[{"ty":"End","segment":4183498485018509000},{"ty":"Primary","segment":2092445122112560000}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9641606876402405523,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::InstanceIndexNode"}},"visible":true,"skip_deduplication":false}],[9609388203059839318,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[799182088624980700,{"inputs":[{"Node":{"node_id":7386572856931342000,"output_index":0}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::DivideNode"}},"visible":true,"skip_deduplication":false}],[9079109751490757000,{"inputs":[{"Value":{"tagged_value":{"Raster":{"element":[{"width":0,"height":0,"data":[0,""]}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Node":{"node_id":2233138531352324200,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[11677958249556146000,{"inputs":[{"Node":{"node_id":17021405646895729000,"output_index":0}},{"Node":{"node_id":17855766443650990000,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Normal"},"exposed":false}},{"Node":{"node_id":7386572856931342000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::blending_nodes::BlendNode"}},"visible":true,"skip_deduplication":false}],[13846904447064916285,{"inputs":[{"Node":{"node_id":16084834641749443000,"output_index":0}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::MirrorNode"}},"visible":true,"skip_deduplication":false}],[10690271318666670633,{"inputs":[{"Node":{"node_id":12004715210677400127,"output_index":0}},{"Value":{"tagged_value":{"F64":0.2},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::SubtractNode"}},"visible":true,"skip_deduplication":false}],[5348726859432207000,{"inputs":[{"Node":{"node_id":12796400626461303056,"output_index":0}},{"Node":{"node_id":2233138531352324200,"output_index":0}},{"Node":{"node_id":799182088624980700,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::MorphNode"}},"visible":true,"skip_deduplication":false}],[16236970157339521798,{"inputs":[{"Node":{"node_id":8895289679682140000,"output_index":0}},{"Value":{"tagged_value":{"U64":8},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::InstanceRepeatNode"}},"visible":true,"skip_deduplication":false}],[14250786159408925409,{"inputs":[{"Node":{"node_id":3430686124240113700,"output_index":0}},{"Node":{"node_id":16236970157339521798,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7094974507355892337,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[2166474486859326700,{"inputs":[{"Node":{"node_id":13712392741217151405,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0}],[0.6885245901639344,{"red":0.08984375,"green":0.08984375,"blue":0.08984375,"alpha":0.08775313}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157}]],"gradient_type":"Radial","start":[0.5024847204000202,0.41434795196968177],"end":[0.9633481630366972,0.41434795196968194]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9490196,"green":0.38039216,"blue":0.10980392,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.0}],[0.6885245901639344,{"red":0.08984375,"green":0.08984375,"blue":0.08984375,"alpha":0.08775313}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.20392157}]],"gradient_type":"Radial","start":[0.5024847204000202,0.41434795196968177],"end":[0.9633481630366972,0.41434795196968194]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3430686124240113700,{"inputs":[{"Node":{"node_id":3602127523880426500,"output_index":0}},{"Node":{"node_id":16379524086934900000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8876924567444570473,{"inputs":[{"Node":{"node_id":26023588519449590,"output_index":0}},{"Value":{"tagged_value":{"ReferencePoint":"CenterLeft"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::MirrorNode"}},"visible":true,"skip_deduplication":false}],[5991296268862790000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":2000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1000.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[213744308682803360,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":10463288500489480000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14337610765966946000,{"inputs":[{"Node":{"node_id":14250786159408925409,"output_index":0}},{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12004715210677400127,{"inputs":[{"Node":{"node_id":3223387122603246085,"output_index":0}},{"Value":{"tagged_value":{"F64":1.1},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MaxNode"}},"visible":true,"skip_deduplication":false}],[13712392741217151405,{"inputs":[{"Node":{"node_id":5348726859432207000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14253625255053304000,{"inputs":[{"Node":{"node_id":1924303400883620400,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9765625,"green":0.7715821,"blue":0.2861023,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.09778450863315612,0.7264556766766779],"end":[0.09778450863315612,0.3634234796342139]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3223387122603246085,{"inputs":[{"Node":{"node_id":9641606876402405523,"output_index":0}},{"Value":{"tagged_value":{"String":"2 - 0.2A"},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MathNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[7954638344846060000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3602127523880426500,{"persistent_metadata":{"reference":"Merge","display_name":"Individual Leaf Views","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17725188707009528000,{"persistent_metadata":{"reference":"Merge","display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[9,-29]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6102164880094062000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1250460246919467000,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-25]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4600332392291315000,{"persistent_metadata":{"reference":"Assign Colors","display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Content","input_description":"The content with vector paths to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Content"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1924303400883620400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-44,-19]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17025512774010843000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2166474486859326700,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[2,-32]}}},"network_metadata":null}}],[799182088624980700,{"persistent_metadata":{"reference":"Divide","display_name":"Divide","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Numerator","input_description":"The left-hand side of the division operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Denominator","input_description":"The right-hand side of the division operation.\n"}}],"output_names":["Output"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-30]}}},"network_metadata":null}}],[17855766443650990000,{"persistent_metadata":{"reference":"Gradient Value","display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":["GradientStops"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-47,-40]}}},"network_metadata":null}}],[26023588519449590,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8876924567444570473,{"persistent_metadata":{"reference":"Mirror","display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4742778578215475000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-22]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5991296268862790000,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1789832635968548900,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2233138531352324200,{"persistent_metadata":{"reference":"Cache","display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-16]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4373650744391914031,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-37]}}},"network_metadata":null}}],[5348726859432207000,{"persistent_metadata":{"reference":"Morph","display_name":"Morph","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Source","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Target","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Time","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-32]}}},"network_metadata":null}}],[9079109751490757000,{"persistent_metadata":{"reference":"Merge","display_name":"Maple Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3430686124240113700,{"persistent_metadata":{"reference":"Merge","display_name":"Solid Backdrop","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":8}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14253625255053304000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15908863353600836000,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"range_max":100.0,"blank_assist":true,"min":0.01,"mode":"Range","range_min":1.0,"is_integer":false},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-38]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7386572856931342000,{"persistent_metadata":{"reference":"Percentage Value","display_name":"Percentage Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Percentage","input_description":""}}],"output_names":["f64"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-47,-39]}}},"network_metadata":null}}],[13712392741217151405,{"persistent_metadata":{"reference":"Cache","display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-5,-32]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17021405646895729000,{"persistent_metadata":{"reference":"Gradient Value","display_name":"Gradient Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}}],"output_names":["GradientStops"],"locked":false,"pinned":true,"node_type_metadata":{"Node":{"position":{"Absolute":[-47,-41]}}},"network_metadata":null}}],[12004715210677400127,{"persistent_metadata":{"reference":"Max","display_name":"Max","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"One of the two numbers, of which the greater will be returned.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Other Value","input_description":"The other of the two numbers, of which the greater will be returned.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-35]}}},"network_metadata":null}}],[9609388203059839318,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[366962978353611840,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-16]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11677958249556146000,{"persistent_metadata":{"reference":"Blend","display_name":"Blend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Under","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":["Color"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-41]}}},"network_metadata":null}}],[4002029424845293600,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12796400626461303056,{"persistent_metadata":{"reference":"Cache","display_name":"Cache","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Data","input_description":"TODO"}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-25]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3143874172491239000,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"y":"H","unit":" px","x":"W"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[26,-56]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4040070953711778000,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-12,-38]}}},"network_metadata":null}}],[16236970157339521798,{"persistent_metadata":{"reference":"Instance Repeat","display_name":"Instance Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Count","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13846904447064916285,{"persistent_metadata":{"reference":"Mirror","display_name":"Mirror","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Relative To Bounds","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Offset","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Keep Original","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5591755359500854000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14337610765966946000,{"persistent_metadata":{"reference":"Merge","display_name":"NOTE: Change seasons with the \"Percentage Value\" parameter","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[14,-52]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[213744308682803360,{"persistent_metadata":{"reference":"Merge","display_name":"Leaves","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8366826746721323000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-30,-13]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10690271318666670633,{"persistent_metadata":{"reference":"Subtract","display_name":"Subtract","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Minuend","input_description":"The left-hand side of the subtraction operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Subtrahend","input_description":"The right-hand side of the subtraction operation.\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-19,-36]}}},"network_metadata":null}}],[16141281339223525000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-58,-22]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8895289679682140000,{"persistent_metadata":{"reference":"Merge","display_name":"Depth Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[2,-45]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3223387122603246085,{"persistent_metadata":{"reference":"Math","display_name":"Math","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand A","input_description":"The value of \"A\" when calculating the expression\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Expression","input_description":"A math expression that may incorporate \"A\" and/or \"B\", such as \"sqrt(A + B) - B^2\"\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operand B","input_description":"The value of \"B\" when calculating the expression\n"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-33,-35]}}},"network_metadata":null}}],[16084834641749443000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16379524086934900000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10316247453530667000,{"persistent_metadata":{"reference":"Merge","display_name":"Oak Leaf","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":1}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10463288500489480000,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14250786159408925409,{"persistent_metadata":{"reference":"Merge","display_name":"Leaf Levels","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18233215297647862000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7094974507355892337,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-26,-38]}}},"network_metadata":null}}],[9641606876402405523,{"persistent_metadata":{"reference":null,"display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Loop Level","input_description":"TODO"}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-40,-36]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[287.6272550000002,767.89247],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1278.0,1349.0],"node_graph_top_right":[1980.800048828125,0.0]},"selection_undo_history":[[1924303400883620400,8366826746721323000,16084834641749443000,13846904447064916285,366962978353611840,14253625255053304000,4002029424845293600,6102164880094062000,1250460246919467000,26023588519449590,5591755359500854000,8876924567444570473,4742778578215475000,1789832635968548900,16141281339223525000],[799182088624980700,4002029424845293600,366962978353611840,14253625255053304000,5348726859432207000,4742778578215475000,16084834641749443000,8876924567444570473,1924303400883620400,26023588519449590,16141281339223525000,1789832635968548900,1250460246919467000,13846904447064916285,5591755359500854000,6102164880094062000,8366826746721323000],[8876924567444570473,799182088624980700,26023588519449590,8366826746721323000,16084834641749443000,5591755359500854000,6102164880094062000,16141281339223525000,366962978353611840,1250460246919467000,4002029424845293600,1789832635968548900,1924303400883620400,14253625255053304000,13712392741217151405,13846904447064916285,5348726859432207000,4742778578215475000],[1250460246919467000,16084834641749443000,8366826746721323000,4002029424845293600,799182088624980700,26023588519449590,5348726859432207000,366962978353611840,8876924567444570473,6102164880094062000,13712392741217151405,13846904447064916285,9079109751490757000,5591755359500854000,16141281339223525000,1789832635968548900,1924303400883620400,14253625255053304000,4742778578215475000],[1250460246919467000,5348726859432207000,8366826746721323000,14253625255053304000,5591755359500854000,13846904447064916285,26023588519449590,799182088624980700,4742778578215475000,8876924567444570473,6102164880094062000,1924303400883620400,10316247453530667000,13712392741217151405,366962978353611840,1789832635968548900,4002029424845293600,16084834641749443000,9079109751490757000,16141281339223525000],[4742778578215475000,13712392741217151405,9079109751490757000,8876924567444570473,8366826746721323000,10316247453530667000,5348726859432207000,16084834641749443000,13846904447064916285,5591755359500854000,1789832635968548900,16141281339223525000,1250460246919467000,14253625255053304000,799182088624980700,366962978353611840,4002029424845293600,1924303400883620400,17725188707009528000,26023588519449590,6102164880094062000,17025512774010843000],[5591755359500854000,366962978353611840,4002029424845293600,3602127523880426500,5348726859432207000,13846904447064916285,6102164880094062000,26023588519449590,17025512774010843000,14253625255053304000,17725188707009528000,13712392741217151405,4742778578215475000,1924303400883620400,1789832635968548900,1250460246919467000,16141281339223525000,799182088624980700,8366826746721323000,9079109751490757000,8876924567444570473,10316247453530667000,16084834641749443000],[5591755359500854000,8366826746721323000,366962978353611840,6102164880094062000],[8366826746721323000,6102164880094062000,5591755359500854000,14253625255053304000,1789832635968548900,8876924567444570473,4742778578215475000,13846904447064916285,366962978353611840],[1789832635968548900,8366826746721323000,366962978353611840,5591755359500854000,4742778578215475000,26023588519449590,8876924567444570473,6102164880094062000,13846904447064916285,16084834641749443000,14253625255053304000],[8366826746721323000,13846904447064916285,26023588519449590,8876924567444570473,366962978353611840,4002029424845293600,1789832635968548900,16084834641749443000,4742778578215475000,6102164880094062000,5591755359500854000,1250460246919467000,14253625255053304000],[8876924567444570473,799182088624980700,5348726859432207000,13846904447064916285,366962978353611840,8366826746721323000,5591755359500854000,4742778578215475000,26023588519449590,4002029424845293600,16084834641749443000,14253625255053304000,1250460246919467000,6102164880094062000,1789832635968548900],[6102164880094062000,16084834641749443000,4742778578215475000,366962978353611840,16141281339223525000,1789832635968548900,26023588519449590,5591755359500854000,8876924567444570473,13846904447064916285,1924303400883620400,799182088624980700,8366826746721323000,4002029424845293600,5348726859432207000,1250460246919467000,14253625255053304000],[1250460246919467000,26023588519449590,13846904447064916285,14253625255053304000,1924303400883620400,16141281339223525000,6102164880094062000,4742778578215475000,5348726859432207000,8366826746721323000,799182088624980700,1789832635968548900,4002029424845293600,16084834641749443000,8876924567444570473,366962978353611840,13712392741217151405,5591755359500854000],[8366826746721323000,8876924567444570473,1924303400883620400,1250460246919467000,26023588519449590,366962978353611840,14253625255053304000,6102164880094062000,4002029424845293600,16084834641749443000,4742778578215475000,13846904447064916285,1789832635968548900,5348726859432207000,5591755359500854000,799182088624980700,16141281339223525000],[799182088624980700,8366826746721323000,6102164880094062000,26023588519449590,1250460246919467000,1789832635968548900,16084834641749443000,8876924567444570473,4002029424845293600,4742778578215475000,5348726859432207000,13846904447064916285,366962978353611840,14253625255053304000,5591755359500854000],[16084834641749443000,4742778578215475000,6102164880094062000,13846904447064916285,5348726859432207000,1789832635968548900,1250460246919467000,14253625255053304000,799182088624980700,26023588519449590,5591755359500854000,366962978353611840,8366826746721323000,8876924567444570473],[8876924567444570473,26023588519449590,366962978353611840,1250460246919467000,4742778578215475000,14253625255053304000,5591755359500854000,13846904447064916285,6102164880094062000,4002029424845293600,16084834641749443000,8366826746721323000,5348726859432207000,799182088624980700,1789832635968548900],[5591755359500854000,8876924567444570473,16141281339223525000,4002029424845293600,1789832635968548900,1250460246919467000,5348726859432207000,4742778578215475000,6102164880094062000,366962978353611840,16084834641749443000,8366826746721323000,1924303400883620400,799182088624980700,26023588519449590,14253625255053304000,13846904447064916285],[1924303400883620400,8876924567444570473,1789832635968548900,4002029424845293600,799182088624980700,16084834641749443000,13846904447064916285,8366826746721323000,26023588519449590,6102164880094062000,13712392741217151405,5348726859432207000,366962978353611840,16141281339223525000,14253625255053304000,4742778578215475000,5591755359500854000,1250460246919467000],[5591755359500854000,8366826746721323000,366962978353611840,6102164880094062000],[8366826746721323000,366962978353611840,4742778578215475000,5591755359500854000,6102164880094062000],[14253625255053304000,8366826746721323000,366962978353611840,1789832635968548900,8876924567444570473,5591755359500854000,4742778578215475000,6102164880094062000,13846904447064916285],[4742778578215475000,5591755359500854000,13846904447064916285,366962978353611840,14253625255053304000,8876924567444570473,16084834641749443000,8366826746721323000,1789832635968548900,26023588519449590,6102164880094062000],[1789832635968548900,5591755359500854000,4742778578215475000,8366826746721323000,13846904447064916285,6102164880094062000,1250460246919467000,16084834641749443000,8876924567444570473,14253625255053304000,4002029424845293600,366962978353611840,26023588519449590],[1789832635968548900,5348726859432207000,5591755359500854000,8876924567444570473,8366826746721323000,26023588519449590,6102164880094062000,366962978353611840,16084834641749443000,4742778578215475000,13846904447064916285,14253625255053304000,1250460246919467000,4002029424845293600],[16084834641749443000,4002029424845293600,8366826746721323000,5591755359500854000,6102164880094062000,14253625255053304000,4742778578215475000,8876924567444570473,13846904447064916285,16141281339223525000,1924303400883620400,26023588519449590,1250460246919467000,366962978353611840,1789832635968548900,5348726859432207000],[1789832635968548900,13846904447064916285,1924303400883620400,6102164880094062000,4742778578215475000,8876924567444570473,16084834641749443000,5591755359500854000,13712392741217151405,366962978353611840,16141281339223525000,26023588519449590,8366826746721323000,1250460246919467000,5348726859432207000,4002029424845293600,14253625255053304000],[6102164880094062000,26023588519449590,8876924567444570473,4002029424845293600,4742778578215475000,8366826746721323000,5348726859432207000,5591755359500854000,16141281339223525000,13846904447064916285,1789832635968548900,1250460246919467000,14253625255053304000,16084834641749443000,366962978353611840,1924303400883620400],[1250460246919467000,13712392741217151405,1924303400883620400,16141281339223525000,6102164880094062000,8876924567444570473,366962978353611840,13846904447064916285,8366826746721323000,14253625255053304000,16084834641749443000,1789832635968548900,26023588519449590,4742778578215475000,5348726859432207000,4002029424845293600,5591755359500854000],[9079109751490757000],[9079109751490757000,10316247453530667000],[10316247453530667000,9079109751490757000,5348726859432207000],[10316247453530667000,4742778578215475000,8366826746721323000,1250460246919467000,6102164880094062000,366962978353611840,5591755359500854000,9079109751490757000,5348726859432207000],[4742778578215475000,9079109751490757000,17725188707009528000,10316247453530667000,5591755359500854000,8366826746721323000,5348726859432207000,366962978353611840,1250460246919467000,6102164880094062000],[1250460246919467000,14253625255053304000,1789832635968548900,17725188707009528000,5348726859432207000,5591755359500854000,8366826746721323000,9079109751490757000,10316247453530667000,8876924567444570473,4742778578215475000,13846904447064916285,366962978353611840,6102164880094062000],[4742778578215475000,5348726859432207000,14253625255053304000,10316247453530667000,9079109751490757000,366962978353611840,1789832635968548900,13846904447064916285,5591755359500854000,1250460246919467000,6102164880094062000,799182088624980700,8876924567444570473,8366826746721323000,17725188707009528000],[9079109751490757000,13846904447064916285,5591755359500854000,5348726859432207000,366962978353611840,799182088624980700,4742778578215475000,8876924567444570473,1789832635968548900,14253625255053304000,17725188707009528000,8366826746721323000,10316247453530667000,6102164880094062000,16084834641749443000,26023588519449590,1250460246919467000],[10316247453530667000,366962978353611840,17025512774010843000,799182088624980700,6102164880094062000,16084834641749443000,8366826746721323000,17725188707009528000,5348726859432207000,14253625255053304000,4002029424845293600,1250460246919467000,26023588519449590,9079109751490757000,13846904447064916285,1789832635968548900,5591755359500854000,4742778578215475000,13712392741217151405,8876924567444570473],[17725188707009528000,1250460246919467000,1789832635968548900,366962978353611840,5591755359500854000,9079109751490757000,14253625255053304000,5348726859432207000,4742778578215475000,6102164880094062000,10316247453530667000,799182088624980700,4002029424845293600,13846904447064916285,1924303400883620400,17025512774010843000,8876924567444570473,26023588519449590,13712392741217151405,16141281339223525000,16084834641749443000,8366826746721323000],[9641606876402405523,7094974507355892337,2166474486859326700,4373650744391914031,15908863353600836000,10690271318666670633,5348726859432207000,3223387122603246085,799182088624980700,17725188707009528000,4040070953711778000,12004715210677400127,13712392741217151405],[4040070953711778000,10690271318666670633,9641606876402405523,799182088624980700,12004715210677400127,13712392741217151405,17725188707009528000,2166474486859326700,4373650744391914031,7094974507355892337,3223387122603246085,15908863353600836000,17025512774010843000,5348726859432207000],[10690271318666670633,5348726859432207000,17725188707009528000,3223387122603246085,12004715210677400127,13712392741217151405,1250460246919467000,4373650744391914031,799182088624980700,9641606876402405523,4040070953711778000,7094974507355892337,15908863353600836000,17025512774010843000,2166474486859326700],[7094974507355892337,3223387122603246085,13712392741217151405,10316247453530667000,15908863353600836000,12004715210677400127,4040070953711778000,1250460246919467000,799182088624980700,17725188707009528000,2166474486859326700,5348726859432207000,9641606876402405523,10690271318666670633,17025512774010843000,4373650744391914031],[13712392741217151405,17025512774010843000,15908863353600836000,12004715210677400127,10690271318666670633,17725188707009528000,4373650744391914031,7094974507355892337,3602127523880426500,2166474486859326700,799182088624980700,10316247453530667000,5348726859432207000,3223387122603246085,4040070953711778000,1250460246919467000,9641606876402405523],[17025512774010843000,4040070953711778000,5348726859432207000,12004715210677400127,17725188707009528000,3602127523880426500,10690271318666670633,7094974507355892337,3223387122603246085,1250460246919467000,4742778578215475000,4002029424845293600,10316247453530667000,799182088624980700,4373650744391914031,9641606876402405523,2166474486859326700,13712392741217151405,15908863353600836000],[17725188707009528000,17025512774010843000,13712392741217151405,10690271318666670633,7094974507355892337,12004715210677400127,3223387122603246085,26023588519449590,15908863353600836000,10316247453530667000,3602127523880426500,4002029424845293600,799182088624980700,5348726859432207000,4373650744391914031,9641606876402405523,4742778578215475000,4040070953711778000,2166474486859326700,1250460246919467000],[2166474486859326700,1250460246919467000,3223387122603246085,9641606876402405523,8366826746721323000,799182088624980700,8876924567444570473,16141281339223525000,10316247453530667000,13846904447064916285,26023588519449590,7094974507355892337,15908863353600836000,3602127523880426500,4742778578215475000,5348726859432207000,17025512774010843000,6102164880094062000,4040070953711778000,14253625255053304000,17725188707009528000,10690271318666670633,4002029424845293600,12004715210677400127,13712392741217151405,16084834641749443000,4373650744391914031],[1250460246919467000,3223387122603246085,10316247453530667000,5348726859432207000,2166474486859326700,6102164880094062000,17725188707009528000,12004715210677400127,3602127523880426500,4742778578215475000,4373650744391914031,8876924567444570473,1789832635968548900,799182088624980700,17025512774010843000,4040070953711778000,7094974507355892337,9641606876402405523,5591755359500854000,4002029424845293600,26023588519449590,13712392741217151405,15908863353600836000,16141281339223525000,1924303400883620400,8366826746721323000,13846904447064916285,10690271318666670633,16084834641749443000,14253625255053304000],[13846904447064916285,4373650744391914031,4742778578215475000,366962978353611840,4002029424845293600,17725188707009528000,17025512774010843000,3223387122603246085,15908863353600836000,8876924567444570473,1924303400883620400,8366826746721323000,6102164880094062000,12004715210677400127,16141281339223525000,10316247453530667000,3602127523880426500,1789832635968548900,799182088624980700,7094974507355892337,2166474486859326700,26023588519449590,10690271318666670633,14253625255053304000,1250460246919467000,4040070953711778000,9641606876402405523,13712392741217151405,16084834641749443000,5348726859432207000,5591755359500854000],[9079109751490757000],[17725188707009528000],[13712392741217151405,17725188707009528000,5348726859432207000,17025512774010843000,2166474486859326700],[17725188707009528000,2166474486859326700,17025512774010843000,5348726859432207000,1250460246919467000,13712392741217151405],[2166474486859326700,10316247453530667000,1250460246919467000,17025512774010843000,17725188707009528000,13712392741217151405,5348726859432207000],[17025512774010843000,2166474486859326700,17725188707009528000,5348726859432207000,13712392741217151405,9079109751490757000,1250460246919467000,10316247453530667000],[17025512774010843000,13712392741217151405,8366826746721323000,2166474486859326700,1250460246919467000,5348726859432207000,9079109751490757000,10316247453530667000,5591755359500854000,17725188707009528000],[6102164880094062000,5591755359500854000,17025512774010843000,17725188707009528000,9079109751490757000,1250460246919467000,2166474486859326700,8366826746721323000,10316247453530667000,5348726859432207000,366962978353611840,13712392741217151405],[6102164880094062000,4742778578215475000,1250460246919467000,366962978353611840,1789832635968548900,14253625255053304000,5591755359500854000,2166474486859326700,13712392741217151405,17025512774010843000,17725188707009528000,9079109751490757000,10316247453530667000,5348726859432207000,13846904447064916285,8366826746721323000],[13846904447064916285,16084834641749443000,1789832635968548900,2166474486859326700,5348726859432207000,26023588519449590,1250460246919467000,6102164880094062000,366962978353611840,13712392741217151405,5591755359500854000,9079109751490757000,10316247453530667000,8876924567444570473,17725188707009528000,17025512774010843000,8366826746721323000,14253625255053304000,4742778578215475000,1924303400883620400],[9079109751490757000,366962978353611840,8876924567444570473,2166474486859326700,5348726859432207000,26023588519449590,13712392741217151405,14253625255053304000,10316247453530667000,1924303400883620400,17025512774010843000,6102164880094062000,16084834641749443000,5591755359500854000,1789832635968548900,13846904447064916285,1250460246919467000,17725188707009528000,8366826746721323000,4742778578215475000,4002029424845293600],[4002029424845293600,2166474486859326700,1924303400883620400,16084834641749443000,17725188707009528000,4742778578215475000,13846904447064916285,16141281339223525000,9079109751490757000,6102164880094062000,5591755359500854000,13712392741217151405,26023588519449590,10316247453530667000,17025512774010843000,5348726859432207000,1789832635968548900,366962978353611840,1250460246919467000,8876924567444570473,14253625255053304000,8366826746721323000],[16141281339223525000,4002029424845293600,4742778578215475000,8876924567444570473,799182088624980700,26023588519449590],[16141281339223525000,4742778578215475000,799182088624980700,4002029424845293600,1250460246919467000,26023588519449590,8876924567444570473,6102164880094062000],[14253625255053304000,8876924567444570473,1924303400883620400,1250460246919467000,799182088624980700,16141281339223525000,4742778578215475000,6102164880094062000,26023588519449590,4002029424845293600],[1924303400883620400,6102164880094062000,799182088624980700,1250460246919467000,26023588519449590,5348726859432207000,16141281339223525000,8876924567444570473,4002029424845293600,4742778578215475000,14253625255053304000],[8876924567444570473,799182088624980700,26023588519449590,14253625255053304000,6102164880094062000,1924303400883620400,16141281339223525000,4002029424845293600,366962978353611840,5348726859432207000,4742778578215475000,1250460246919467000],[26023588519449590,4742778578215475000,8366826746721323000,8876924567444570473,1250460246919467000,5348726859432207000,366962978353611840,14253625255053304000,799182088624980700,1924303400883620400,6102164880094062000,16141281339223525000,4002029424845293600],[1924303400883620400,799182088624980700,8366826746721323000,14253625255053304000,16141281339223525000,17725188707009528000,1250460246919467000,26023588519449590,5348726859432207000,4002029424845293600,6102164880094062000,4742778578215475000,8876924567444570473,366962978353611840],[1250460246919467000,8876924567444570473,14253625255053304000,16141281339223525000,1924303400883620400,17725188707009528000,4742778578215475000,13846904447064916285,6102164880094062000,8366826746721323000,16084834641749443000,17025512774010843000,4002029424845293600,799182088624980700,26023588519449590,366962978353611840,5348726859432207000],[14253625255053304000,26023588519449590,4742778578215475000,16084834641749443000,6102164880094062000,366962978353611840,17725188707009528000,799182088624980700,1924303400883620400,16141281339223525000,5591755359500854000,4002029424845293600,1250460246919467000,13846904447064916285,8876924567444570473,5348726859432207000,8366826746721323000,17025512774010843000],[799182088624980700,5591755359500854000,1789832635968548900,8366826746721323000,17025512774010843000,1250460246919467000,26023588519449590,13846904447064916285,1924303400883620400,16084834641749443000,5348726859432207000,14253625255053304000,4742778578215475000,6102164880094062000,8876924567444570473,366962978353611840,17725188707009528000,16141281339223525000,4002029424845293600],[8366826746721323000,4742778578215475000,10316247453530667000,26023588519449590,5348726859432207000,9079109751490757000,799182088624980700,13846904447064916285,14253625255053304000,1789832635968548900,366962978353611840,8876924567444570473,16084834641749443000,17725188707009528000,17025512774010843000,5591755359500854000,16141281339223525000,1924303400883620400,1250460246919467000,6102164880094062000,4002029424845293600],[16084834641749443000,17725188707009528000,16141281339223525000,799182088624980700,14253625255053304000,13712392741217151405,8366826746721323000,17025512774010843000,5348726859432207000,8876924567444570473,4002029424845293600,9079109751490757000,6102164880094062000,1250460246919467000,5591755359500854000,4742778578215475000,1789832635968548900,10316247453530667000,13846904447064916285,366962978353611840,26023588519449590,1924303400883620400],[16084834641749443000,14253625255053304000,1789832635968548900,8876924567444570473,5591755359500854000,366962978353611840,2166474486859326700,17725188707009528000,13712392741217151405,17025512774010843000,4002029424845293600,10316247453530667000,1924303400883620400,26023588519449590,1250460246919467000,9079109751490757000,8366826746721323000,16141281339223525000,799182088624980700,5348726859432207000,13846904447064916285,4742778578215475000,6102164880094062000],[3602127523880426500],[5591755359500854000,8366826746721323000],[6102164880094062000,2233138531352324200,5591755359500854000,8366826746721323000,366962978353611840],[8366826746721323000,13846904447064916285,6102164880094062000,8876924567444570473,5591755359500854000,366962978353611840,2233138531352324200,4742778578215475000,14253625255053304000,1789832635968548900],[13846904447064916285,2233138531352324200,8876924567444570473,366962978353611840,1924303400883620400,1789832635968548900,14253625255053304000,5591755359500854000,16084834641749443000,8366826746721323000,26023588519449590,4742778578215475000,6102164880094062000],[14253625255053304000,4742778578215475000,6102164880094062000,1789832635968548900,12796400626461303056,2233138531352324200,8876924567444570473,26023588519449590,8366826746721323000,366962978353611840,13846904447064916285,1924303400883620400,1250460246919467000,16084834641749443000,5591755359500854000],[4002029424845293600,366962978353611840,1789832635968548900,14253625255053304000,4742778578215475000,13846904447064916285,1924303400883620400,2233138531352324200,1250460246919467000,6102164880094062000,16084834641749443000,12796400626461303056,5591755359500854000,8366826746721323000,26023588519449590,8876924567444570473],[4002029424845293600,14253625255053304000,366962978353611840,1924303400883620400,12796400626461303056,5591755359500854000,16141281339223525000,1789832635968548900,16084834641749443000,26023588519449590,13846904447064916285,8366826746721323000,2233138531352324200,1250460246919467000,6102164880094062000,8876924567444570473,4742778578215475000],[9079109751490757000],[9079109751490757000,10316247453530667000],[10316247453530667000,17725188707009528000,9079109751490757000],[3602127523880426500],[9079109751490757000],[2233138531352324200,9079109751490757000],[2233138531352324200,8366826746721323000,366962978353611840,5591755359500854000,9079109751490757000],[366962978353611840,2233138531352324200,5591755359500854000,8366826746721323000,6102164880094062000,9079109751490757000],[5591755359500854000,9079109751490757000,13846904447064916285,2233138531352324200,366962978353611840,1789832635968548900,14253625255053304000,6102164880094062000,8366826746721323000],[1924303400883620400,13846904447064916285,366962978353611840,14253625255053304000,8366826746721323000,2233138531352324200,16084834641749443000,5591755359500854000,6102164880094062000,9079109751490757000,1789832635968548900],[366962978353611840,8366826746721323000,6102164880094062000,14253625255053304000,2233138531352324200,1924303400883620400,9079109751490757000,5591755359500854000,16084834641749443000,4742778578215475000,13846904447064916285,1789832635968548900],[14253625255053304000,1924303400883620400,26023588519449590,5591755359500854000,16084834641749443000,1789832635968548900,9079109751490757000,13846904447064916285,366962978353611840,6102164880094062000,4742778578215475000,4002029424845293600,2233138531352324200,8366826746721323000],[1789832635968548900,26023588519449590,5591755359500854000,1924303400883620400,16084834641749443000,13846904447064916285,4742778578215475000,9079109751490757000,366962978353611840,8876924567444570473,2233138531352324200,14253625255053304000,8366826746721323000,4002029424845293600,6102164880094062000],[5591755359500854000,16141281339223525000,4742778578215475000,14253625255053304000,26023588519449590,2233138531352324200,13846904447064916285,1789832635968548900,1924303400883620400,16084834641749443000,8366826746721323000,8876924567444570473,6102164880094062000,9079109751490757000,366962978353611840,4002029424845293600],[16141281339223525000,1789832635968548900,16084834641749443000,26023588519449590,8876924567444570473,13846904447064916285,1924303400883620400,2233138531352324200,8366826746721323000,10316247453530667000,5591755359500854000,4742778578215475000,6102164880094062000,366962978353611840,4002029424845293600,9079109751490757000,14253625255053304000],[4002029424845293600,2233138531352324200,1789832635968548900,1924303400883620400,16084834641749443000,1250460246919467000,5591755359500854000,4742778578215475000,14253625255053304000,9079109751490757000,8876924567444570473,10316247453530667000,13846904447064916285,6102164880094062000,8366826746721323000,26023588519449590,12796400626461303056,366962978353611840,16141281339223525000],[]],"selection_redo_history":[]}}},"collapsed":[17725188707009528001,9079109751490757001,3602127523880426501],"commit_hash":"e647ca9f91a5e823137122126fe9e980f65d62ea","document_ptz":{"pan":[-999.7861718531644,-499.944688737096],"tilt":0.0,"zoom":0.940975,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/isometric-fountain.graphite b/demo-artwork/isometric-fountain.graphite index 00e981a431..96d54f36ab 100644 --- a/demo-artwork/isometric-fountain.graphite +++ b/demo-artwork/isometric-fountain.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":15709488322180832347,"output_index":0,"lambda":false}}],"nodes":[[10507084483235320484,{"inputs":[{"Node":{"node_id":9157963288496356916,"output_index":0,"lambda":false}},{"Node":{"node_id":1396768435017101055,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4741515246389989284,{"inputs":[{"Node":{"node_id":14255588039347536657,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4105329493214975815,{"inputs":[{"Node":{"node_id":12931264630175648107,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969916,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16229837691656808412,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[76.83345669875837,107.20900827532364]],[1,[74.85684586229115,93.12923138495351]],[3,[130.01864188394373,17.639788893964138]],[4,[119.2038270691288,10.452135486817724]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[43.97876382175265,-36.84748630595526]],[2,[-7.85185185185199,56.395434425300664]],[3,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12172015233077238737,{"inputs":[{"Node":{"node_id":13287180494862716983,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[15166516760575860563,{"inputs":[{"Node":{"node_id":18085100003956405261,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-115.11453403741598]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10477328336261010694,{"inputs":[{"Node":{"node_id":10189927996178548902,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970024,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3185536512640676801,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4101813853952238986,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5258402282444994019,{"inputs":[{"Node":{"node_id":958845362613832240,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-299.97967195575075,-74.37931084632919]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999984,0.9999999999999984]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3970872207068447290,{"inputs":[{"Node":{"node_id":2077983679740571162,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1.2314781197853364,-154.7967075368743]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.0453527814904993},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.809730022247584,0.552568608414892]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.4027772116731048,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9115451226763736660,{"inputs":[{"Node":{"node_id":7067047867039575315,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.4745098,"green":0.68235296,"blue":0.60784316,"alpha":1.0}],[1.0,{"red":0.5568628,"green":0.7529412,"blue":0.6392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.02103945787988068,0.9859744936226362],"end":[0.6072632276568447,0.28531051081023584],"transform":[864.8574591113804,0.0,0.0,195.5288174655342,170.80386791692547,510.2135732107871]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.4745098,"green":0.68235296,"blue":0.60784316,"alpha":1.0}],[1.0,{"red":0.5568628,"green":0.7529412,"blue":0.6392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.02103945787988068,0.9859744936226362],"end":[0.6072632276568447,0.28531051081023584],"transform":[864.8574591113804,0.0,0.0,195.5288174655342,170.80386791692547,510.2135732107871]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11860177410232537211,{"inputs":[{"Node":{"node_id":5882319123081134737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4197544064668946479,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[578.4678751731759,580.0]],[6,[634.4486372867087,565.0]],[1,[391.8653347947321,595.0]],[5,[615.7883832488644,560.0000000000001]],[2,[363.87495373796554,587.4999999999999]],[3,[345.21469970012123,592.5]],[4,[419.8557158514987,612.5]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[2,2],[6,6],[5,5],[1,1],[4,4]],"end_point":[[6,7],[3,4],[2,3],[4,5],[1,2],[5,6]],"handle_primary":[[5,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[6,0],[2,0],[3,0],[1,0],[4,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14019233912018234740,{"inputs":[{"Node":{"node_id":16069762220015310717,"output_index":0,"lambda":false}},{"Node":{"node_id":17785019773455930267,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5448146793323825465,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[783.730669589464,550.0]],[4,[895.6921938165308,580.0000000000001]],[1,[709.0896534380863,630.0]],[2,[597.1281292110198,599.9999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[1,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4187349759243468746,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[11,[615.6378600823045,431.5390946502058]],[12,[609.0096021947874,496.4609053497942]],[3,[589.8710562414265,497.0754458161865]],[7,[596.3676268861453,491.9835390946502]],[4,[591.18792866941,498.3045267489712]],[16,[616.0751917898693,491.077444156548]],[10,[607.8683127572016,488.3840877914952]],[14,[650.6666666666667,398.2222222222223]],[5,[574.0246913580246,440.2962962962963]],[13,[609.7997256515774,497.6899862825788]],[8,[580.9382716049382,401.9753086419752]],[9,[606.0246913580247,486.803840877915]],[17,[668.3566529492455,433.2510288065844]],[1,[583.5500685871057,499.53360768175577]],[15,[615.4183813443072,491.19341563786]],[2,[533.9259259259258,420.7407407407407]],[6,[594.4362139917694,493.6515775034293]],[18,[618.4910836762688,499.9725651577503]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[4,4],[9,9],[14,14],[2,2],[1,1],[6,6],[12,12],[18,18],[10,10],[17,17],[3,3],[8,8],[13,13],[11,11],[7,7],[5,5],[15,15],[16,16]],"end_point":[[13,14],[6,7],[7,8],[9,10],[1,2],[5,6],[14,15],[16,17],[11,12],[17,18],[3,4],[8,9],[2,3],[15,16],[10,11],[4,5],[18,1],[12,13]],"handle_primary":[[8,[22.10150891632361,44.44444444444463]],[11,[-3.906721536351256,29.62962962962956]],[9,[0.0,0.0]],[15,[0.0,0.0]],[12,[0.0,0.0]],[3,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[7,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[2,[44.005486968450214,35.16049382716062]],[1,[0.0,0.0]],[13,[0.0,0.0]],[10,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]],[18,[-6.945585968035971,18.68277302655963]],[16,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]]],"handle_end":[[12,[0.0,0.0]],[10,[-6.189300411522709,26.732510288065782]],[17,null],[5,null],[4,[21.113854595336193,37.201646090535064]],[11,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[16,[-35.29218106995893,26.337448559670804]],[7,[25.964334705075316,61.47599451303165]],[9,[0.0,0.0]],[14,null],[15,[0.0,0.0]],[2,null],[6,[0.0,0.0]],[8,null],[3,[0.0,0.0]],[1,[48.21947873799752,48.855967078189394]],[18,[7.8075669002856785,13.340866152962064]]],"stroke":[[6,0],[5,0],[13,0],[10,0],[4,0],[17,0],[18,0],[1,0],[15,0],[12,0],[3,0],[16,0],[7,0],[11,0],[14,0],[8,0],[2,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9684750473849891261,{"inputs":[{"Node":{"node_id":70804263053697201,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.96862745,"green":0.8352941,"blue":0.62352943,"alpha":1.0}],[0.5772391174087621,{"red":0.7921569,"green":0.8019608,"blue":0.6450981,"alpha":1.0}],[1.0,{"red":0.6156863,"green":0.76862746,"blue":0.6666667,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1306.217782649108,0.0,0.0,739.9999999999992,405.99999999999864,284.9999999999999]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.96862745,"green":0.8352941,"blue":0.62352943,"alpha":1.0}],[0.5772391174087621,{"red":0.7921569,"green":0.8019608,"blue":0.6450981,"alpha":1.0}],[1.0,{"red":0.6156863,"green":0.76862746,"blue":0.6666667,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1306.217782649108,0.0,0.0,739.9999999999992,405.99999999999864,284.9999999999999]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13531127678140037818,{"inputs":[{"Node":{"node_id":3970872207068447290,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14055195208113082127,{"inputs":[{"Node":{"node_id":2510483139353274965,"output_index":0,"lambda":false}},{"Node":{"node_id":12360435709959435360,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18187802220803838247,{"inputs":[{"Node":{"node_id":11634445349252640936,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BlendMode":"Screen"},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false}],[8015732980153557800,{"inputs":[{"Node":{"node_id":3806549994589872867,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297002,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2791109467690716388,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[783.7306695894646,560.0]],[4,[615.5514854925251,605.0634765625002]],[2,[877.0319397786863,584.9999999999998]],[6,[1044.9742261192855,480.0]],[1,[1156.9357503463468,509.9999999999987]],[5,[596.8912314546803,600.0634765625]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[1,1],[2,2],[6,6],[5,5],[3,3]],"end_point":[[3,4],[4,5],[2,3],[1,2],[5,6],[6,1]],"handle_primary":[[2,[0.0,0.0]],[4,null],[5,[448.0829946646052,-120.0634765625]],[1,[0.0,0.0]],[6,[0.0,0.0]],[3,null]],"handle_end":[[6,[0.0,0.0]],[1,[0.0,0.0]],[2,null],[4,null],[5,null],[3,null]],"stroke":[[4,0],[3,0],[2,0],[6,0],[1,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13747030364552895864,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[709.0896534380864,650.0]],[2,[1231.576766497729,510.00000000000233]],[3,[1231.6308657449686,540.0144958496094]],[5,[709.0896534380863,660.0]],[4,[1156.9357503463516,540.0]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[4,4],[2,2],[5,5],[3,3],[1,1]],"end_point":[[5,1],[3,4],[4,5],[1,2],[2,3]],"handle_primary":[[5,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[2,[0.0,0.0]]],"handle_end":[[2,null],[4,[0.0,0.0]],[3,null],[5,[-2.273736754432321e-13,-2.273736754432321e-13]],[1,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8034980397175569257,{"inputs":[{"Node":{"node_id":4243146970185091100,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,48.820258260598735]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11776939455674933130,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":9684750473849891261,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4968550668755026811,{"inputs":[{"Node":{"node_id":585709295659496998,"output_index":0,"lambda":false}},{"Node":{"node_id":13609749019463823009,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17533670083736420411,{"inputs":[{"Node":{"node_id":7005645574203740491,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.8397260273972602,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9711254481326403,-0.313902431217137],"end":[1.0169100960157926,0.2104743282968058],"transform":[1332.3243231154509,0.0,0.0,297.49602202927537,-250.85405534350912,609.3847245924164]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.8397260273972602,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9711254481326403,-0.313902431217137],"end":[1.0169100960157926,0.2104743282968058],"transform":[1332.3243231154509,0.0,0.0,297.49602202927537,-250.85405534350912,609.3847245924164]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12683405703338263457,{"inputs":[{"Node":{"node_id":12537712543904859919,"output_index":0,"lambda":false}},{"Node":{"node_id":14449710315388146362,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1229809699395562135,{"inputs":[{"Node":{"node_id":2843751023378786714,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-88.44786737074935]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12302362769310895852,{"inputs":[{"Node":{"node_id":15347111149235590492,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.8014369,"green":0.8203125,"blue":0.63446045,"alpha":1.0}],[0.4047792425110607,{"red":0.70046544,"green":0.765625,"blue":0.57421875,"alpha":1.0}],[0.6425390774124099,{"red":0.6,"green":0.70980394,"blue":0.56078434,"alpha":1.0}],[0.8010456340133093,{"red":0.47058824,"green":0.6509804,"blue":0.53333336,"alpha":1.0}],[0.894708599277477,{"red":0.40392157,"green":0.6117647,"blue":0.5176471,"alpha":1.0}],[1.0,{"red":0.26666668,"green":0.5176471,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5027713289486062,0.6166666666666667],"end":[0.502771328948606,-0.08890027761186703],"transform":[-221.0038859407525,2.7065170151646932e-14,-2.814144532415396e-30,-196.7148850451868,1204.8351529382844,632.1259668592257]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.8014369,"green":0.8203125,"blue":0.63446045,"alpha":1.0}],[0.4047792425110607,{"red":0.70046544,"green":0.765625,"blue":0.57421875,"alpha":1.0}],[0.6425390774124099,{"red":0.6,"green":0.70980394,"blue":0.56078434,"alpha":1.0}],[0.8010456340133093,{"red":0.47058824,"green":0.6509804,"blue":0.53333336,"alpha":1.0}],[0.894708599277477,{"red":0.40392157,"green":0.6117647,"blue":0.5176471,"alpha":1.0}],[1.0,{"red":0.26666668,"green":0.5176471,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5027713289486062,0.6166666666666667],"end":[0.502771328948606,-0.08890027761186703],"transform":[-221.0038859407525,2.7065170151646932e-14,-2.814144532415396e-30,-196.7148850451868,1204.8351529382844,632.1259668592257]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15488533792651297821,{"inputs":[{"Node":{"node_id":14019233912018234740,"output_index":0,"lambda":false}},{"Node":{"node_id":183952488591282082,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14791465604033956302,{"inputs":[{"Node":{"node_id":18187802220803838247,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[1147521068928676110,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":938033825024582130,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6821938959315178556,{"inputs":[{"Node":{"node_id":12683405703338263457,"output_index":0,"lambda":false}},{"Node":{"node_id":5326013268137833446,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1490537476612110327,{"inputs":[{"Node":{"node_id":2900504420179573771,"output_index":0,"lambda":false}},{"Node":{"node_id":429913874753911073,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3365825508845848745,{"inputs":[{"Node":{"node_id":7156963182187517674,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.4509804,"green":0.6745098,"blue":0.627451,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008641111778101118,0.8823529411764692],"end":[0.9918085332369128,0.12352941176470456],"transform":[485.1666049839542,0.0,0.0,170.00000000000006,377.80762113533183,514.0000000000002]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.4509804,"green":0.6745098,"blue":0.627451,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008641111778101118,0.8823529411764692],"end":[0.9918085332369128,0.12352941176470456],"transform":[485.1666049839542,0.0,0.0,170.00000000000006,377.80762113533183,514.0000000000002]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9157963288496356916,{"inputs":[{"Node":{"node_id":10188337730058049439,"output_index":0,"lambda":false}},{"Node":{"node_id":1108089904278882840,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3679103217373457623,{"inputs":[{"Node":{"node_id":7910743362843097140,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[13442128106088307772,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13700218159488557234,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2225749123534781340,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1138.2754963085072,550.0000000000001]],[2,[1156.9357503463518,545.0000000000001]],[4,[1110.285115251741,542.5]],[3,[1128.9453692895852,537.5000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[4,4],[2,2]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[4,0],[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11490835759023283071,{"inputs":[{"Node":{"node_id":16923062582661131268,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15517065353723874205,{"inputs":[{"Node":{"node_id":3616319631707471648,"output_index":0,"lambda":false}},{"Node":{"node_id":12548387328300782726,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3014633976566537110,{"inputs":[{"Node":{"node_id":5346759588580719138,"output_index":0,"lambda":false}},{"Node":{"node_id":11860177410232537211,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9981992739451603109,{"inputs":[{"Node":{"node_id":13852123721901366011,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.16078432,"green":0.2901961,"blue":0.16078432,"alpha":0.59765625}],[0.8744713248939212,{"red":0.16078432,"green":0.29411766,"blue":0.16078432,"alpha":0.4453125}],[1.0,{"red":0.16078432,"green":0.2784314,"blue":0.16078432,"alpha":0.2109375}]],"gradient_type":"Radial","start":[0.4917953695426216,3.5168687748431413],"end":[0.4917953695426216,-0.06740196271505461],"transform":[-746.5804084818038,9.142973075533649e-14,0.0,-200.04561753794505,1239.1647878825902,870.5228087689718]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.16078432,"green":0.2901961,"blue":0.16078432,"alpha":0.59765625}],[0.8744713248939212,{"red":0.16078432,"green":0.29411766,"blue":0.16078432,"alpha":0.4453125}],[1.0,{"red":0.16078432,"green":0.2784314,"blue":0.16078432,"alpha":0.2109375}]],"gradient_type":"Radial","start":[0.4917953695426216,3.5168687748431413],"end":[0.4917953695426216,-0.06740196271505461],"transform":[-746.5804084818038,9.142973075533649e-14,0.0,-200.04561753794505,1239.1647878825902,870.5228087689718]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18128923159828618806,{"inputs":[{"Node":{"node_id":1229809699395562135,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}],[0.3267294443765037,{"red":0.45324707,"green":0.734375,"blue":0.5498848,"alpha":1.0}],[0.5703803350862179,{"red":0.72745097,"green":0.7784314,"blue":0.5235294,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4425774215957188,0.8669102822986486],"end":[0.40311512028827146,0.4061330859327766],"transform":[-1171.3007272968916,1.4344296865231056e-13,-2.9954223230091924e-14,733.7843838145138,1307.3912558002485,53.87477268101975]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}],[0.3267294443765037,{"red":0.45324707,"green":0.734375,"blue":0.5498848,"alpha":1.0}],[0.5703803350862179,{"red":0.72745097,"green":0.7784314,"blue":0.5235294,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4425774215957188,0.8669102822986486],"end":[0.40311512028827146,0.4061330859327766],"transform":[-1171.3007272968916,1.4344296865231056e-13,-2.9954223230091924e-14,733.7843838145138,1307.3912558002485,53.87477268101975]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1156213189397385283,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[55.98076211353359,615.0]],[4,[74.64101615137773,610.0]],[2,[65.3108891324556,617.5]],[3,[83.97114317030051,612.4999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[3,4],[1,2],[4,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8891726805381758817,{"inputs":[{"Node":{"node_id":17332567356044944766,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-74.42590421819692,41.71533421869417]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.6752258214141986},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[38.26905454222045,23.541084128981048]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4371138567686068,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12998832508553378533,{"inputs":[{"Node":{"node_id":3122972215852775755,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.46666667,"green":0.7019608,"blue":0.654902,"alpha":1.0}],[0.5,{"red":0.44313726,"green":0.68235296,"blue":0.6313726,"alpha":1.0}],[1.0,{"red":0.40784314,"green":0.627451,"blue":0.6,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0051615000620980345,0.22838569993468072],"end":[0.9899367003601665,0.951087390077165],"transform":[682.3892394899885,0.0,0.0,255.9839039030424,96.4778478979974,545.5369369350916]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.46666667,"green":0.7019608,"blue":0.654902,"alpha":1.0}],[0.5,{"red":0.44313726,"green":0.68235296,"blue":0.6313726,"alpha":1.0}],[1.0,{"red":0.40784314,"green":0.627451,"blue":0.6,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0051615000620980345,0.22838569993468072],"end":[0.9899367003601665,0.951087390077165],"transform":[682.3892394899885,0.0,0.0,255.9839039030424,96.4778478979974,545.5369369350916]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9798215931018813676,{"inputs":[{"Node":{"node_id":10779665858841986661,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9210109719406330381,{"inputs":[{"Node":{"node_id":8612613134760093452,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9409313765472227540,{"inputs":[{"Node":{"node_id":6821938959315178556,"output_index":0,"lambda":false}},{"Node":{"node_id":8463468388280418154,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13920465562072008593,{"inputs":[{"Node":{"node_id":3670594928372882885,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3122972215852775755,{"inputs":[{"Node":{"node_id":10431241258085047322,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3564067978712674849,{"inputs":[{"Node":{"node_id":6777328619777499144,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970075,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2189393878093040029,{"inputs":[{"Node":{"node_id":15478704582542175684,"output_index":0,"lambda":false}},{"Node":{"node_id":17533670083736420411,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10917301734480569398,{"inputs":[{"Node":{"node_id":3455270778005546310,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13946577152348504742,{"inputs":[{"Node":{"node_id":3021739385836969518,"output_index":0,"lambda":false}},{"Node":{"node_id":15876464101883822838,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2510483139353274965,{"inputs":[{"Node":{"node_id":14202574750104046500,"output_index":0,"lambda":false}},{"Node":{"node_id":18128923159828618806,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16847360882244487081,{"inputs":[{"Node":{"node_id":13817976820605296433,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.9490196,"green":0.92156863,"blue":0.7411765,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6476985249926699,0.10666666666666667],"end":[0.9920644403070608,0.4398792234469302],"transform":[1119.6152422706632,0.0,0.0,300.0,555.8268590219807,337.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.9490196,"green":0.92156863,"blue":0.7411765,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6476985249926699,0.10666666666666667],"end":[0.9920644403070608,0.4398792234469302],"transform":[1119.6152422706632,0.0,0.0,300.0,555.8268590219807,337.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7671691070850213967,{"inputs":[{"Node":{"node_id":1658032775659237960,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.22091675,"green":0.4453125,"blue":0.44150904,"alpha":1.0}],[0.6048571201787465,{"red":0.3202623,"green":0.5461857,"blue":0.5423232,"alpha":0.859375}],[0.8131497297124398,{"red":0.41960785,"green":0.64705884,"blue":0.6431373,"alpha":0.71875}],[1.0,{"red":0.43137255,"green":0.61960787,"blue":0.5803922,"alpha":0.3984375}]],"gradient_type":"Radial","start":[0.3691427845059252,-2.109375000000002],"end":[0.05794738050227899,1.089204545454546],"transform":[317.2243186433542,0.0,0.0,109.99999999999989,917.7114317029974,729.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.22091675,"green":0.4453125,"blue":0.44150904,"alpha":1.0}],[0.6048571201787465,{"red":0.3202623,"green":0.5461857,"blue":0.5423232,"alpha":0.859375}],[0.8131497297124398,{"red":0.41960785,"green":0.64705884,"blue":0.6431373,"alpha":0.71875}],[1.0,{"red":0.43137255,"green":0.61960787,"blue":0.5803922,"alpha":0.3984375}]],"gradient_type":"Radial","start":[0.3691427845059252,-2.109375000000002],"end":[0.05794738050227899,1.089204545454546],"transform":[317.2243186433542,0.0,0.0,109.99999999999989,917.7114317029974,729.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16244305414728361140,{"inputs":[{"Node":{"node_id":11547499603328872398,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5294118,"green":0.7490196,"blue":0.65882355,"alpha":1.0}],[1.0,{"red":0.46666667,"green":0.69803923,"blue":0.62352943,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008550171763040293,0.13076923076922986],"end":[0.99103054401049,0.7769230769230764],"transform":[335.8845726811991,0.0,0.0,129.9999999999999,415.12812921102034,414.0000000000001]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5294118,"green":0.7490196,"blue":0.65882355,"alpha":1.0}],[1.0,{"red":0.46666667,"green":0.69803923,"blue":0.62352943,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008550171763040293,0.13076923076922986],"end":[0.99103054401049,0.7769230769230764],"transform":[335.8845726811991,0.0,0.0,129.9999999999999,415.12812921102034,414.0000000000001]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9724746185253267560,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[9,[1222.2466394788075,476.5000000000001]],[8,[1184.9261314031187,486.5]],[11,[1175.5960043841962,474.00000000000006]],[3,[1044.9742261192855,459.0]],[7,[1138.2754963085074,473.99999999999994]],[5,[1259.567147554496,476.49999999999994]],[4,[1184.9261314031187,496.5]],[10,[1194.2562584220411,469.00000000000006]],[6,[1194.256258422041,458.99999999999994]],[1,[1091.6248612138966,461.5]],[2,[1063.63448015713,453.99999999999994]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[5,5],[9,9],[10,10],[2,2],[8,8],[4,4],[3,3],[1,1],[6,6],[7,7]],"end_point":[[9,10],[2,3],[10,11],[1,2],[6,7],[7,8],[3,4],[4,5],[8,9],[5,6]],"handle_primary":[[6,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[9,[0.0,0.0]],[4,[0.0,0.0]],[10,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]]],"handle_end":[[8,[0.0,0.0]],[4,[0.0,0.0]],[9,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[10,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[4,0],[7,0],[1,0],[5,0],[3,0],[2,0],[8,0],[6,0],[9,0],[10,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1108089904278882840,{"inputs":[{"Node":{"node_id":5317925967883407701,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13001069903842109798,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0311603768047983,1.0082447817061446]],[4,[0.15793848790232112,1.0756444843098496]],[1,[0.02964805558748984,0.4451546735104888]],[2,[1.067391838882569,0.5169672994595966]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[2,[0.0,0.0]],[3,[-0.4856258676143469,-0.19200483651697595]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[2,null],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4837219841531371489,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1343.5382907247958,320.00000000000006]],[3,[1007.6537180435968,230.0]],[4,[597.1281292110205,340.0000000000001]],[1,[933.0127018922194,430.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[4,0],[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17785019773455930267,{"inputs":[{"Node":{"node_id":17887542695709892422,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,-6.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10189927996178548902,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[597.1281292110198,630.0]],[2,[298.5640646055101,570.0000000000006]],[6,[709.0896534380864,649.9999999999999]],[1,[298.56406460551045,540.0000000000002]],[3,[597.1281292110203,649.9999999999999]],[5,[709.0896534380867,660.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[6,6],[4,4],[3,3],[5,5],[1,1]],"end_point":[[6,1],[1,2],[5,6],[2,3],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[5,[-2.273736754432321e-13,-10.000000000000114]],[6,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[-5.684341886080801e-13,-19.999999999999886]]],"handle_end":[[5,null],[1,[0.0,0.0]],[2,null],[4,null],[6,[0.0,0.0]],[3,null]],"stroke":[[5,0],[1,0],[6,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13868917743026516656,{"inputs":[{"Node":{"node_id":5258402282444994019,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.9529412,"green":0.83137256,"blue":0.49411765,"alpha":1.0}],[0.5,{"red":0.6039216,"green":0.77254903,"blue":0.6117647,"alpha":1.0}],[1.0,{"red":0.48010254,"green":0.71875,"blue":0.58451086,"alpha":1.0}]],"gradient_type":"Radial","start":[0.990188567383927,0.031432585832447346],"end":[0.003820820042059303,0.7823921936299838],"transform":[506.9103296893421,0.0,0.0,226.3770224587539,740.0631868527961,262.88438481107136]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.9529412,"green":0.83137256,"blue":0.49411765,"alpha":1.0}],[0.5,{"red":0.6039216,"green":0.77254903,"blue":0.6117647,"alpha":1.0}],[1.0,{"red":0.48010254,"green":0.71875,"blue":0.58451086,"alpha":1.0}]],"gradient_type":"Radial","start":[0.990188567383927,0.031432585832447346],"end":[0.003820820042059303,0.7823921936299838],"transform":[506.9103296893421,0.0,0.0,226.3770224587539,740.0631868527961,262.88438481107136]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9393309733761233513,{"inputs":[{"Node":{"node_id":13946577152348504742,"output_index":0,"lambda":false}},{"Node":{"node_id":11895211316848895241,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11634802583144606404,{"inputs":[{"Node":{"node_id":9226731772122225003,"output_index":0,"lambda":false}},{"Node":{"node_id":6868877732348460627,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8165914767449151618,{"inputs":[{"Node":{"node_id":11158238411769751544,"output_index":0,"lambda":false}},{"Node":{"node_id":13942146309185231085,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14400993470150734626,{"inputs":[{"Node":{"node_id":2088390810384907709,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-69.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14202574750104046500,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":1831743139584171612,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15216519480392295991,{"inputs":[{"Node":{"node_id":12019361655085452072,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.01}],[0.6837652235970189,{"red":0.6666667,"green":0.6666667,"blue":0.6666667,"alpha":0.011764706}],[0.7972664177223364,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.53515625}],[1.0,{"red":0.9647059,"green":0.7607843,"blue":0.5568628,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5377061694297174,0.1861799653787184],"end":[0.4291107938423666,0.936951921882358],"transform":[-221.0038859407525,2.7065170151646932e-14,-2.629542652075462e-30,-183.8108080683632,1243.8351529382842,529.2218898824021]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.01}],[0.6837652235970189,{"red":0.6666667,"green":0.6666667,"blue":0.6666667,"alpha":0.011764706}],[0.7972664177223364,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.53515625}],[1.0,{"red":0.9647059,"green":0.7607843,"blue":0.5568628,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5377061694297174,0.1861799653787184],"end":[0.4291107938423666,0.936951921882358],"transform":[-221.0038859407525,2.7065170151646932e-14,-2.629542652075462e-30,-183.8108080683632,1243.8351529382842,529.2218898824021]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1831743139584171612,{"inputs":[{"Node":{"node_id":6569279146800941123,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837],"transform":[340.37037037037106,0.0,0.0,113.03703703703678,837.2962962962961,682.6666666666667]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837],"transform":[340.37037037037106,0.0,0.0,113.03703703703678,837.2962962962961,682.6666666666667]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12360435709959435360,{"inputs":[{"Node":{"node_id":15723520455917422372,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.47843137,"green":0.7294118,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5005723020410011,0.4324498034559026],"end":[0.5007962736667897,0.9150264743070644],"transform":[-992.1891732446936,1.215081295162773e-13,-2.5681507542728992e-14,629.116269946799,1261.8846407334754,149.34195758136912]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.47843137,"green":0.7294118,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5005723020410011,0.4324498034559026],"end":[0.5007962736667897,0.9150264743070644],"transform":[-992.1891732446936,1.215081295162773e-13,-2.5681507542728992e-14,629.116269946799,1261.8846407334754,149.34195758136912]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2077983679740571162,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-137.83320996790803,20.957167389569804]],[4,[-124.49987663457466,76.24680898300153]],[2,[-130.2776544123526,8.793446239014884]],[3,[-119.7591358938339,55.2367451774976]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[-5.037037037036939,-9.952135486817731]],[1,[0.0,0.0]],[4,[6.814814814814781,36.49116345166567]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2058192342619930156,{"inputs":[{"Node":{"node_id":2155997486525176376,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,-5.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10181153433637856462,{"inputs":[{"Node":{"node_id":9150078008481575131,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[187.102540378,187.10254037799996]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.205080756,373.205080756]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11579925754926059876,{"inputs":[{"Node":{"node_id":15670426414376277308,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1175.596004383839,384.99999999999983]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[410.52558883186134,109.99999999999974]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9138781233934614517,{"inputs":[{"Node":{"node_id":8073807569018624098,"output_index":0,"lambda":false}},{"Node":{"node_id":4884180935153120645,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12370676490908282512,{"inputs":[{"Node":{"node_id":9666682009015049330,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.643741535074667,{"red":0.27450982,"green":0.49411765,"blue":0.5137255,"alpha":0.5019608}],[0.8214781907174007,{"red":0.27450982,"green":0.5019608,"blue":0.52156866,"alpha":0.17254902}],[1.0,{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569}]],"gradient_type":"Linear","start":[0.8142178455184718,0.014814814814815058],"end":[0.8217337510617708,0.33779273207824057],"transform":[1667.7715501019673,0.0,0.0,377.053346257955,-488.4641717793936,466.6341200282825]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.643741535074667,{"red":0.27450982,"green":0.49411765,"blue":0.5137255,"alpha":0.5019608}],[0.8214781907174007,{"red":0.27450982,"green":0.5019608,"blue":0.52156866,"alpha":0.17254902}],[1.0,{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569}]],"gradient_type":"Linear","start":[0.8142178455184718,0.014814814814815058],"end":[0.8217337510617708,0.33779273207824057],"transform":[1667.7715501019673,0.0,0.0,377.053346257955,-488.4641717793936,466.6341200282825]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16261620049358949344,{"inputs":[{"Node":{"node_id":16059265180575745658,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[7340659059180155803,{"inputs":[{"Node":{"node_id":7171713123860587892,"output_index":0,"lambda":false}},{"Node":{"node_id":13531127678140037818,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6589978257209505606,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[709.0896534380868,470.0]],[3,[821.0511776651532,440.0000000000001]],[1,[709.0896534380868,410.0000000000001]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[2,3],[1,2],[3,1]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16398743435291795904,{"inputs":[{"Node":{"node_id":5574499968250848265,"output_index":0,"lambda":false}},{"Node":{"node_id":4741515246389989284,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8181290118694677328,{"inputs":[{"Node":{"node_id":5540780316862276409,"output_index":0,"lambda":false}},{"Node":{"node_id":17638504852426495381,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13837327017498431546,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[10,[914.3524478543748,464.0]],[3,[746.4101615137755,574.0]],[12,[1287.5575286112626,593.9999999999999]],[5,[802.3909236273088,543.9999999999999]],[7,[634.4486372867094,569.0000000000001]],[8,[727.7499074759312,594.0]],[6,[765.0704155516199,533.9999999999999]],[9,[1063.63448015713,504.0000000000001]],[2,[774.4005425705421,566.5]],[4,[718.4197804570089,566.5]],[11,[858.3716857408418,479.00000000000006]],[1,[662.4390183434757,536.5]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[11,11],[1,1],[7,7],[8,8],[5,5],[9,9],[2,2],[4,4],[10,10],[3,3],[6,6]],"end_point":[[8,9],[11,12],[1,2],[6,7],[4,5],[9,10],[2,3],[10,11],[3,4],[7,8],[5,6]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]],[6,[0.0,0.0]],[11,[0.0,0.0]],[9,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[8,[0.0,0.0]],[4,[0.0,0.0]],[9,[0.0,0.0]],[1,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[7,0],[9,0],[11,0],[10,0],[2,0],[6,0],[1,0],[3,0],[8,0],[4,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[183952488591282082,{"inputs":[{"Node":{"node_id":17965270694495451178,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,-6.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1032659476619711014,{"inputs":[{"Node":{"node_id":3014633976566537110,"output_index":0,"lambda":false}},{"Node":{"node_id":2452294403891427489,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5670058004691708784,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[-117.83320996790816,-58.65991650497199]],[4,[-115.759135893834,30.3564064604534]],[3,[-130.2776544123526,8.793446239014884]],[1,[-109.83320996790816,-37.64985269946783]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[4,[0.0,0.0]],[3,[-0.7407407407406481,44.23171327474574]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.7407407407406481,-44.23171327474574]],[1,[0.0,0.0]],[4,[-12.740740740740762,23.22164946924204]]],"stroke":[[4,0],[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11221222899304956410,{"inputs":[{"Node":{"node_id":5448146793323825465,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8242413775403456296,{"inputs":[{"Node":{"node_id":9138781233934614517,"output_index":0,"lambda":false}},{"Node":{"node_id":9115451226763736660,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15157035456876170143,{"inputs":[{"Node":{"node_id":17059035448296015006,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9150078008481575131,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.5]],[1,[0.5,0.0]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[3,3],[2,2]],"end_point":[[1,2],[2,3],[4,1],[3,4]],"handle_primary":[[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]]],"handle_end":[[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15775513677915164685,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[12,[721.9094650205761,611.3799725651577]],[15,[763.4567901234569,605.6296296296294]],[9,[709.3552812071331,611.4970278920897]],[7,[692.1871665904588,615.6720012193263]],[8,[701.8247218411828,611.4580094497792]],[5,[662.6063100137173,612.5432098765428]],[14,[728.493827160494,609.9753086419753]],[16,[726.2990397805214,601.9862825788753]],[10,[709.413808870599,616.4718792866942]],[18,[725.5089163237311,594.6117969821673]],[6,[695.3964334705074,609.7777777777776]],[11,[713.6278006401462,612.5505258344765]],[4,[682.3593964334707,606.4197530864195]],[2,[667.3909465020577,593.3827160493828]],[1,[699.8518518518516,598.1234567901233]],[17,[749.8271604938273,587.4567901234568]],[13,[734.8148148148149,620.9492455418381]],[3,[699.7421124828531,603.0617283950616]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[5,5],[10,10],[6,6],[15,15],[11,11],[4,4],[3,3],[2,2],[8,8],[14,14],[18,18],[16,16],[12,12],[17,17],[1,1],[9,9],[7,7],[13,13]],"end_point":[[17,18],[4,5],[6,7],[1,2],[11,12],[7,8],[16,17],[9,10],[13,14],[15,16],[2,3],[3,4],[18,1],[5,6],[10,11],[8,9],[12,13],[14,15]],"handle_primary":[[14,[-0.1771601410563335,-2.331086581557088]],[3,[0.0,0.0]],[12,[0.6886396813392821,0.35058484628291353]],[9,[1.0398530837227329,0.17152215813985094]],[15,[-15.992684042066571,-5.647919524462736]],[2,[5.399176954732297,6.584362139917744]],[4,[-6.038618148571572,2.2123832635880945]],[13,[-3.101966163694442,-4.096936442615402]],[1,[-13.651577503429507,-4.016460905349504]],[5,[0.0,0.0]],[8,[0.0,0.0]],[6,[0.0,0.0]],[17,[-7.648317030623161,4.388047332817109]],[18,[-0.0877914951989851,0.0]],[11,[0.9510922553114368,-0.40840938602514143]],[10,[2.71082158531226,-3.275875783141601]],[7,[0.0,0.0]],[16,[0.0,0.0]]],"handle_end":[[16,[-5.977212841894016,7.381559383908893]],[9,null],[5,[-8.69135802469134,3.3580246913579685]],[6,[4.13595488492615,-4.1749733272365575]],[17,null],[12,[-6.90626428898031,-2.3996342021031296]],[14,[-22.51851851851859,-0.614540466392441]],[8,[-3.7847889041303233,-0.6242950769699291]],[2,[0.0,0.0]],[1,[8.559670781892919,2.502057613168745]],[11,[-1.2025737194898056,-0.6122274594622468]],[10,null],[18,[0.0,0.0]],[7,[-5.1358024691359105,5.530864197530718]],[4,[0.0,0.0]],[3,[6.038618148571345,-2.2123832635879808]],[15,[2.8483462886752022,1.1315348270080676]],[13,[-0.5267489711934559,1.053497942386798]]],"stroke":[[10,0],[3,0],[5,0],[12,0],[6,0],[16,0],[9,0],[1,0],[2,0],[15,0],[18,0],[4,0],[17,0],[8,0],[13,0],[11,0],[7,0],[14,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6569279146800941123,{"inputs":[{"Node":{"node_id":15775513677915164685,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,26.66666666666663]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7799679303995308634,{"inputs":[{"Node":{"node_id":4323461535289334196,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2881239077602364410,{"inputs":[{"Node":{"node_id":9641315149170593327,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.47058824,"green":0.73333335,"blue":0.6117647,"alpha":0.296875}],[0.2777869967086046,{"red":0.46666667,"green":0.72156864,"blue":0.6,"alpha":0.70703125}],[0.36183495566130336,{"red":0.46666667,"green":0.72156864,"blue":0.6039216,"alpha":0.80078125}],[0.6507416725274494,{"red":0.4745098,"green":0.7294118,"blue":0.5921569,"alpha":0.23137255}],[1.0,{"red":0.47058824,"green":0.7176471,"blue":0.6039216,"alpha":0.18359375}]],"gradient_type":"Linear","start":[0.94412535478592,0.7803313772362046],"end":[0.3197649256748516,0.1688059143071423],"transform":[484.7509931080075,0.0,0.0,412.6696147733683,724.2574339293515,434.66666666666674]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.47058824,"green":0.73333335,"blue":0.6117647,"alpha":0.296875}],[0.2777869967086046,{"red":0.46666667,"green":0.72156864,"blue":0.6,"alpha":0.70703125}],[0.36183495566130336,{"red":0.46666667,"green":0.72156864,"blue":0.6039216,"alpha":0.80078125}],[0.6507416725274494,{"red":0.4745098,"green":0.7294118,"blue":0.5921569,"alpha":0.23137255}],[1.0,{"red":0.47058824,"green":0.7176471,"blue":0.6039216,"alpha":0.18359375}]],"gradient_type":"Linear","start":[0.94412535478592,0.7803313772362046],"end":[0.3197649256748516,0.1688059143071423],"transform":[484.7509931080075,0.0,0.0,412.6696147733683,724.2574339293515,434.66666666666674]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2088390810384907709,{"inputs":[{"Node":{"node_id":14341957170885045113,"output_index":0,"lambda":false}},{"Node":{"node_id":9323583246068171750,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2062662104423219162,{"inputs":[{"Node":{"node_id":10810157408196882043,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970144,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6556170892691431702,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3365825508845848745,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11595529463602678384,{"inputs":[{"Node":{"node_id":4398598693761352299,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10810157408196882043,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1231.576766497731,510.00000000000233]],[3,[1306.217782649106,559.9999999999999]],[2,[1231.5767664977286,540.0]],[4,[1306.2177826491084,530.0000000000023]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[2,3],[1,2],[4,1],[3,4]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[-6.821210263296962e-13,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4323461535289334196,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[597.1281292110198,630.0]],[3,[597.1281292110203,649.9999999999999]],[1,[634.4486372867091,639.9999999999999]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,1.1368683772161605e-13]],[1,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16807867745126764195,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.5]],[3,[0.5,1.0]],[1,[0.5,0.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[1,2],[4,1],[3,4],[2,3]],"handle_primary":[[3,[-0.275892388889507,0.0]],[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[4,[0.0,-0.275892388889507]]],"handle_end":[[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17881728913029763313,{"inputs":[{"Node":{"node_id":16793555741218543212,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15709488322180832347,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7838724497953148309,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1270.0,635.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.5529412,"green":0.78039217,"blue":0.70980394,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14330881008352607546,{"inputs":[{"Node":{"node_id":11595529463602678384,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[0.7251131221719457,{"red":0.39215687,"green":0.6156863,"blue":0.5921569,"alpha":0.5019608}],[1.0,{"red":0.5058824,"green":0.7294118,"blue":0.6392157,"alpha":0.0}]],"gradient_type":"Linear","start":[0.3284027974661107,0.17846479235419954],"end":[0.3331499206771569,0.5505113976358942],"transform":[842.6155846750064,0.0,0.0,225.77816544354573,370.28268480418546,448.7065465860055]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[0.7251131221719457,{"red":0.39215687,"green":0.6156863,"blue":0.5921569,"alpha":0.5019608}],[1.0,{"red":0.5058824,"green":0.7294118,"blue":0.6392157,"alpha":0.0}]],"gradient_type":"Linear","start":[0.3284027974661107,0.17846479235419954],"end":[0.3331499206771569,0.5505113976358942],"transform":[842.6155846750064,0.0,0.0,225.77816544354573,370.28268480418546,448.7065465860055]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[70804263053697201,{"inputs":[{"Node":{"node_id":13942787566051910019,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[3.410605131648481e-13,3.410605131648481e-13]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1268.999999999999,634.9999999999992]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[194878846429432339,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[522.4871130596428,380.00000000000006]],[1,[671.7691453623979,420.00000000000006]],[2,[559.8076211353317,450.0000000000001]],[3,[410.5255888325765,410.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[2,2],[3,3]],"end_point":[[4,1],[3,4],[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3806549994589872867,{"inputs":[{"Node":{"node_id":11429712783984224234,"output_index":0,"lambda":false}},{"Node":{"node_id":11479492521093639512,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[326112971739898070,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[597.1281292110207,610.0]],[1,[559.8076211353317,610.0]],[2,[578.4678751731759,615.0]],[4,[578.4678751731759,605.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[2,2],[1,1]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[-1.1368683772161605e-13,-1.1368683772161605e-13]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[1,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4898866541060902381,{"inputs":[{"Node":{"node_id":7799679303995308634,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.39520264,"green":0.72265625,"blue":0.56068987,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.39520264,"green":0.72265625,"blue":0.56068987,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10779665858841986661,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[122.7099999086348,-47.60198818628578]],[1,[98.808765340734,-112.29086885060116]],[2,[97.17913571110468,-93.86098831945704]],[4,[127.45074064937567,-74.14101615113282]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4]],"end_point":[[3,4],[4,1],[2,3],[1,2]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[-5.92592592592608,-17.692685309898252]]],"stroke":[[4,0],[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7952384394377946257,{"inputs":[{"Node":{"node_id":9935922395919478146,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.15303737473719153,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.45863166412588735,{"red":0.7921569,"green":0.8509804,"blue":0.58431375,"alpha":1.0}],[0.6476150394844262,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5550432633852689,0.9407795494396834],"end":[0.3799981368712242,0.012217625842737945],"transform":[548.4300072318631,0.0,0.0,524.1079289375543,1123.2642857142864,356.5966454230286]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.15303737473719153,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.45863166412588735,{"red":0.7921569,"green":0.8509804,"blue":0.58431375,"alpha":1.0}],[0.6476150394844262,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5550432633852689,0.9407795494396834],"end":[0.3799981368712242,0.012217625842737945],"transform":[548.4300072318631,0.0,0.0,524.1079289375543,1123.2642857142864,356.5966454230286]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9666682009015049330,{"inputs":[{"Node":{"node_id":2791109467690716388,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[958845362613832240,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[1382.2744061508483,470.3793108463301]],[2,[971.7488173182714,480.37931084632993]],[1,[971.7488173182716,440.37931084632993]],[6,[1382.2744061508486,330.3793108463298]],[4,[1195.671865772399,520.3793108463286]],[3,[1195.6718657723986,420.3793108463287]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[2,2],[4,4],[1,1],[3,3],[5,5]],"end_point":[[6,1],[2,3],[5,6],[3,4],[1,2],[4,5]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[1,0],[6,0],[4,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13817976820605296433,{"inputs":[{"Node":{"node_id":4837219841531371489,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15595689026000825531,{"inputs":[{"Node":{"node_id":2785423879796980286,"output_index":0,"lambda":false}},{"Node":{"node_id":12172015233077238737,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17433098630591807963,{"inputs":[{"Node":{"node_id":11490835759023283071,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3670594928372882885,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[559.8076211353316,450.00000000000006]],[4,[559.8076211353317,490.00000000000006]],[1,[671.7691453623979,459.99999999999994]],[2,[671.7691453623979,420.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15723520455917422372,{"inputs":[{"Node":{"node_id":4187349759243468746,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,75.48692492726542]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13743495762122910279,{"inputs":[{"Node":{"node_id":322234583139821148,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.30980393,"green":0.54901963,"blue":0.5568628,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0487255567160787,0.14016773560900295],"end":[0.9275384787415986,0.5063561479050618],"transform":[117.20355654603016,0.0,0.0,62.809196653128225,646.2891914581903,455.19617712971046]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.30980393,"green":0.54901963,"blue":0.5568628,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0487255567160787,0.14016773560900295],"end":[0.9275384787415986,0.5063561479050618],"transform":[117.20355654603016,0.0,0.0,62.809196653128225,646.2891914581903,455.19617712971046]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17250040304106119844,{"inputs":[{"Node":{"node_id":6142412830271644616,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12548387328300782726,{"inputs":[{"Node":{"node_id":764189229787475993,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7883568080179962,0.844472024944475],"end":[0.14631144508187544,0.21558322991428724],"transform":[468.8142261841201,0.0,0.0,125.61839330625676,23.40711309206017,381.9187810343939]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7883568080179962,0.844472024944475],"end":[0.14631144508187544,0.21558322991428724],"transform":[468.8142261841201,0.0,0.0,125.61839330625676,23.40711309206017,381.9187810343939]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7339104629465306715,{"inputs":[{"Node":{"node_id":16229837691656808412,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9226731772122225003,{"inputs":[{"Node":{"node_id":8884703330021429739,"output_index":0,"lambda":false}},{"Node":{"node_id":9695624216919732577,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10188337730058049439,{"inputs":[{"Node":{"node_id":1268775104597510914,"output_index":0,"lambda":false}},{"Node":{"node_id":11076863066321508991,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15898396405528650339,{"inputs":[{"Node":{"node_id":16807867745126764195,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1156.935750346027,389.9999999999999]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4046495708656778502,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[111.05567892098054,93.44803081206965]],[3,[130.0186418839436,64.45168544306966]],[1,[106.87778599676416,75.02595252015249]],[4,[122.38078180163905,40.36997488237489]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[2,2],[1,1]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9771562518763748677,{"inputs":[{"Node":{"node_id":14234384001010789008,"output_index":0,"lambda":false}},{"Node":{"node_id":12554549497938935061,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11479492521093639512,{"inputs":[{"Node":{"node_id":15216519480392295991,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false}],[15300421479077882117,{"inputs":[{"Node":{"node_id":7030585744407664630,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4887570735033124574,{"inputs":[{"Node":{"node_id":9210109719406330381,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.39607844,"green":0.57322305,"blue":0.627451,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7128143377734406,-0.305555555555558],"end":[0.6180751590210081,0.944444444444442],"transform":[348.32474203976165,0.0,0.0,120.0,901.7091296728228,809.666666666667]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.39607844,"green":0.57322305,"blue":0.627451,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7128143377734406,-0.305555555555558],"end":[0.6180751590210081,0.944444444444442],"transform":[348.32474203976165,0.0,0.0,120.0,901.7091296728228,809.666666666667]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5365849201631468915,{"inputs":[{"Node":{"node_id":10849502918952703647,"output_index":0,"lambda":false}},{"Node":{"node_id":2310170068575553369,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14483299526002574058,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[933.0127018922192,649.9999999999999]],[4,[839.7114317029976,625.0000000000001]],[1,[1156.9357503463516,540.0]],[2,[1156.9357503463518,589.9999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[1,1],[3,3]],"end_point":[[1,2],[4,1],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[2.273736754432321e-13,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14234384001010789008,{"inputs":[{"Node":{"node_id":4757672276235057645,"output_index":0,"lambda":false}},{"Node":{"node_id":8863202447825570192,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16793555741218543212,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[410.5255888325765,450.0000000000001]],[2,[634.4486372867091,470.00000000000006]],[4,[597.1281292110201,559.9999999999999]],[3,[783.7306695894638,509.9999999999999]],[5,[298.56406460551005,480.00000000000006]],[1,[559.7618537735666,489.9877366723751]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[5,5],[6,6],[2,2],[3,3],[1,1]],"end_point":[[1,2],[5,6],[2,3],[3,4],[6,1],[4,5]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]],[2,[149.28203230275471,39.99999999999983]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[1,null],[4,[0.0,0.0]],[2,null],[3,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[3,0],[1,0],[5,0],[2,0],[6,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2209276411833629008,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[0.1274934116812796,0.166664669692703]],[4,[0.0,0.5]],[2,[1.0,0.5]],[3,[0.5,1.0]],[6,[0.5000000000000018,0.10816199860278752]],[1,[0.8725092774641316,0.16666767219504575]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[2,2],[5,5],[1,1],[6,6],[3,3]],"end_point":[[6,1],[2,3],[1,2],[4,5],[5,6],[3,4]],"handle_primary":[[6,[0.22701785858837376,9.09188805575667e-7]],[4,[0.0,-0.12799231715991943]],[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]],[1,[0.07925873631249913,0.08849560350574948]],[5,[0.14548887396141374,-0.05850358027814341]]],"handle_end":[[3,[0.0,0.27589238888950707]],[1,[0.0,-0.12799086965193351]],[4,[-0.07926033448372466,0.08849596308181285]],[5,null],[6,null],[2,[0.27589238888950707,0.0]]],"stroke":[[2,0],[1,0],[6,0],[5,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5434119356821575534,{"inputs":[{"Node":{"node_id":1490537476612110327,"output_index":0,"lambda":false}},{"Node":{"node_id":16261620049358949344,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2032185045476767535,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7340659059180155803,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15261165353096835967,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[615.7883832488644,605.0000000000001]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[5,[597.1281292110198,599.9999999999999]],[1,[1156.9357503463468,509.9999999999987]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[2,2],[4,4],[6,6],[5,5],[1,1]],"end_point":[[4,5],[3,4],[5,6],[6,1],[2,3],[1,2]],"handle_primary":[[5,[447.84609690826574,-119.99999999999989]],[1,[0.0,0.0]],[3,null],[2,[0.0,0.0]],[4,null],[6,[0.0,0.0]]],"handle_end":[[4,null],[5,null],[1,[0.0,0.0]],[2,null],[3,null],[6,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[6,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1658032775659237960,{"inputs":[{"Node":{"node_id":14483299526002574058,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297003,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18185020559178852986,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4847316728405535983,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6785205785632793666,{"inputs":[{"Node":{"node_id":10917301734480569398,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49803922,"green":0.73333335,"blue":0.6666667,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.49803922,"green":0.73333335,"blue":0.6666667,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4884180935153120645,{"inputs":[{"Node":{"node_id":11221222899304956410,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4094933109340779,0.6607209771464397],"end":[0.921423168424672,0.39536705519277415],"transform":[351.6106696380906,0.0,0.0,94.21379497969252,533.0177827301501,601.7509693203432]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4094933109340779,0.6607209771464397],"end":[0.921423168424672,0.39536705519277415],"transform":[351.6106696380906,0.0,0.0,94.21379497969252,533.0177827301501,601.7509693203432]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7838724497953148309,{"inputs":[{"Node":{"node_id":9771562518763748677,"output_index":0,"lambda":false}},{"Node":{"node_id":2058192342619930156,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17873337220577786871,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[615.7883832488646,605.0000000000001]],[1,[1156.9357503463468,509.9999999999987]],[6,[1044.9742261192855,480.0]],[5,[597.1281292110198,599.9999999999999]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[5,5],[3,3],[2,2],[6,6],[1,1]],"end_point":[[3,4],[6,1],[1,2],[4,5],[5,6],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]],[3,null],[4,null]],"handle_end":[[1,[0.0,0.0]],[5,null],[3,null],[6,[0.0,0.0]],[4,null],[2,null]],"stroke":[[4,0],[6,0],[1,0],[2,0],[3,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7861616450605235840,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.3813269975649,420.0420583039525]],[2,[1343.5382907247954,439.792314581573]],[3,[1268.8972745734186,460.00000000000233]],[4,[1231.5767664977302,450.00000000000233]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[2,2],[1,1]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[4,0],[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8463468388280418154,{"inputs":[{"Node":{"node_id":9993538712344947860,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":74.5472},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[15670426414376277308,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[1,2],[3,4],[2,3],[4,1]],"handle_primary":[[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]]],"handle_end":[[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]]],"stroke":[[2,0],[1,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2292399603649738346,{"inputs":[{"Node":{"node_id":16510804133693080967,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9127081032507663,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.6216293634586009,-3.518518518518513],"end":[0.4157051295501385,0.32812296023903675],"transform":[1332.3243231154509,0.0,0.0,297.49602202927537,-250.85405534350912,609.3847245924164]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9127081032507663,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.6216293634586009,-3.518518518518513],"end":[0.4157051295501385,0.32812296023903675],"transform":[1332.3243231154509,0.0,0.0,297.49602202927537,-250.85405534350912,609.3847245924164]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4069478660487729695,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[-23.148253406408465,116.21917209054972]],[4,[55.822325899541134,88.0419325229343]],[3,[59.855160808698834,104.19217420861494]],[1,[-22.15328312748764,98.9633432080564]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[1,1],[2,2]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[-27.645547736903644,17.139482007743737]],[4,[24.844120782255654,5.22590107758802]],[1,[0.0,0.0]]],"stroke":[[4,0],[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5326013268137833446,{"inputs":[{"Node":{"node_id":12875121980058869686,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.5005297191519419,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.8104119804726813,{"red":0.5686275,"green":0.69411767,"blue":0.5372549,"alpha":0.87890625}],[1.0,{"red":0.3529412,"green":0.5647059,"blue":0.57254905,"alpha":0.296875}]],"gradient_type":"Radial","start":[0.0015840517590797742,0.9627709247339196],"end":[1.0370671897237005,-1.554312234475219e-14],"transform":[2645.364887303592,0.0,0.0,759.3749999999876,-1035.2336294696888,690.8750000000118]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.5005297191519419,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.8104119804726813,{"red":0.5686275,"green":0.69411767,"blue":0.5372549,"alpha":0.87890625}],[1.0,{"red":0.3529412,"green":0.5647059,"blue":0.57254905,"alpha":0.296875}]],"gradient_type":"Radial","start":[0.0015840517590797742,0.9627709247339196],"end":[1.0370671897237005,-1.554312234475219e-14],"transform":[2645.364887303592,0.0,0.0,759.3749999999876,-1035.2336294696888,690.8750000000118]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12537712543904859919,{"inputs":[{"Node":{"node_id":4968550668755026811,"output_index":0,"lambda":false}},{"Node":{"node_id":8508454285877707748,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12469956387875933942,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":2881239077602364410,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13207576193421440093,{"inputs":[{"Node":{"node_id":12930243402848966353,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5574499968250848265,{"inputs":[{"Node":{"node_id":11776939455674933130,"output_index":0,"lambda":false}},{"Node":{"node_id":5925268772265373737,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18371793711669837037,{"inputs":[{"Node":{"node_id":7861616450605235840,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.00000000000006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10742991645899166287,{"inputs":[{"Node":{"node_id":1104068854328504126,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-114.0000000000026]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18085100003956405261,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[19,[530.7654320987656,499.55555555555566]],[2,[476.9512618480758,444.1904085078117]],[6,[499.77650172698026,445.9388618767647]],[10,[524.0493827160495,487.1111111111112]],[1,[510.41975308641986,500.1481481481481]],[12,[533.8924329970387,433.46495092641567]],[5,[497.38271604938257,447.60493827160496]],[16,[530.3703703703702,486.71604938271594]],[15,[556.7578325004595,420.13017723423656]],[14,[552.9705625612692,418.19081042008474]],[3,[480.5925925925926,440.2962962962962]],[11,[531.5890484844431,432.90541944395505]],[9,[505.311372421164,416.4524664944526]],[4,[511.55555555555554,490.2222222222222]],[8,[502.0960349862431,417.9179038759178]],[17,[565.2914244954804,444.3855996237166]],[13,[526.0246913580248,490.07407407407413]],[7,[515.1604938271604,486.716049382716]],[18,[568.2339832275112,446.0155371619765]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[4,4],[13,13],[16,16],[5,5],[17,17],[8,8],[12,12],[3,3],[18,18],[7,7],[14,14],[2,2],[11,11],[10,10],[6,6],[9,9],[19,19],[1,1],[15,15]],"end_point":[[5,6],[6,7],[7,8],[18,19],[12,13],[8,9],[3,4],[14,15],[17,18],[13,14],[9,10],[11,12],[16,17],[19,1],[1,2],[15,16],[10,11],[2,3],[4,5]],"handle_primary":[[19,[-1.5204271954055455,4.429070525747022]],[15,[-11.459519915000214,23.15277176924241]],[5,[-10.016557406305251,-15.024836109457851]],[12,[-5.082537215847424,18.7049831985629]],[3,[21.32824309569804,17.329197515254634]],[9,[11.197015798182122,18.39034937970939]],[4,[0.0,0.0]],[17,[27.324497401397252,-21.15032331824051]],[2,[-17.16805625160663,-20.28383937076643]],[1,[-9.283950617284065,-12.246913580246884]],[18,[-19.30865594294653,18.299752742610902]],[8,[-8.936088730151937,-20.93774746663439]],[10,[0.0,0.0]],[7,[0.0,0.0]],[14,[15.260998855532309,-21.888591759537466]],[13,[0.0,0.0]],[16,[0.0,0.0]],[11,[7.784237194372736,-22.222909722529664]],[6,[3.9272019767233246,4.629039357803151]]],"handle_end":[[16,[-28.402535606591755,21.984770746653737]],[6,[0.7901234567898427,-16.197530864197745]],[7,[18.59187624528363,43.5617887769169]],[13,[-15.260998855532534,21.888591759537743]],[2,[-22.123456790123555,-17.97530864197529]],[18,[4.54320987654296,-13.23456790123464]],[1,[28.522359190346833,33.698803394714844]],[10,[-7.784237194372736,22.22290972252955]],[9,[0.7901234567898427,-21.135802469135857]],[3,[-3.111111111111086,-12.0]],[19,[2.7053847913285836,3.5688054694122116]],[5,[-12.032856371187677,-14.183269935989983]],[14,[11.286699158099054,-22.803605349427187]],[12,[3.7530864197531177,-16.59259259259261]],[8,[-11.197015798182008,-18.39034937970939]],[17,[19.435079545528083,-18.419570542198244]],[15,[4.54320987654296,-11.851851851852018]],[4,[13.03703703703701,19.555555555555543]],[11,[5.082537215847424,-18.704983198562843]]],"stroke":[[10,0],[1,0],[19,0],[12,0],[13,0],[4,0],[8,0],[17,0],[9,0],[15,0],[6,0],[7,0],[3,0],[16,0],[18,0],[14,0],[11,0],[2,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8612613134760093452,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[802.3909236273086,635.0000000000001]],[1,[933.0127018922192,650.0]],[2,[839.7114317029974,625.0000000000001]],[4,[933.0127018922192,670.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[2,2],[1,1]],"end_point":[[1,2],[4,1],[3,4],[2,3]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12931264630175648107,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[11,[1492.8203230275508,480.0000000000001]],[6,[298.56406460551034,520.0000000000002]],[8,[709.0896534380863,649.9999999999999]],[9,[1231.576766497731,510.0000000000024]],[10,[1306.2177826491086,530.0000000000023]],[2,[1531.2435565296985,470.3]],[5,[261.2435565296994,530.0000000000001]],[4,[261.24355652969956,704.9999999999997]],[1,[1492.820323027551,460.0000000000025]],[3,[1531.243556529699,704.9999999999997]],[7,[298.56406460551045,540.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[1,1],[11,11],[10,10],[3,3],[7,7],[5,5],[6,6],[2,2],[9,9],[4,4],[8,8]],"end_point":[[3,4],[9,10],[11,1],[1,2],[2,3],[7,8],[4,5],[5,6],[6,7],[8,9],[10,11]],"handle_primary":[[6,[0.0,0.0]],[10,[0.0,0.0]],[3,[0.0,0.0]],[9,[0.0,0.0]],[7,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[11,[0.0,0.0]],[8,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[5,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[11,[0.0,0.0]],[6,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[9,[0.0,0.0]]],"stroke":[[1,0],[3,0],[6,0],[8,0],[9,0],[2,0],[7,0],[5,0],[11,0],[10,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4757672276235057645,{"inputs":[{"Node":{"node_id":4924169570021915606,"output_index":0,"lambda":false}},{"Node":{"node_id":14400993470150734626,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15134939288287905620,{"inputs":[{"Node":{"node_id":8958782938691501404,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10989897386232385465,{"inputs":[{"Node":{"node_id":10507084483235320484,"output_index":0,"lambda":false}},{"Node":{"node_id":7339104629465306715,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5540780316862276409,{"inputs":[{"Node":{"node_id":1032659476619711014,"output_index":0,"lambda":false}},{"Node":{"node_id":13743495762122910279,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9695624216919732577,{"inputs":[{"Node":{"node_id":1156213189397385283,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16852951849051795674,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[1156.9357503463525,530.0]],[3,[933.0127018922192,650.0]],[4,[933.0127018922192,670.0]],[6,[1343.5382907247958,520.0]],[7,[1306.2177826491068,529.9999999999972]],[8,[1231.576766497731,510.0000000000022]],[2,[1156.9357503463518,590.0]],[5,[1343.5382907247958,560.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[6,6],[5,5],[8,8],[2,2],[1,1],[7,7],[3,3],[4,4]],"end_point":[[4,5],[6,7],[1,2],[7,8],[3,4],[5,6],[8,1],[2,3]],"handle_primary":[[2,null],[1,[0.0,0.0]],[6,null],[3,[0.0,20.0]],[5,null],[7,[-74.64101615137588,-19.99999999999494]],[8,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[5,null],[2,null],[6,null],[3,null],[7,null],[4,null],[8,[0.0,0.0]],[1,null]],"stroke":[[2,0],[6,0],[3,0],[1,0],[5,0],[7,0],[8,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14124486712683868036,{"inputs":[{"Node":{"node_id":14449527838292182035,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837],"transform":[340.37037037037106,0.0,0.0,113.03703703703678,837.2962962962961,682.6666666666667]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837],"transform":[340.37037037037106,0.0,0.0,113.03703703703678,837.2962962962961,682.6666666666667]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11450962621506425680,{"inputs":[{"Node":{"node_id":514222872092587805,"output_index":0,"lambda":false}},{"Node":{"node_id":6006052038693767172,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11158238411769751544,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14124486712683868036,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2310170068575553369,{"inputs":[{"Node":{"node_id":3564067978712674849,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.94921875,"green":0.8861847,"blue":0.5710144,"alpha":1.0}],[1.0,{"red":0.6594621,"green":0.859375,"blue":0.62438965,"alpha":1.0}]],"gradient_type":"Radial","start":[0.9615262104062824,0.1999999999999842],"end":[0.047819464216158014,0.809999999999961],"transform":[373.20508075688934,0.0,0.0,100.00000000000384,799.1535329954577,376.0000000000008]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.94921875,"green":0.8861847,"blue":0.5710144,"alpha":1.0}],[1.0,{"red":0.6594621,"green":0.859375,"blue":0.62438965,"alpha":1.0}]],"gradient_type":"Radial","start":[0.9615262104062824,0.1999999999999842],"end":[0.047819464216158014,0.809999999999961],"transform":[373.20508075688934,0.0,0.0,100.00000000000384,799.1535329954577,376.0000000000008]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6868877732348460627,{"inputs":[{"Node":{"node_id":7884283658260267478,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[4191887059541031673,{"inputs":[{"Node":{"node_id":4046495708656778502,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13287180494862716983,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[811.7210506462309,532.5]],[4,[830.3813046840752,527.5]],[2,[783.7306695894644,525.0]],[1,[765.0704155516202,530.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[3,4],[2,3]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1396768435017101055,{"inputs":[{"Node":{"node_id":15914878146223026034,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16727310898641763441,{"inputs":[{"Node":{"node_id":13920465562072008593,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.4117647,"green":0.6392157,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.4117647,"green":0.6392157,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9278774434958175105,{"inputs":[{"Node":{"node_id":3927358878935116440,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053914,-74.00000000000011]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999972,0.9999999999999972]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12930243402848966353,{"inputs":[{"Node":{"node_id":7948029953091985757,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[895.6921938163274,315.9999999999998]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14805036488257720752,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[849.0415587219195,597.5000000000001]],[3,[895.6921938165302,595.0]],[2,[877.0319397786858,590.0]],[4,[942.3428289111416,582.5]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[1,1],[2,2]],"end_point":[[3,4],[1,2],[2,3]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18011777376689315137,{"inputs":[{"Node":{"node_id":10564228200140683112,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8343201730608263656,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[933.0127018922194,430.0]],[4,[709.0896534380868,470.0]],[2,[933.0127018922194,470.0]],[3,[709.0896534380868,410.0000000000001]],[6,[597.1281292110205,340.0000000000001]],[5,[597.1281292110203,439.99999999999994]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[5,5],[1,1],[4,4],[3,3],[2,2]],"end_point":[[1,2],[3,4],[2,3],[6,1],[4,5],[5,6]],"handle_primary":[[5,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[5,0],[3,0],[2,0],[6,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9935922395919478146,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[1,[1317.9649443682358,445.9417771681145]],[19,[1353.7448559670786,395.8518518518519]],[3,[1276.181069958848,406.51851851851853]],[14,[1320.9547325102878,428.11522633744846]],[5,[1303.7037037037037,419.6872427983538]],[18,[1353.2181069958854,390.3209876543211]],[8,[1311.341563786008,420.872427983539]],[16,[1349.7942386831278,385.3168724279836]],[7,[1291.19341563786,379.78600823045264]],[6,[1283.8189300411525,381.6296296296296]],[20,[1325.5637860082302,441.9423868312756]],[17,[1331.2263374485594,418.633744855967]],[2,[1309.8491083676272,442.3520804755373]],[4,[1281.3168724279838,402.0411522633745]],[13,[1334.9135802469134,382.9465020576131]],[12,[1330.9629629629628,378.8641975308641]],[9,[1303.5720164609054,369.51440329218104]],[10,[1307.9176954732511,360.6913580246913]],[15,[1346.7654320987656,379.522633744856]],[11,[1318.5843621399176,404.93827160493817]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[11,11],[13,13],[20,20],[16,16],[15,15],[4,4],[10,10],[9,9],[8,8],[1,1],[3,3],[12,12],[19,19],[2,2],[18,18],[7,7],[6,6],[17,17],[5,5],[14,14]],"end_point":[[1,2],[14,15],[8,9],[2,3],[16,17],[19,20],[18,19],[15,16],[13,14],[12,13],[6,7],[3,4],[11,12],[10,11],[20,1],[4,5],[9,10],[17,18],[7,8],[5,6]],"handle_primary":[[10,[10.930041152263357,24.88888888888891]],[3,[-25.9423868312756,-18.304526748971227]],[20,[-0.8876695625660886,2.750800182899013]],[12,[8.691358024691226,-13.168724279835374]],[14,[0.0,0.0]],[2,[-1.1927104603494172,-1.8387619597050957]],[16,[-13.168724279835487,17.382716049382793]],[11,[0.0,0.0]],[1,[-5.73075474332677,0.190602104454058]],[7,[13.958847736626012,18.304526748971227]],[15,[17.514403292181214,-18.96296296296299]],[9,[-8.427983539094384,-34.502057613168745]],[18,[14.617283950616866,-16.32921810699594]],[8,[0.0,0.0]],[19,[-17.792694511774243,22.05806648377495]],[6,[-13.958847736625785,-23.967078189300366]],[4,[11.934313314187648,6.04743230718924]],[17,[0.0,0.0]],[5,[0.0,0.0]],[13,[-7.506172839506235,20.67489711934155]]],"handle_end":[[9,[-11.24897964853426,-25.61514642859032]],[14,[-16.17829033097064,17.51634441849427]],[4,[0.0,0.0]],[16,[0.0,0.0]],[3,[-29.366255144032948,-14.880658436213992]],[15,[22.902000000470935,-30.23064000062169]],[20,[6.571889866311722,-0.218577847920983]],[10,[0.0,0.0]],[11,[-8.691358024691226,13.168724279835374]],[7,[0.0,0.0]],[2,[21.160177959832257,14.930277849830986]],[17,[-11.234881916731185,12.550678897970386]],[18,[19.22633744855989,-23.835390946502]],[19,[2.149866795831258,-6.662224576095184]],[6,[-21.35436745259517,-28.00242524443996]],[12,[7.506172839506235,-20.67489711934155]],[1,[1.8728852309102424,2.887364730986178]],[13,[0.0,0.0]],[5,[8.275699533270199,14.209219953350214]],[8,[7.512329871725342,30.753600412376215]]],"stroke":[[11,0],[10,0],[4,0],[17,0],[19,0],[13,0],[18,0],[6,0],[12,0],[16,0],[8,0],[9,0],[7,0],[3,0],[20,0],[5,0],[2,0],[14,0],[15,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8073807569018624098,{"inputs":[{"Node":{"node_id":8028812053913481975,"output_index":0,"lambda":false}},{"Node":{"node_id":12998832508553378533,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12875121980058869686,{"inputs":[{"Node":{"node_id":13747030364552895864,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14341957170885045113,{"inputs":[{"Node":{"node_id":12469956387875933942,"output_index":0,"lambda":false}},{"Node":{"node_id":7952384394377946257,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[514222872092587805,{"inputs":[{"Node":{"node_id":5434119356821575534,"output_index":0,"lambda":false}},{"Node":{"node_id":3679103217373457623,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9908869573449854874,{"inputs":[{"Node":{"node_id":16416441286881083283,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17059035448296015006,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[933.0127018922194,470.0]],[1,[709.0896534380867,469.99999999999994]],[4,[821.0511776651532,440.0000000000001]],[2,[821.0511776651531,500.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[3,3],[1,1]],"end_point":[[1,2],[4,1],[3,4],[2,3]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]],[2,[0.0,0.0]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8028812053913481975,{"inputs":[{"Node":{"node_id":15517065353723874205,"output_index":0,"lambda":false}},{"Node":{"node_id":6785205785632793666,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9993538712344947860,{"inputs":[{"Node":{"node_id":15134939288287905620,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.38039216,"green":0.58431375,"blue":0.57254905,"alpha":1.0}],[1.0,{"red":0.38039216,"green":0.58431375,"blue":0.5764706,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9375072552322194,-0.022211489741806645],"end":[0.8621391458239049,0.9748376053312908],"transform":[252.09601447033225,0.0,0.0,101.29892349242375,1209.6581574189368,708.250000000008]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.38039216,"green":0.58431375,"blue":0.57254905,"alpha":1.0}],[1.0,{"red":0.38039216,"green":0.58431375,"blue":0.5764706,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9375072552322194,-0.022211489741806645],"end":[0.8621391458239049,0.9748376053312908],"transform":[252.09601447033225,0.0,0.0,101.29892349242375,1209.6581574189368,708.250000000008]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[456239140723765386,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.5,1.0]],[4,[0.0,0.5]],[1,[0.5,0.0]],[2,[1.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]],[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]]],"handle_end":[[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]],[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2465823993152870948,{"inputs":[{"Node":{"node_id":15898396405528650339,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3778839,"green":0.76171875,"blue":0.72573423,"alpha":1.0}],[1.0,{"red":0.7411765,"green":0.87058824,"blue":0.7372549,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4840260278337376,0.5459259284371654],"end":[-0.00035013139300899,0.5459259284371651],"transform":[-1259.5671475523018,1.5425248755610888e-13,0.0,-337.4999999999992,1616.6581574178408,781.2499999999995]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3778839,"green":0.76171875,"blue":0.72573423,"alpha":1.0}],[1.0,{"red":0.7411765,"green":0.87058824,"blue":0.7372549,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4840260278337376,0.5459259284371654],"end":[-0.00035013139300899,0.5459259284371651],"transform":[-1259.5671475523018,1.5425248755610888e-13,0.0,-337.4999999999992,1616.6581574178408,781.2499999999995]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14161755104759532162,{"inputs":[{"Node":{"node_id":13837327017498431546,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3021739385836969518,{"inputs":[{"Node":{"node_id":6556170892691431702,"output_index":0,"lambda":false}},{"Node":{"node_id":13868917743026516656,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11547499603328872398,{"inputs":[{"Node":{"node_id":8343201730608263656,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6777328619777499144,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.5382907246749,419.99978273075953]],[2,[1380.8587988003642,430.0]],[3,[1268.8972745734193,460.0000000000024]],[4,[1231.5767664977295,450.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[1,2],[4,1],[3,4],[2,3]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[-6.821210263296962e-13,-5.684341886080804e-14]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3455270778005546310,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[559.7618537735666,489.9877366723752]],[3,[410.5255888325765,450.0000000000001]],[4,[410.5255888325765,410.0]],[1,[559.8076211353316,449.99999999999994]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[3,4],[2,3],[1,2],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11076863066321508991,{"inputs":[{"Node":{"node_id":8891726805381758817,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5925268772265373737,{"inputs":[{"Node":{"node_id":4105329493214975815,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11895211316848895241,{"inputs":[{"Node":{"node_id":10742991645899166287,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5019608,"green":0.72156864,"blue":0.62352943,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5019608,"green":0.72156864,"blue":0.62352943,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7639490284239357347,{"inputs":[{"Node":{"node_id":14805036488257720752,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[7259756719760382667,{"inputs":[{"Node":{"node_id":15157035456876170143,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":0.0}]],"gradient_type":"Linear","start":[0.4803107402195895,-0.1138575403671318],"end":[0.41147745365941946,0.9225580029175888],"transform":[842.6155846750064,0.0,0.0,225.77816544354573,370.28268480418546,448.7065465860055]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":0.0}]],"gradient_type":"Linear","start":[0.4803107402195895,-0.1138575403671318],"end":[0.41147745365941946,0.9225580029175888],"transform":[842.6155846750064,0.0,0.0,225.77816544354573,370.28268480418546,448.7065465860055]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2036609094647228373,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[2,[1.0,0.5]],[3,[0.5,1.0]],[1,[0.8725092774628217,0.1666676721950458]],[4,[0.0,0.5]],[5,[0.12749341167028605,0.1666646696927025]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4],[5,5]],"end_point":[[5,1],[1,2],[3,4],[4,5],[2,3]],"handle_primary":[[1,[0.07925873631249913,0.08849560350574948]],[2,[0.0,0.27589238888950707]],[5,null],[3,[-0.275892388889507,0.0]],[4,[0.0,-0.12799231715991943]]],"handle_end":[[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[1,[0.0,-0.12799086965193351]],[4,[-0.07926033448372466,0.0884959630818129]],[5,null]],"stroke":[[1,0],[3,0],[5,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14842592386831797498,{"inputs":[{"Node":{"node_id":664587514588499648,"output_index":0,"lambda":false}},{"Node":{"node_id":14330881008352607546,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4243146970185091100,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[17,[668.3566529492455,433.2510288065844]],[13,[609.7997256515774,497.6899862825788]],[11,[615.6378600823045,431.5390946502058]],[8,[580.9382716049382,401.9753086419752]],[4,[591.18792866941,498.3045267489712]],[18,[618.4910836762688,499.9725651577503]],[9,[606.0246913580247,486.803840877915]],[1,[583.5500685871057,499.53360768175577]],[16,[616.0751917898693,491.077444156548]],[6,[594.4362139917694,493.6515775034293]],[5,[574.0246913580246,440.2962962962963]],[2,[533.9259259259258,420.7407407407407]],[14,[650.6666666666667,398.2222222222223]],[15,[615.4183813443072,491.19341563786]],[12,[609.0096021947874,496.4609053497942]],[10,[607.8683127572016,488.3840877914952]],[3,[589.8710562414265,497.0754458161865]],[7,[596.3676268861453,491.9835390946502]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[17,17],[18,18],[3,3],[6,6],[2,2],[10,10],[8,8],[12,12],[7,7],[15,15],[11,11],[9,9],[1,1],[4,4],[14,14],[13,13],[5,5],[16,16]],"end_point":[[7,8],[10,11],[8,9],[5,6],[9,10],[14,15],[3,4],[1,2],[4,5],[17,18],[6,7],[11,12],[15,16],[16,17],[2,3],[13,14],[12,13],[18,1]],"handle_primary":[[11,[-3.906721536351256,29.62962962962956]],[14,[-18.3045267489714,37.31138545953348]],[5,[18.392318244170156,23.769547325102906]],[10,[0.0,0.0]],[6,[0.0,0.0]],[15,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[9,[0.0,0.0]],[13,[0.0,0.0]],[4,[0.0,0.0]],[12,[0.0,0.0]],[2,[44.005486968450214,35.16049382716062]],[3,[0.0,0.0]],[18,[-7.386678859929702,8.10852004267656]],[7,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]],[16,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[7,[25.964334705075316,61.47599451303165]],[2,null],[11,[0.0,0.0]],[1,[48.21947873799752,48.855967078189394]],[3,[0.0,0.0]],[5,null],[4,[21.113854595336193,37.201646090535064]],[17,null],[9,[0.0,0.0]],[12,[0.0,0.0]],[14,null],[10,[-6.189300411522709,26.732510288065782]],[16,[-35.29218106995893,26.337448559670804]],[13,[-23.747599451303245,35.4677640603565]],[15,[0.0,0.0]],[8,null],[18,[3.2434080170708057,6.03566529492457]]],"stroke":[[13,0],[8,0],[18,0],[1,0],[16,0],[14,0],[5,0],[17,0],[11,0],[4,0],[15,0],[6,0],[7,0],[3,0],[9,0],[12,0],[2,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17965270694495451178,{"inputs":[{"Node":{"node_id":9409313765472227540,"output_index":0,"lambda":false}},{"Node":{"node_id":4887570735033124574,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15167880819976070791,{"inputs":[{"Node":{"node_id":4898866541060902381,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":33.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[16069762220015310717,{"inputs":[{"Node":{"node_id":16398743435291795904,"output_index":0,"lambda":false}},{"Node":{"node_id":14791465604033956302,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16510804133693080967,{"inputs":[{"Node":{"node_id":3966971396176820223,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2785423879796980286,{"inputs":[{"Node":{"node_id":11634802583144606404,"output_index":0,"lambda":false}},{"Node":{"node_id":16591255610014418910,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2921219300441868542,{"inputs":[{"Node":{"node_id":11506204916439878896,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7067047867039575315,{"inputs":[{"Node":{"node_id":15261165353096835967,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5261200785298607501,{"inputs":[{"Node":{"node_id":2465823993152870948,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false}],[12554549497938935061,{"inputs":[{"Node":{"node_id":14055195208113082127,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[833.274364370262,-33.56362500933909]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.8,-0.6]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.2246467991473532e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8256712316698018135,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1268.897274573418,500.00000000000006]],[3,[1343.538290724796,579.9999999999998]],[2,[1268.8972745734184,559.9999999999999]],[4,[1343.5382907247958,520.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18046677540207938977,{"inputs":[{"Node":{"node_id":2189393878093040029,"output_index":0,"lambda":false}},{"Node":{"node_id":2292399603649738346,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4134257789770357215,{"inputs":[{"Node":{"node_id":9640215309187299519,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053945,-71.86019325256757]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999948,0.9999999999999948]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15914878146223026034,{"inputs":[{"Node":{"node_id":4069478660487729695,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[39.06014871394696,-80.31594690033606]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.44070994426773896},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.7021527212517815,1.4014617956106905]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.8600612888523491,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2640491057355360805,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[7,[671.7691453623979,459.99999999999994]],[5,[410.5255888325765,450.0000000000001]],[4,[410.5255888325763,460.0]],[1,[783.7306695894642,510.0]],[3,[559.8076211353318,500.00000000000017]],[9,[821.0511776651531,440.00000000000006]],[6,[559.7618537735666,489.9877366723752]],[10,[933.0127018922194,470.0]],[8,[709.0896534380868,470.00000000000006]],[2,[653.1088913245535,475.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[7,7],[1,1],[4,4],[6,6],[5,5],[10,10],[2,2],[9,9],[3,3],[8,8]],"end_point":[[9,10],[6,7],[10,1],[4,5],[2,3],[7,8],[1,2],[5,6],[8,9],[3,4]],"handle_primary":[[8,[0.0,0.0]],[2,null],[7,[37.32050807568885,10.000000000000114]],[9,[0.0,0.0]],[1,null],[6,null],[5,null],[4,[0.0,0.0]],[10,[0.0,0.0]],[3,[-149.2820323027555,-40.00000000000017]]],"handle_end":[[3,null],[1,null],[5,null],[10,null],[8,[0.0,0.0]],[6,null],[9,[0.0,0.0]],[2,null],[4,null],[7,null]],"stroke":[[5,0],[8,0],[2,0],[4,0],[1,0],[3,0],[10,0],[7,0],[6,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3680957604830907751,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[13,[1322.315500685871,442.4691358024692]],[15,[1264.5486968449932,395.9981710105167]],[1,[1304.1133973479657,421.12604785855825]],[5,[1301.1577503429353,350.639231824417]],[7,[1336.2743484224964,374.25514403292175]],[4,[1311.6049382716046,423.2427983539094]],[3,[1278.0100594421583,366.7343392775492]],[10,[1354.710562414266,375.5720164609054]],[6,[1317.750342935528,414.37585733882025]],[11,[1325.124828532236,431.14403292181055]],[2,[1304.6986739826243,420.69684499314127]],[9,[1321.5253772290812,429.56378600823047]],[14,[1313.0096021947877,442.29355281207137]],[12,[1360.3292181069958,385.0534979423868]],[8,[1319.9451303155006,428.8614540466391]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[1,1],[4,4],[6,6],[8,8],[12,12],[13,13],[15,15],[11,11],[14,14],[2,2],[3,3],[7,7],[9,9],[10,10],[5,5]],"end_point":[[14,15],[4,5],[9,10],[15,1],[2,3],[1,2],[11,12],[8,9],[10,11],[5,6],[12,13],[6,7],[3,4],[7,8],[13,14]],"handle_primary":[[11,[6.190926179952385,-9.64405832444237]],[14,[-1.4013919408635047,-1.0754868383370422]],[13,[-1.0925163846973192,0.8063811410860922]],[2,[0.0,0.0]],[10,[-22.650205761316556,26.60082304526742]],[6,[0.0,0.0]],[4,[0.0,0.0]],[3,[22.884316415180592,29.146776406035656]],[8,[0.0,0.0]],[7,[-16.182898948331285,35.4677640603565]],[15,[30.375857338820197,15.10013717421117]],[1,[0.0,0.0]],[5,[15.978052126200282,30.375857338820197]],[12,[-18.78737997256485,20.455418381344316]],[9,[0.0,0.0]]],"handle_end":[[2,[26.044810242340873,43.48605395518973]],[12,[1.2603823499284772,-0.9302822106615168]],[13,[0.8337588052027058,0.639861408644208]],[10,null],[15,[0.0,0.0]],[14,[36.34567901234527,22.650205761316897]],[8,[0.0,0.0]],[11,[-18.34842249657072,19.13854595336079]],[9,[-20.894375857338673,18.52400548696835]],[1,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[7,[0.0,0.0]],[4,[16.153635116598025,62.683127572016474]],[6,[-20.484682213077576,38.013717421124625]]],"stroke":[[8,0],[12,0],[14,0],[13,0],[4,0],[6,0],[15,0],[9,0],[10,0],[2,0],[3,0],[5,0],[11,0],[7,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7910743362843097140,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[-9.33012701892199,592.5]],[11,[18.66025403784454,515.0]],[6,[130.62177826491063,599.9999999999999]],[4,[55.98076211353338,555.0000000000001]],[9,[326.55444566227675,562.5]],[5,[177.2724133595217,587.5]],[10,[261.2435565298214,580.0]],[8,[261.24355652982126,545.0]],[7,[93.30127018922188,590.0]],[2,[121.29165124598823,557.5000000000001]],[3,[83.97114317030001,547.5]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[4,4],[3,3],[2,2],[6,6],[1,1],[8,8],[5,5],[10,10],[7,7],[9,9]],"end_point":[[3,4],[9,10],[5,6],[1,2],[4,5],[8,9],[2,3],[10,11],[6,7],[7,8]],"handle_primary":[[8,[0.0,0.0]],[1,[0.0,0.0]],[10,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[9,[0.0,0.0]],[4,[0.0,0.0]],[7,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[8,[0.0,0.0]],[4,[0.0,0.0]],[10,[0.0,0.0]],[7,[0.0,0.0]],[6,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[9,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[2,0],[9,0],[6,0],[4,0],[7,0],[1,0],[3,0],[5,0],[10,0],[8,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17887542695709892422,{"inputs":[{"Node":{"node_id":14842592386831797498,"output_index":0,"lambda":false}},{"Node":{"node_id":7259756719760382667,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10564228200140683112,{"inputs":[{"Node":{"node_id":13001069903842109798,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-140.23409378379097,-66.17529531267506]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.1549250908208777},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[61.12160376625298,24.813625019997943]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.6236723178991973,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11634445349252640936,{"inputs":[{"Node":{"node_id":2032185045476767535,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[708.5896534382083,269.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,0.267949192432]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3966971396176820223,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[597.1281292110198,599.9999999999999]],[4,[615.7883832488646,605.0000000000001]],[6,[1044.9742261192855,480.0]],[3,[783.7306695894646,560.0]],[1,[1156.9357503463468,509.9999999999987]],[2,[877.0319397786863,584.9999999999998]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[3,3],[6,6],[4,4],[1,1],[5,5]],"end_point":[[4,5],[3,4],[2,3],[1,2],[6,1],[5,6]],"handle_primary":[[5,[447.84609690826574,-119.99999999999989]],[1,[0.0,0.0]],[4,null],[3,null],[6,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[5,null],[4,null],[3,null],[2,null],[1,[0.0,0.0]]],"stroke":[[6,0],[3,0],[5,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2900504420179573771,{"inputs":[{"Node":{"node_id":3185536512640676801,"output_index":0,"lambda":false}},{"Node":{"node_id":10852750245702849075,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2843751023378786714,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[3,[480.5925925925926,440.2962962962962]],[17,[565.2914244954804,444.3855996237166]],[14,[552.9705625612692,418.19081042008474]],[8,[502.0960349862431,417.9179038759178]],[7,[515.1604938271604,486.716049382716]],[16,[530.3703703703702,486.71604938271594]],[15,[556.7578325004595,420.13017723423656]],[6,[499.77650172698026,445.9388618767647]],[11,[531.5890484844431,432.90541944395505]],[13,[526.0246913580248,490.07407407407413]],[2,[476.9512618480758,444.1904085078117]],[9,[505.311372421164,416.4524664944526]],[5,[497.38271604938257,447.60493827160496]],[10,[524.0493827160495,487.1111111111112]],[4,[511.55555555555554,490.2222222222222]],[12,[533.8924329970387,433.46495092641567]],[1,[510.41975308641986,500.1481481481481]],[19,[530.7654320987656,499.55555555555566]],[18,[568.2339832275112,446.0155371619765]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[4,4],[15,15],[6,6],[18,18],[2,2],[14,14],[13,13],[7,7],[11,11],[12,12],[10,10],[19,19],[5,5],[16,16],[17,17],[3,3],[8,8],[1,1],[9,9]],"end_point":[[2,3],[8,9],[5,6],[7,8],[11,12],[14,15],[6,7],[16,17],[13,14],[15,16],[17,18],[19,1],[18,19],[12,13],[1,2],[3,4],[10,11],[4,5],[9,10]],"handle_primary":[[9,[11.197015798182122,18.39034937970939]],[10,[0.0,0.0]],[18,[-19.30865594294653,18.299752742610902]],[17,[27.324497401397252,-21.15032331824051]],[1,[-9.283950617284065,-12.246913580246884]],[11,[7.784237194372736,-22.222909722529664]],[7,[0.0,0.0]],[12,[-5.082537215847424,18.7049831985629]],[15,[-11.459519915000214,23.15277176924241]],[4,[0.0,0.0]],[19,[-1.5204271954055455,4.429070525747022]],[3,[21.32824309569804,17.329197515254634]],[13,[0.0,0.0]],[14,[15.260998855532309,-21.888591759537466]],[6,[3.9272019767233246,4.629039357803151]],[5,[-10.016557406305251,-15.024836109457851]],[8,[-8.936088730151937,-20.93774746663439]],[2,[-17.16805625160663,-20.28383937076643]],[16,[0.0,0.0]]],"handle_end":[[6,[0.7901234567898427,-16.197530864197745]],[13,[-15.260998855532534,21.888591759537743]],[4,[13.03703703703701,19.555555555555543]],[18,[4.54320987654296,-13.23456790123464]],[16,[-28.402535606591755,21.984770746653737]],[7,[18.59187624528363,43.5617887769169]],[12,[3.7530864197531177,-16.59259259259261]],[10,[-7.784237194372736,22.22290972252955]],[5,[-12.032856371187677,-14.183269935989983]],[2,[-22.123456790123555,-17.97530864197529]],[15,[4.54320987654296,-11.851851851852018]],[11,[5.082537215847424,-18.704983198562843]],[1,[28.522359190346833,33.698803394714844]],[17,[19.435079545528083,-18.419570542198244]],[9,[0.7901234567898427,-21.135802469135857]],[14,[11.286699158099054,-22.803605349427187]],[3,[-3.111111111111086,-12.0]],[8,[-11.197015798182008,-18.39034937970939]],[19,[2.7053847913285836,3.5688054694122116]]],"stroke":[[19,0],[1,0],[16,0],[7,0],[8,0],[13,0],[17,0],[18,0],[14,0],[10,0],[4,0],[9,0],[5,0],[15,0],[3,0],[11,0],[2,0],[6,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7637119583909417127,{"inputs":[{"Node":{"node_id":4740496570730418920,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8166796652234334001,{"inputs":[{"Node":{"node_id":8034980397175569257,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.47937012,"green":0.73046875,"blue":0.56778514,"alpha":1.0}],[1.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4830458531002497,0.18799510852727777],"end":[0.5102584056336581,0.7583861422837161],"transform":[330.72972441489793,0.0,0.0,262.97748583483383,694.2423781243951,620.5615190102498]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.47937012,"green":0.73046875,"blue":0.56778514,"alpha":1.0}],[1.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4830458531002497,0.18799510852727777],"end":[0.5102584056336581,0.7583861422837161],"transform":[330.72972441489793,0.0,0.0,262.97748583483383,694.2423781243951,620.5615190102498]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16591255610014418910,{"inputs":[{"Node":{"node_id":2225749123534781340,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[5891705401441266824,{"inputs":[{"Node":{"node_id":5670058004691708784,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17332567356044944766,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[-0.10921713655450987,1.0126086768123077]],[3,[1.0,1.0]],[1,[0.0,0.0]],[2,[1.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4]],"end_point":[[3,4],[1,2],[4,1],[2,3]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[429913874753911073,{"inputs":[{"Node":{"node_id":11236872744106223256,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.9098039,"blue":0.7764706,"alpha":0.75}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[13701442050580061197,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[1380.8587988003635,469.9997827307588]],[2,[1343.5382907247958,520.0000000000001]],[1,[1268.897274573418,500.00000000000006]],[6,[1380.8587988003635,469.9999999999993]],[4,[1380.8587988003635,429.9999999999991]],[3,[1530.14083110324,469.9999999999986]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[3,3],[5,5],[2,2],[6,6],[4,4]],"end_point":[[2,3],[6,1],[5,6],[1,2],[4,5],[3,4]],"handle_primary":[[1,[0.0,0.0]],[5,[0.0,0.0002172692405224552]],[6,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,null],[2,[0.0,0.0]],[1,[0.0,0.0]],[5,null],[6,[4.547473508864641e-13,5.684341886080804e-14]]],"stroke":[[2,0],[3,0],[6,0],[1,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16059265180575745658,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[1082.2947341949744,580.0]],[1,[1194.256258422041,640.0]],[3,[1100.9549882328188,585.0]],[5,[839.7114317029976,645.0]],[2,[1044.9742261192855,599.9999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[4,5],[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5882319123081134737,{"inputs":[{"Node":{"node_id":14102693648424950146,"output_index":0,"lambda":false}},{"Node":{"node_id":13207576193421440093,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7030585744407664630,{"inputs":[{"Node":{"node_id":13701442050580061197,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-113.99999999999903]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4740496570730418920,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[279.9038105676662,605.0000000000001]],[3,[261.24355652982155,620.0]],[4,[298.56406460551034,610.0]],[2,[242.58330249197704,615.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[2,0],[4,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10651614176902312108,{"inputs":[{"Node":{"node_id":4134257789770357215,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.41568628,"green":0.6313726,"blue":0.6039216,"alpha":1.0}],[0.869076264787314,{"red":0.46666667,"green":0.69803923,"blue":0.6313726,"alpha":1.0}],[0.9670173672287944,{"red":0.39215687,"green":0.6117647,"blue":0.6,"alpha":1.0}],[1.0,{"red":0.37254903,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Radial","start":[0.004591093221745557,0.9549938856995572],"end":[1.0010898078090742,0.23229219555707512],"transform":[682.3892394899896,0.0,0.0,255.98390390304277,553.867087387986,415.53693693509086]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.41568628,"green":0.6313726,"blue":0.6039216,"alpha":1.0}],[0.869076264787314,{"red":0.46666667,"green":0.69803923,"blue":0.6313726,"alpha":1.0}],[0.9670173672287944,{"red":0.39215687,"green":0.6117647,"blue":0.6,"alpha":1.0}],[1.0,{"red":0.37254903,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Radial","start":[0.004591093221745557,0.9549938856995572],"end":[1.0010898078090742,0.23229219555707512],"transform":[682.3892394899896,0.0,0.0,255.98390390304277,553.867087387986,415.53693693509086]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18431382379595272672,{"inputs":[{"Node":{"node_id":10989897386232385465,"output_index":0,"lambda":false}},{"Node":{"node_id":4191887059541031673,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13609749019463823009,{"inputs":[{"Node":{"node_id":2062662104423219162,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":0.0}]],"gradient_type":"Linear","start":[0.6190188337031772,0.2673182752249348],"end":[0.4910887633661796,0.9800526827918484],"transform":[244.87384707744465,0.0,0.0,164.03437392974598,690.4184767777101,515.1506140834983]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":0.0}]],"gradient_type":"Linear","start":[0.6190188337031772,0.2673182752249348],"end":[0.4910887633661796,0.9800526827918484],"transform":[244.87384707744465,0.0,0.0,164.03437392974598,690.4184767777101,515.1506140834983]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4847316728405535983,{"inputs":[{"Node":{"node_id":11579925754926059876,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10431241258085047322,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[709.0896534380863,630.0]],[6,[298.56406460551045,540.0000000000001]],[2,[597.1281292110192,559.9999999999998]],[5,[709.0896534380863,649.9999999999999]],[3,[597.1281292110202,599.9999999999999]],[1,[298.56406460551034,479.99999999999983]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[4,4],[1,1],[5,5],[2,2],[6,6]],"end_point":[[1,2],[4,5],[3,4],[5,6],[2,3],[6,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[5,0],[6,0],[2,0],[3,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5346759588580719138,{"inputs":[{"Node":{"node_id":57904581517036791,"output_index":0,"lambda":false}},{"Node":{"node_id":16244305414728361140,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8508454285877707748,{"inputs":[{"Node":{"node_id":9908869573449854874,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5137255,"green":0.7294118,"blue":0.68235296,"alpha":1.0}],[1.0,{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0033697141397510677,0.6230645063687077],"end":[0.058070316242295306,1.09924019568288],"transform":[593.4286164571708,0.0,0.0,254.41394967234703,831.0003152001923,405.4836980340858]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5137255,"green":0.7294118,"blue":0.68235296,"alpha":1.0}],[1.0,{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0033697141397510677,0.6230645063687077],"end":[0.058070316242295306,1.09924019568288],"transform":[593.4286164571708,0.0,0.0,254.41394967234703,831.0003152001923,405.4836980340858]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11236872744106223256,{"inputs":[{"Node":{"node_id":9724746185253267560,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14102693648424950146,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":16847360882244487081,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6142412830271644616,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1203.586385440963,436.5]],[1,[1278.2274015923404,401.49999999999994]],[2,[1175.5960043841962,429.0]],[4,[1250.2370205355735,424.00000000000006]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[3,4],[1,2],[2,3]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[57904581517036791,{"inputs":[{"Node":{"node_id":9393309733761233513,"output_index":0,"lambda":false}},{"Node":{"node_id":15300421479077882117,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10852750245702849075,{"inputs":[{"Node":{"node_id":17250040304106119844,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.77254903,"alpha":0.75}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[14449710315388146362,{"inputs":[{"Node":{"node_id":7671691070850213967,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":81.1788},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[6006052038693767172,{"inputs":[{"Node":{"node_id":4197544064668946479,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16923062582661131268,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[597.1281292110202,399.9999999999999]],[4,[671.769145362398,420.0000000000001]],[2,[597.1281292110202,409.99999999999994]],[3,[653.1088913245534,424.99999999999994]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[3,4],[4,1],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8958782938691501404,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1231.6308657449686,540.0144958496094]],[2,[1231.576766497729,510.00000000000233]],[4,[1156.9357503463516,540.0]],[1,[1156.9357503463525,530.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[4,4],[1,1]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,null],[1,[0.0,0.0]],[2,null],[4,[0.0,-2.273736754432321e-13]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15478704582542175684,{"inputs":[{"Node":{"node_id":8242413775403456296,"output_index":0,"lambda":false}},{"Node":{"node_id":13696921450692276893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[532055960192543062,{"inputs":[{"Node":{"node_id":326112971739898070,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[13942787566051910019,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,1.0]],[1,[0.0,0.0]],[2,[1.000788022064618,-6.266203653947348e-16]],[3,[1.000788022064618,1.0000000000000009]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13852123721901366011,{"inputs":[{"Node":{"node_id":456239140723765386,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[819.6941583984747,299.6363877833991]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.20900992053447,59.27277556679853]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7171713123860587892,{"inputs":[{"Node":{"node_id":18431382379595272672,"output_index":0,"lambda":false}},{"Node":{"node_id":9798215931018813676,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7884283658260267478,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1184.9261314031187,552.5]],[3,[1250.2370205355735,545.0000000000001]],[2,[1231.5767664977295,540.0000000000001]],[4,[1203.5863854409629,557.4999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[2,2],[3,3]],"end_point":[[4,1],[1,2],[2,3],[3,4]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16564941800301062922,{"inputs":[{"Node":{"node_id":18371793711669837037,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3616319631707471648,{"inputs":[{"Node":{"node_id":12852312236973354891,"output_index":0,"lambda":false}},{"Node":{"node_id":16727310898641763441,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1104068854328504126,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1530.14083110324,530.000000000003]],[1,[1343.538290724796,580.0000000000001]],[4,[1343.5382907247958,520.0]],[3,[1530.14083110324,470.00000000000216]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[3,4],[2,3],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13942146309185231085,{"inputs":[{"Node":{"node_id":15166516760575860563,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}],[0.2134053325596848,{"red":0.45490196,"green":0.70980394,"blue":0.58431375,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4417705336480124,0.7894513882255817],"end":[0.4000315611112892,0.37243515464306],"transform":[1317.713318209003,0.0,0.0,1100.6765757217709,406.8730842197156,-30.930650690931543]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}],[0.2134053325596848,{"red":0.45490196,"green":0.70980394,"blue":0.58431375,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4417705336480124,0.7894513882255817],"end":[0.4000315611112892,0.37243515464306],"transform":[1317.713318209003,0.0,0.0,1100.6765757217709,406.8730842197156,-30.930650690931543]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14449527838292182035,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[9,[709.3552812071331,611.4970278920897]],[14,[728.493827160494,609.9753086419753]],[12,[721.9094650205761,611.3799725651577]],[13,[734.8148148148149,620.9492455418381]],[17,[749.8271604938273,587.4567901234568]],[10,[709.413808870599,616.4718792866942]],[5,[662.6063100137173,612.5432098765428]],[6,[695.3964334705074,609.7777777777776]],[16,[726.2990397805214,601.9862825788753]],[18,[725.5089163237311,594.6117969821673]],[4,[682.3593964334707,606.4197530864195]],[15,[763.4567901234569,605.6296296296294]],[1,[699.8518518518516,598.1234567901233]],[2,[667.3909465020577,593.3827160493828]],[11,[713.6278006401462,612.5505258344765]],[8,[701.8247218411828,611.4580094497792]],[3,[699.7421124828531,603.0617283950616]],[7,[692.1871665904588,615.6720012193263]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[17,17],[16,16],[4,4],[9,9],[11,11],[7,7],[10,10],[14,14],[6,6],[5,5],[2,2],[3,3],[18,18],[13,13],[8,8],[1,1],[15,15],[12,12]],"end_point":[[3,4],[5,6],[8,9],[10,11],[13,14],[18,1],[17,18],[1,2],[11,12],[6,7],[15,16],[12,13],[9,10],[2,3],[14,15],[4,5],[16,17],[7,8]],"handle_primary":[[7,[0.0,0.0]],[13,[-3.101966163694442,-4.096936442615402]],[16,[0.0,0.0]],[12,[0.6886396813392821,0.35058484628291353]],[9,[1.0398530837227329,0.17152215813985094]],[5,[0.0,0.0]],[11,[0.9510922553114368,-0.40840938602514143]],[1,[-13.651577503429507,-4.016460905349504]],[15,[-15.992684042066571,-5.647919524462736]],[10,[2.71082158531226,-3.275875783141601]],[17,[-7.648317030623161,4.388047332817109]],[2,[5.399176954732297,6.584362139917744]],[6,[0.0,0.0]],[3,[0.0,0.0]],[18,[-0.0877914951989851,0.0]],[14,[-0.1771601410563335,-2.331086581557088]],[8,[0.0,0.0]],[4,[-6.038618148571572,2.2123832635880945]]],"handle_end":[[7,[-5.1358024691359105,5.530864197530718]],[1,[8.559670781892919,2.502057613168745]],[4,[0.0,0.0]],[18,[0.0,0.0]],[5,[-8.69135802469134,3.3580246913579685]],[2,[0.0,0.0]],[17,null],[16,[-5.977212841894016,7.381559383908893]],[13,[-0.5267489711934559,1.053497942386798]],[15,[2.8483462886752022,1.1315348270080676]],[10,null],[6,[4.13595488492615,-4.1749733272365575]],[8,[-3.7847889041303233,-0.6242950769699291]],[3,[6.038618148571345,-2.2123832635879808]],[14,[-22.51851851851859,-0.614540466392441]],[11,[-1.2025737194898056,-0.6122274594622468]],[9,null],[12,[-6.90626428898031,-2.3996342021031296]]],"stroke":[[13,0],[7,0],[18,0],[8,0],[3,0],[4,0],[10,0],[2,0],[16,0],[5,0],[1,0],[15,0],[9,0],[12,0],[11,0],[14,0],[17,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13861850149743924125,{"inputs":[{"Node":{"node_id":13442128106088307772,"output_index":0,"lambda":false}},{"Node":{"node_id":5891705401441266824,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4398598693761352299,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[821.0511776651532,440.0000000000001]],[2,[821.0511776651531,500.0]],[1,[709.0896534380867,469.99999999999994]],[3,[933.0127018922194,470.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[3,4],[1,2],[4,1],[2,3]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16732345645494316637,{"inputs":[{"Node":{"node_id":11450962621506425680,"output_index":0,"lambda":false}},{"Node":{"node_id":7637119583909417127,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[938033825024582130,{"inputs":[{"Node":{"node_id":10477328336261010694,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":1.0}],[1.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":0.0}]],"gradient_type":"Linear","start":[0.44995556068938913,0.40889389103747775],"end":[0.42763248011625454,0.6979899795516591],"transform":[861.8034829475831,0.0,0.0,248.35202392783896,117.22673062625182,378.4503745891131]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":1.0}],[1.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":0.0}]],"gradient_type":"Linear","start":[0.44995556068938913,0.40889389103747775],"end":[0.42763248011625454,0.6979899795516591],"transform":[861.8034829475831,0.0,0.0,248.35202392783896,117.22673062625182,378.4503745891131]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12019361655085452072,{"inputs":[{"Node":{"node_id":2036609094647228373,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.98352292316827]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.2222560378726955e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[585709295659496998,{"inputs":[{"Node":{"node_id":11990662272042254522,"output_index":0,"lambda":false}},{"Node":{"node_id":12331680982485935376,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15347111149235590492,{"inputs":[{"Node":{"node_id":2209276411833629008,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.9835229231682]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.2222560378726955e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14752203606937854133,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[1044.9742261192855,480.0]],[1,[597.1281292110193,599.9999999999997]],[2,[597.1281292110197,559.9999999999997]],[3,[1044.9742261192855,439.99999999999994]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[1,1],[3,3]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10849502918952703647,{"inputs":[{"Node":{"node_id":9663740787529879916,"output_index":0,"lambda":false}},{"Node":{"node_id":17433098630591807963,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11506204916439878896,{"inputs":[{"Node":{"node_id":2640491057355360805,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7005645574203740491,{"inputs":[{"Node":{"node_id":17873337220577786871,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2452294403891427489,{"inputs":[{"Node":{"node_id":9278774434958175105,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.3372549,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Linear","start":[0.027025122260555538,0.6600000000000135],"end":[0.9916422150126412,0.04000000000001247],"transform":[111.96152422706125,0.0,0.0,99.99999999999976,862.9742261192855,483.9999999999988]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.3372549,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Linear","start":[0.027025122260555538,0.6600000000000135],"end":[0.9916422150126412,0.04000000000001247],"transform":[111.96152422706125,0.0,0.0,99.99999999999976,862.9742261192855,483.9999999999988]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17638504852426495381,{"inputs":[{"Node":{"node_id":17881728913029763313,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7363207208514658,0.8045676758185962],"end":[0.02104094774655124,0.19319223963735063],"transform":[703.2213392761797,0.0,0.0,157.02299163282092,64.20355654603011,465.66437657189834]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7363207208514658,0.8045676758185962],"end":[0.02104094774655124,0.19319223963735063],"transform":[703.2213392761797,0.0,0.0,157.02299163282092,64.20355654603011,465.66437657189834]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13696921450692276893,{"inputs":[{"Node":{"node_id":729026403095264425,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9059757781988896,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.8930663763318565,-1.4466906873466163],"end":[1.0003976000579349,0.2239198862330611],"transform":[1332.3243231154509,0.0,0.0,297.49602202927537,-250.85405534350912,609.3847245924164]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9059757781988896,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.8930663763318565,-1.4466906873466163],"end":[1.0003976000579349,0.2239198862330611],"transform":[1332.3243231154509,0.0,0.0,297.49602202927537,-250.85405534350912,609.3847245924164]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[764189229787475993,{"inputs":[{"Node":{"node_id":194878846429432339,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[664587514588499648,{"inputs":[{"Node":{"node_id":5365849201631468915,"output_index":0,"lambda":false}},{"Node":{"node_id":16564941800301062922,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4924169570021915606,{"inputs":[{"Node":{"node_id":972153153989181918,"output_index":0,"lambda":false}},{"Node":{"node_id":8015732980153557800,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13853529851208960143,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[28.09271595801783,129.8163283935271]],[4,[-40.648024782723304,138.90840278889075]],[3,[29.146213900404632,142.10291541428978]],[1,[-39.199465111941095,125.88462054688308]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[3,4],[2,3],[4,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[27.65672806576993,9.286366023261053]],[4,[0.0,0.0]],[1,[-37.794238683127446,8.35487917411865]]],"stroke":[[3,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16416441286881083283,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1306.217782649107,559.9999999999999]],[2,[1492.8203230275508,509.99999999999994]],[4,[1306.2177826491068,529.9999999999972]],[3,[1492.8203230275506,480.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[1,1],[3,3]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7948029953091985757,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,0.5]],[3,[0.5,1.0]],[1,[0.5,0.0]],[2,[1.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[3,4],[1,2],[2,3],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]],[4,[0.0,-0.275892388889507]]],"handle_end":[[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]],[4,[-0.275892388889507,0.0]],[1,[0.0,-0.275892388889507]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9663740787529879916,{"inputs":[{"Node":{"node_id":14633096010607565334,"output_index":0,"lambda":false}},{"Node":{"node_id":10651614176902312108,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9323583246068171750,{"inputs":[{"Node":{"node_id":3680957604830907751,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.54901963,"green":0.7372549,"blue":0.654902,"alpha":1.0}],[1.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}]],"gradient_type":"Linear","start":[0.481496333638864,0.31809715494984925],"end":[0.5186182401466546,0.7659061379880119],"transform":[215.50617283950584,0.0,0.0,207.67783479697297,1364.2345679012346,470.9382716049381]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.54901963,"green":0.7372549,"blue":0.654902,"alpha":1.0}],[1.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}]],"gradient_type":"Linear","start":[0.481496333638864,0.31809715494984925],"end":[0.5186182401466546,0.7659061379880119],"transform":[215.50617283950584,0.0,0.0,207.67783479697297,1364.2345679012346,470.9382716049381]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15876464101883822838,{"inputs":[{"Node":{"node_id":3227544593834141716,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.33333334,"green":0.5647059,"blue":0.5529412,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.33333334,"green":0.5647059,"blue":0.5529412,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5317925967883407701,{"inputs":[{"Node":{"node_id":13853529851208960143,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,2.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[729026403095264425,{"inputs":[{"Node":{"node_id":9392462024456293097,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[972153153989181918,{"inputs":[{"Node":{"node_id":15488533792651297821,"output_index":0,"lambda":false}},{"Node":{"node_id":9981992739451603109,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12852312236973354891,{"inputs":[{"Node":{"node_id":8181290118694677328,"output_index":0,"lambda":false}},{"Node":{"node_id":2921219300441868542,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5017082804473894058,{"inputs":[{"Node":{"node_id":8165914767449151618,"output_index":0,"lambda":false}},{"Node":{"node_id":8166796652234334001,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1268775104597510914,{"inputs":[{"Node":{"node_id":13861850149743924125,"output_index":0,"lambda":false}},{"Node":{"node_id":18011777376689315137,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9641315149170593327,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[2,[1297.047751590237,432.45710241679353]],[8,[1270.5185185185182,430.0]],[11,[1259.4489801206926,442.53166286845914]],[4,[1309.432098765432,385.3827160493827]],[15,[1319.4403292181073,447.7366255144034]],[10,[1267.5056400134067,396.48371220183463]],[19,[1353.7580246913572,440.1251028806582]],[16,[1323.5884773662551,445.96633567616453]],[7,[1284.082304526749,376.2304526748971]],[13,[1312.9218106995884,446.85871056241416]],[9,[1269.113854595336,397.6954732510288]],[14,[1325.5637860082304,455.6378600823044]],[3,[1311.0123456790122,389.1358024691358]],[5,[1280.0,432.79012345679007]],[6,[1286.7160493827164,380.04205830395256]],[1,[1313.111111111111,440.66666666666663]],[20,[1326.2661179698216,436.1481481481482]],[18,[1327.484998303753,444.1384489176408]],[17,[1343.538290724795,449.4814814814814]],[12,[1302.7379972565157,443.9615912208504]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[14,14],[15,15],[17,17],[2,2],[1,1],[8,8],[12,12],[20,20],[7,7],[16,16],[10,10],[11,11],[6,6],[5,5],[4,4],[9,9],[19,19],[18,18],[3,3],[13,13]],"end_point":[[5,6],[4,5],[10,11],[18,19],[12,13],[19,20],[7,8],[2,3],[1,2],[6,7],[16,17],[14,15],[15,16],[11,12],[9,10],[3,4],[17,18],[13,14],[8,9],[20,1]],"handle_primary":[[1,[-1.6922078070856514,-5.274941522376082]],[11,[14.00629256044499,3.614815506799175]],[2,[-7.975963753017595,-5.0295761250696955]],[5,[0.0,-30.09785939152056]],[18,[26.44161668001243,-3.0566001241026584]],[13,[0.0,0.0]],[12,[9.763281342613707,0.018425375535628064]],[10,[-0.14088374697121253,12.961503560065635]],[15,[0.05852766346606586,-1.7558299039780536]],[3,null],[9,[0.0,0.0]],[19,[-0.162851070793522,-0.9241759662677964]],[20,null],[7,[-10.798353909464822,37.53086419753089]],[8,[-2.1728395061727497,-5.1111111111111995]],[16,[19.75931834024595,4.512540664093933]],[4,[-16.197530864197688,14.61728395061732]],[14,[0.7997581306144639,-0.5767761645364544]],[6,null],[17,[0.17673990847697496,-0.9253757795596016]]],"handle_end":[[9,null],[7,null],[17,null],[5,null],[1,[3.0857646420445235,-0.2303077208630384]],[18,null],[15,null],[16,null],[6,null],[13,[-0.8413105648451165,0.6067432917530482]],[3,null],[8,[0.0,0.0]],[11,[-11.251577773519555,-0.02123410547835647]],[4,null],[10,[-4.337869009581482,-9.544008547471435]],[14,[-0.022878726643284608,0.6863617992941045]],[12,[0.0,0.0]],[19,[1.229080932784882,6.672153635116501]],[20,null],[2,null]],"stroke":[[13,0],[9,0],[17,0],[1,0],[11,0],[2,0],[15,0],[6,0],[18,0],[12,0],[4,0],[3,0],[8,0],[16,0],[20,0],[5,0],[19,0],[7,0],[14,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3927358878935116440,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[1194.2562584220411,420.00000000000006]],[3,[1082.2947341949805,450.0000000000013]],[2,[1082.2947341949798,490.0000000000013]],[1,[1194.2562584220414,520.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[1,1],[3,3]],"end_point":[[1,2],[2,3],[4,1],[3,4]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[6.821210263296962e-13,-40.0]],[1,[0.0,0.0]]],"handle_end":[[1,null],[2,null],[3,[0.0,0.0]],[4,[0.0,-1.1368683772161605e-13]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14255588039347536657,{"inputs":[{"Node":{"node_id":18185020559178852986,"output_index":0,"lambda":false}},{"Node":{"node_id":5261200785298607501,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9640215309187299519,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[3,[746.4101615137856,637.8601932525706]],[2,[1194.2562584220475,517.8601932525687]],[1,[1268.8972745734306,457.8601932525698]],[4,[746.4101615137852,657.8601932525711]],[5,[1268.8972745734306,517.8601932525701]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[2,2],[5,5],[4,4],[1,1]],"end_point":[[4,5],[5,1],[2,3],[3,4],[1,2]],"handle_primary":[[2,[-447.8460969082618,120.00000000000192]],[1,[0.0,0.0]],[5,[0.0,-60.00000000000029]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,null],[5,null],[2,null],[4,null]],"stroke":[[2,0],[1,0],[5,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4101813853952238986,{"inputs":[{"Node":{"node_id":14161755104759532162,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8884703330021429739,{"inputs":[{"Node":{"node_id":16732345645494316637,"output_index":0,"lambda":false}},{"Node":{"node_id":532055960192543062,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2155997486525176376,{"inputs":[{"Node":{"node_id":15595689026000825531,"output_index":0,"lambda":false}},{"Node":{"node_id":7639490284239357347,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13700218159488557234,{"inputs":[{"Node":{"node_id":10181153433637856462,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.4831746395427087,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.49908141270537343,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.5160486374122156,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.65708869278784,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.6729954659505047,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.6899626906573468,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7291993977919214,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7440457194104085,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.7588920410288952,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5008896367526079,0.4999999999999998],"end":[1.0,0.5],"transform":[-1889.35072132725,6.199774420689026e-14,-1.0738324292042565e-13,-506.25000000045327,2021.9872361261616,956.3750000002264]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.4831746395427087,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.49908141270537343,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.5160486374122156,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.65708869278784,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.6729954659505047,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.6899626906573468,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7291993977919214,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7440457194104085,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.7588920410288952,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5008896367526079,0.4999999999999998],"end":[1.0,0.5],"transform":[-1889.35072132725,6.199774420689026e-14,-1.0738324292042565e-13,-506.25000000045327,2021.9872361261616,956.3750000002264]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8863202447825570192,{"inputs":[{"Node":{"node_id":5017082804473894058,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-299.38891648776223,-111.69072674057747]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0616145921394244,1.0616145921394244]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7156963182187517674,{"inputs":[{"Node":{"node_id":14752203606937854133,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565296996,-63.99999999999977]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[322234583139821148,{"inputs":[{"Node":{"node_id":6589978257209505606,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11990662272042254522,{"inputs":[{"Node":{"node_id":1147521068928676110,"output_index":0,"lambda":false}},{"Node":{"node_id":15167880819976070791,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14633096010607565334,{"inputs":[{"Node":{"node_id":18046677540207938977,"output_index":0,"lambda":false}},{"Node":{"node_id":12370676490908282512,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3227544593834141716,{"inputs":[{"Node":{"node_id":8256712316698018135,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053871,-113.9999999999974]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2183401450260403525,{"inputs":[{"Node":{"node_id":16852951849051795674,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11429712783984224234,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":12302362769310895852,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9392462024456293097,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[877.0319397786863,584.9999999999998]],[4,[615.7883832488646,605.0000000000001]],[3,[783.7306695894646,560.0]],[6,[1044.9742261192855,480.0]],[1,[1156.9357503463468,509.9999999999987]],[5,[597.1281292110198,599.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[5,5],[3,3],[6,6],[4,4],[2,2],[1,1]],"end_point":[[5,6],[3,4],[2,3],[6,1],[1,2],[4,5]],"handle_primary":[[4,null],[5,[447.84609690826574,-119.99999999999989]],[2,[0.0,0.0]],[3,null],[1,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[6,[0.0,0.0]],[4,null],[5,null],[2,null],[3,null]],"stroke":[[4,0],[3,0],[6,0],[5,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12331680982485935376,{"inputs":[{"Node":{"node_id":2183401450260403525,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7293479177394283,-0.000903965337796908],"end":[0.7877909957441462,0.5587258938108439],"transform":[508.0879347267641,0.0,0.0,198.0243662458641,767.745306197191,484.2026674087032]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7293479177394283,-0.000903965337796908],"end":[0.7877909957441462,0.5587258938108439],"transform":[508.0879347267641,0.0,0.0,198.0243662458641,767.745306197191,484.2026674087032]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[11634802583144606404,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16852951849051795674,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7339104629465306715,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4898866541060902381,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11547499603328872398,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13287180494862716983,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10779665858841986661,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15595689026000825531,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8612613134760093452,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12370676490908282512,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2465823993152870948,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6556170892691431702,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[514222872092587805,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10477328336261010694,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16847360882244487081,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13837327017498431546,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16261620049358949344,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2032185045476767535,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-36,216]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2310170068575553369,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7067047867039575315,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7030585744407664630,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14341957170885045113,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13700218159488557234,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13868917743026516656,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13001069903842109798,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14124486712683868036,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15216519480392295991,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18187802220803838247,{"persistent_metadata":{"reference":"Blend Mode","display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4847316728405535983,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18431382379595272672,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12331680982485935376,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8166796652234334001,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2640491057355360805,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7171713123860587892,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7884283658260267478,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,15]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15300421479077882117,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5261200785298607501,{"persistent_metadata":{"reference":"Blend Mode","display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17881728913029763313,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14842592386831797498,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16923062582661131268,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9641315149170593327,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7005645574203740491,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15914878146223026034,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3227544593834141716,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14400993470150734626,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3185536512640676801,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16591255610014418910,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16807867745126764195,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14805036488257720752,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10651614176902312108,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11236872744106223256,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,36]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8165914767449151618,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4884180935153120645,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3966971396176820223,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10188337730058049439,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9640215309187299519,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15261165353096835967,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16244305414728361140,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15670426414376277308,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9695624216919732577,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9226731772122225003,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9908869573449854874,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16732345645494316637,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3806549994589872867,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,84]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13207576193421440093,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2452294403891427489,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1658032775659237960,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7948029953091985757,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7259756719760382667,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9771562518763748677,{"persistent_metadata":{"reference":"Merge","display_name":"Plant (Upper Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":39}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2292399603649738346,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[183952488591282082,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15167880819976070791,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17873337220577786871,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12172015233077238737,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[429913874753911073,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5891705401441266824,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2088390810384907709,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,72]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5540780316862276409,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6821938959315178556,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9150078008481575131,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15478704582542175684,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15709488322180832347,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,0]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[194878846429432339,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18085100003956405261,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15517065353723874205,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3014633976566537110,{"persistent_metadata":{"reference":"Merge","display_name":"Boolean Cut","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[70804263053697201,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12931264630175648107,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2062662104423219162,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16564941800301062922,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10810157408196882043,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6569279146800941123,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3670594928372882885,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4741515246389989284,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4187349759243468746,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3679103217373457623,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9981992739451603109,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18371793711669837037,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15166516760575860563,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11895211316848895241,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10181153433637856462,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4069478660487729695,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2900504420179573771,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9935922395919478146,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13696921450692276893,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9393309733761233513,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[729026403095264425,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10507084483235320484,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11076863066321508991,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14234384001010789008,{"persistent_metadata":{"reference":"Merge","display_name":"Plant (Lower Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12360435709959435360,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14752203606937854133,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8884703330021429739,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5434119356821575534,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4887570735033124574,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[322234583139821148,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10742991645899166287,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14791465604033956302,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12930243402848966353,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2510483139353274965,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14633096010607565334,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14330881008352607546,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10917301734480569398,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10189927996178548902,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9798215931018813676,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9392462024456293097,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12998832508553378533,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4101813853952238986,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17887542695709892422,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,126]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11595529463602678384,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2189393878093040029,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14055195208113082127,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,48]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1490537476612110327,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17533670083736420411,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14255588039347536657,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,255]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13743495762122910279,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8256712316698018135,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1108089904278882840,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4757672276235057645,{"persistent_metadata":{"reference":"Merge","display_name":"Plant (Right)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11490835759023283071,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8015732980153557800,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15488533792651297821,{"persistent_metadata":{"reference":"Merge","display_name":"Structure Reflection","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16510804133693080967,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8863202447825570192,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13942146309185231085,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4191887059541031673,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13531127678140037818,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2791109467690716388,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3365825508845848745,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6777328619777499144,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5346759588580719138,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12537712543904859919,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8034980397175569257,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16416441286881083283,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12554549497938935061,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10431241258085047322,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9157963288496356916,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11860177410232537211,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2183401450260403525,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9210109719406330381,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18185020559178852986,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5574499968250848265,{"persistent_metadata":{"reference":"Merge","display_name":"Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7340659059180155803,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-44,219]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13946577152348504742,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12019361655085452072,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4740496570730418920,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,24]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13747030364552895864,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[532055960192543062,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5258402282444994019,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4105329493214975815,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14161755104759532162,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4968550668755026811,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11579925754926059876,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13920465562072008593,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[764189229787475993,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2058192342619930156,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13701442050580061197,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10852750245702849075,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9724746185253267560,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,36]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14449710315388146362,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13609749019463823009,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3122972215852775755,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15775513677915164685,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11776939455674933130,{"persistent_metadata":{"reference":"Merge","display_name":"Backdrop Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2785423879796980286,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4243146970185091100,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11506204916439878896,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17250040304106119844,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,39]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17965270694495451178,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,96]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15876464101883822838,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16398743435291795904,{"persistent_metadata":{"reference":"Merge","display_name":"Fountain Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":36}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9409313765472227540,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14102693648424950146,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1147521068928676110,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2843751023378786714,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[664587514588499648,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16069762220015310717,{"persistent_metadata":{"reference":"Merge","display_name":"Fountain Water Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":87}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8073807569018624098,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7838724497953148309,{"persistent_metadata":{"reference":"Merge","display_name":"Geometric Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-9,3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[585709295659496998,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11479492521093639512,{"persistent_metadata":{"reference":"Blend Mode","display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15898396405528650339,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5925268772265373737,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5365849201631468915,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7799679303995308634,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7910743362843097140,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,30]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7639490284239357347,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12469956387875933942,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18046677540207938977,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11221222899304956410,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6589978257209505606,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[326112971739898070,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,21]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8891726805381758817,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1831743139584171612,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[57904581517036791,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3970872207068447290,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17332567356044944766,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8343201730608263656,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13942787566051910019,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3927358878935116440,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5448146793323825465,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12875121980058869686,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13442128106088307772,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13817976820605296433,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12302362769310895852,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13861850149743924125,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11158238411769751544,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15347111149235590492,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1229809699395562135,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11429712783984224234,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1268775104597510914,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16229837691656808412,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10989897386232385465,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1032659476619711014,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9138781233934614517,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15723520455917422372,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4323461535289334196,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2155997486525176376,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7861616450605235840,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10849502918952703647,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3616319631707471648,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4837219841531371489,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4197544064668946479,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,27]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7952384394377946257,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4134257789770357215,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14483299526002574058,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14202574750104046500,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3455270778005546310,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18128923159828618806,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[972153153989181918,{"persistent_metadata":{"reference":"Merge","display_name":"Sphere Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6006052038693767172,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2921219300441868542,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17638504852426495381,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16727310898641763441,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7671691070850213967,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[456239140723765386,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13852123721901366011,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5317925967883407701,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12683405703338263457,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1104068854328504126,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8028812053913481975,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9278774434958175105,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4046495708656778502,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5670058004691708784,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2077983679740571162,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3564067978712674849,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2225749123534781340,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13853529851208960143,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1156213189397385283,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,18]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6785205785632793666,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14449527838292182035,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9666682009015049330,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[958845362613832240,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16059265180575745658,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,33]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2036609094647228373,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12548387328300782726,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12852312236973354891,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5326013268137833446,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8508454285877707748,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9663740787529879916,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4924169570021915606,{"persistent_metadata":{"reference":"Merge","display_name":"Sphere","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6868877732348460627,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9993538712344947860,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6142412830271644616,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,39]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7156963182187517674,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[938033825024582130,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9684750473849891261,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18011777376689315137,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5017082804473894058,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,60]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3680957604830907751,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3021739385836969518,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16793555741218543212,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8242413775403456296,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9323583246068171750,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10564228200140683112,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2881239077602364410,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8463468388280418154,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17433098630591807963,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9115451226763736660,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15157035456876170143,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17785019773455930267,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15134939288287905620,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8181290118694677328,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4398598693761352299,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1396768435017101055,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2209276411833629008,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17059035448296015006,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11450962621506425680,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14019233912018234740,{"persistent_metadata":{"reference":"Merge","display_name":"Structure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":27}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8958782938691501404,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11990662272042254522,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7637119583909417127,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5882319123081134737,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,189]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11634445349252640936,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[693.0,-4081.136664739667],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,693.0,-4081.0],"node_graph_top_right":[1468.796875,0.0]},"selection_undo_history":[[],[],[],[],[],[15517065353723874205],[7340659059180155803],[7340659059180155803,13442128106088307772,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[16398743435291795904,4741515246389989284,14255588039347536657,5261200785298607501,2465823993152870948,15898396405528650339,16807867745126764195,18185020559178852986,4847316728405535983,11579925754926059876,15670426414376277308,5574499968250848265,5925268772265373737,4105329493214975815,12931264630175648107,11776939455674933130,9684750473849891261,70804263053697201,13942787566051910019],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[16398743435291795904,4741515246389989284,14255588039347536657,5261200785298607501,2465823993152870948,15898396405528650339,16807867745126764195,18185020559178852986,4847316728405535983,11579925754926059876,15670426414376277308,5574499968250848265,5925268772265373737,4105329493214975815,12931264630175648107,11776939455674933130,9684750473849891261,70804263053697201,13942787566051910019],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766,1268775104597510914,18011777376689315137,10564228200140683112,13001069903842109798,13861850149743924125,5891705401441266824,5670058004691708784],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[13442128106088307772],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766,1268775104597510914,18011777376689315137,10564228200140683112,13001069903842109798],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[13861850149743924125],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[1268775104597510914],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10188337730058049439],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[9157963288496356916],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10507084483235320484],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10989897386232385465],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[18431382379595272672],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7171713123860587892],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[2032185045476767535],[]],"selection_redo_history":[]}}},"collapsed":[7838724497953148310,9771562518763748678,14234384001010789009,4757672276235057646,4924169570021915607,15488533792651297822,16398743435291795905,972153153989181919,14019233912018234741,5574499968250848266,11776939455674933131,2032185045476767536,16069762220015310718],"name":"isometric-fountain.graphite","commit_hash":"8d83fa707928a1c54fe10224695a0c4791ab3501","document_ptz":{"pan":[-639.4105997694348,-319.94980900906876],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Isometric":{"y_axis_spacing":20.0,"angle_a":15.0,"angle_b":15.0}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.60784316,"green":0.60784316,"blue":0.60784316,"alpha":0.25},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":15709488322180832347,"output_index":0}}],"nodes":[[10507084483235320484,{"inputs":[{"Node":{"node_id":9157963288496356916,"output_index":0}},{"Node":{"node_id":1396768435017101055,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4741515246389989284,{"inputs":[{"Node":{"node_id":14255588039347536657,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4105329493214975815,{"inputs":[{"Node":{"node_id":12931264630175648107,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969916,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16229837691656808412,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[74.85684586229115,93.12923138495351]],[3,[130.01864188394373,17.639788893964138]],[4,[119.2038270691288,10.452135486817724]],[2,[76.83345669875837,107.20900827532364]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[-7.85185185185199,56.395434425300664]],[4,[43.97876382175265,-36.84748630595526]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12172015233077238737,{"inputs":[{"Node":{"node_id":13287180494862716983,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[15166516760575860563,{"inputs":[{"Node":{"node_id":18085100003956405261,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-115.11453403741598]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10477328336261010694,{"inputs":[{"Node":{"node_id":10189927996178548902,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970024,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3185536512640676801,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4101813853952238986,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5258402282444994019,{"inputs":[{"Node":{"node_id":958845362613832240,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-299.97967195575075,-74.37931084632919]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999984,0.9999999999999984]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3970872207068447290,{"inputs":[{"Node":{"node_id":2077983679740571162,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1.2314781197853364,-154.7967075368743]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.0453527814904993},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.809730022247584,0.552568608414892]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.4027772116731048,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9115451226763736660,{"inputs":[{"Node":{"node_id":7067047867039575315,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.4745098,"green":0.68235296,"blue":0.60784316,"alpha":1.0}],[1.0,{"red":0.5568628,"green":0.7529412,"blue":0.6392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.02103945787988068,0.9859744936226362],"end":[0.6072632276568447,0.28531051081023584]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.4745098,"green":0.68235296,"blue":0.60784316,"alpha":1.0}],[1.0,{"red":0.5568628,"green":0.7529412,"blue":0.6392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.02103945787988068,0.9859744936226362],"end":[0.6072632276568447,0.28531051081023584]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11860177410232537211,{"inputs":[{"Node":{"node_id":5882319123081134737,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4197544064668946479,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[2,[363.87495373796554,587.4999999999999]],[3,[345.21469970012123,592.5]],[4,[419.8557158514987,612.5]],[1,[391.8653347947321,595.0]],[5,[615.7883832488644,560.0000000000001]],[6,[634.4486372867087,565.0]],[7,[578.4678751731759,580.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[4,4],[5,5],[2,2],[1,1],[3,3]],"end_point":[[5,6],[2,3],[4,5],[1,2],[6,7],[3,4]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[6,0],[5,0],[4,0],[3,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14019233912018234740,{"inputs":[{"Node":{"node_id":16069762220015310717,"output_index":0}},{"Node":{"node_id":17785019773455930267,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5448146793323825465,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[783.730669589464,550.0]],[4,[895.6921938165308,580.0000000000001]],[2,[597.1281292110198,599.9999999999999]],[1,[709.0896534380863,630.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[4,1],[3,4],[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4187349759243468746,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[15,[615.4183813443072,491.19341563786]],[5,[574.0246913580246,440.2962962962963]],[2,[533.9259259259258,420.7407407407407]],[11,[615.6378600823045,431.5390946502058]],[13,[609.7997256515774,497.6899862825788]],[3,[589.8710562414265,497.0754458161865]],[9,[606.0246913580247,486.803840877915]],[7,[596.3676268861453,491.9835390946502]],[1,[583.5500685871057,499.53360768175577]],[8,[580.9382716049382,401.9753086419752]],[16,[616.0751917898693,491.077444156548]],[12,[609.0096021947874,496.4609053497942]],[6,[594.4362139917694,493.6515775034293]],[17,[668.3566529492455,433.2510288065844]],[18,[618.4910836762688,499.9725651577503]],[4,[591.18792866941,498.3045267489712]],[10,[607.8683127572016,488.3840877914952]],[14,[650.6666666666667,398.2222222222223]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[14,14],[6,6],[4,4],[8,8],[2,2],[12,12],[18,18],[11,11],[16,16],[13,13],[5,5],[9,9],[7,7],[10,10],[1,1],[17,17],[15,15],[3,3]],"end_point":[[14,15],[7,8],[1,2],[9,10],[13,14],[11,12],[8,9],[15,16],[12,13],[10,11],[3,4],[16,17],[6,7],[18,1],[2,3],[5,6],[4,5],[17,18]],"handle_primary":[[15,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[7,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[6,[0.0,0.0]],[16,[0.0,0.0]],[9,[0.0,0.0]],[17,[-38.27709190672158,34.5020576131688]],[10,[0.0,0.0]],[2,[44.005486968450214,35.16049382716062]],[12,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[11,[-3.906721536351256,29.62962962962956]],[3,[0.0,0.0]],[13,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[18,[-6.945585968035971,18.68277302655963]]],"handle_end":[[5,null],[17,null],[3,[0.0,0.0]],[4,[21.113854595336193,37.201646090535064]],[18,[7.8075669002856785,13.340866152962064]],[7,[25.964334705075316,61.47599451303165]],[12,[0.0,0.0]],[16,[-35.29218106995893,26.337448559670804]],[15,[0.0,0.0]],[6,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[8,null],[10,[-6.189300411522709,26.732510288065782]],[1,[48.21947873799752,48.855967078189394]],[9,[0.0,0.0]],[14,null],[11,[0.0,0.0]],[2,null]],"stroke":[[1,0],[10,0],[16,0],[17,0],[7,0],[14,0],[2,0],[18,0],[5,0],[12,0],[15,0],[4,0],[8,0],[13,0],[3,0],[6,0],[11,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9684750473849891261,{"inputs":[{"Node":{"node_id":70804263053697201,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.96862745,"green":0.8352941,"blue":0.62352943,"alpha":1.0}],[0.5772391174087621,{"red":0.7921569,"green":0.8019608,"blue":0.6450981,"alpha":1.0}],[1.0,{"red":0.6156863,"green":0.76862746,"blue":0.6666667,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.96862745,"green":0.8352941,"blue":0.62352943,"alpha":1.0}],[0.5772391174087621,{"red":0.7921569,"green":0.8019608,"blue":0.6450981,"alpha":1.0}],[1.0,{"red":0.6156863,"green":0.76862746,"blue":0.6666667,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13531127678140037818,{"inputs":[{"Node":{"node_id":3970872207068447290,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14055195208113082127,{"inputs":[{"Node":{"node_id":2510483139353274965,"output_index":0}},{"Node":{"node_id":12360435709959435360,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18187802220803838247,{"inputs":[{"Node":{"node_id":11634445349252640936,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Screen"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false}],[8015732980153557800,{"inputs":[{"Node":{"node_id":3806549994589872867,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297002,-70.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2791109467690716388,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[877.0319397786863,584.9999999999998]],[1,[1156.9357503463468,509.9999999999987]],[3,[783.7306695894646,560.0]],[4,[615.5514854925251,605.0634765625002]],[6,[1044.9742261192855,480.0]],[5,[596.8912314546803,600.0634765625]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[6,6],[5,5]],"end_point":[[2,3],[5,6],[3,4],[4,5],[1,2],[6,1]],"handle_primary":[[6,[0.0,0.0]],[2,[0.0,0.0]],[4,null],[3,null],[1,[0.0,0.0]],[5,[448.0829946646052,-120.0634765625]]],"handle_end":[[1,[0.0,0.0]],[3,null],[2,null],[6,[0.0,0.0]],[5,null],[4,null]],"stroke":[[6,0],[3,0],[4,0],[2,0],[5,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13747030364552895864,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[1156.9357503463516,540.0]],[3,[1231.6308657449686,540.0144958496094]],[2,[1231.576766497729,510.00000000000233]],[1,[709.0896534380864,650.0]],[5,[709.0896534380863,660.0]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[3,3],[4,4],[1,1],[2,2]],"end_point":[[1,2],[2,3],[4,5],[5,1],[3,4]],"handle_primary":[[4,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]],[2,[0.0,0.0]],[5,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[5,[-2.273736754432321e-13,-2.273736754432321e-13]],[2,null],[3,null]],"stroke":[[4,0],[1,0],[3,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8034980397175569257,{"inputs":[{"Node":{"node_id":4243146970185091100,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,48.820258260598735]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11776939455674933130,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":9684750473849891261,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4968550668755026811,{"inputs":[{"Node":{"node_id":585709295659496998,"output_index":0}},{"Node":{"node_id":13609749019463823009,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17533670083736420411,{"inputs":[{"Node":{"node_id":7005645574203740491,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.8397260273972602,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9711254481326403,-0.313902431217137],"end":[1.0169100960157926,0.2104743282968058]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.8397260273972602,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9711254481326403,-0.313902431217137],"end":[1.0169100960157926,0.2104743282968058]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12683405703338263457,{"inputs":[{"Node":{"node_id":12537712543904859919,"output_index":0}},{"Node":{"node_id":14449710315388146362,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1229809699395562135,{"inputs":[{"Node":{"node_id":2843751023378786714,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-36.95875397623445,-88.44786737074935]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.442673035713692,1.442673035713692]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12302362769310895852,{"inputs":[{"Node":{"node_id":15347111149235590492,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.8014369,"green":0.8203125,"blue":0.63446045,"alpha":1.0}],[0.4047792425110607,{"red":0.70046544,"green":0.765625,"blue":0.57421875,"alpha":1.0}],[0.6425390774124099,{"red":0.6,"green":0.70980394,"blue":0.56078434,"alpha":1.0}],[0.8010456340133093,{"red":0.47058824,"green":0.6509804,"blue":0.53333336,"alpha":1.0}],[0.894708599277477,{"red":0.40392157,"green":0.6117647,"blue":0.5176471,"alpha":1.0}],[1.0,{"red":0.26666668,"green":0.5176471,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5027713289486062,0.6166666666666667],"end":[0.502771328948606,-0.08890027761186703]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.8014369,"green":0.8203125,"blue":0.63446045,"alpha":1.0}],[0.4047792425110607,{"red":0.70046544,"green":0.765625,"blue":0.57421875,"alpha":1.0}],[0.6425390774124099,{"red":0.6,"green":0.70980394,"blue":0.56078434,"alpha":1.0}],[0.8010456340133093,{"red":0.47058824,"green":0.6509804,"blue":0.53333336,"alpha":1.0}],[0.894708599277477,{"red":0.40392157,"green":0.6117647,"blue":0.5176471,"alpha":1.0}],[1.0,{"red":0.26666668,"green":0.5176471,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5027713289486062,0.6166666666666667],"end":[0.502771328948606,-0.08890027761186703]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15488533792651297821,{"inputs":[{"Node":{"node_id":14019233912018234740,"output_index":0}},{"Node":{"node_id":183952488591282082,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14791465604033956302,{"inputs":[{"Node":{"node_id":18187802220803838247,"output_index":0}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[1147521068928676110,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":938033825024582130,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6821938959315178556,{"inputs":[{"Node":{"node_id":12683405703338263457,"output_index":0}},{"Node":{"node_id":5326013268137833446,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1490537476612110327,{"inputs":[{"Node":{"node_id":2900504420179573771,"output_index":0}},{"Node":{"node_id":429913874753911073,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3365825508845848745,{"inputs":[{"Node":{"node_id":7156963182187517674,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.4509804,"green":0.6745098,"blue":0.627451,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008641111778101118,0.8823529411764692],"end":[0.9918085332369128,0.12352941176470456]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.4509804,"green":0.6745098,"blue":0.627451,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008641111778101118,0.8823529411764692],"end":[0.9918085332369128,0.12352941176470456]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9157963288496356916,{"inputs":[{"Node":{"node_id":10188337730058049439,"output_index":0}},{"Node":{"node_id":1108089904278882840,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3679103217373457623,{"inputs":[{"Node":{"node_id":7910743362843097140,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[13442128106088307772,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13700218159488557234,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2225749123534781340,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1128.9453692895852,537.5000000000001]],[4,[1110.285115251741,542.5]],[1,[1138.2754963085072,550.0000000000001]],[2,[1156.9357503463518,545.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[1,1],[2,2]],"end_point":[[4,1],[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11490835759023283071,{"inputs":[{"Node":{"node_id":16923062582661131268,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15517065353723874205,{"inputs":[{"Node":{"node_id":3616319631707471648,"output_index":0}},{"Node":{"node_id":12548387328300782726,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3014633976566537110,{"inputs":[{"Node":{"node_id":5346759588580719138,"output_index":0}},{"Node":{"node_id":11860177410232537211,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9981992739451603109,{"inputs":[{"Node":{"node_id":13852123721901366011,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.16078432,"green":0.2901961,"blue":0.16078432,"alpha":0.59765625}],[0.8744713248939212,{"red":0.16078432,"green":0.29411766,"blue":0.16078432,"alpha":0.4453125}],[1.0,{"red":0.16078432,"green":0.2784314,"blue":0.16078432,"alpha":0.2109375}]],"gradient_type":"Radial","start":[0.4917953695426216,3.5168687748431413],"end":[0.4917953695426216,-0.06740196271505461]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.16078432,"green":0.2901961,"blue":0.16078432,"alpha":0.59765625}],[0.8744713248939212,{"red":0.16078432,"green":0.29411766,"blue":0.16078432,"alpha":0.4453125}],[1.0,{"red":0.16078432,"green":0.2784314,"blue":0.16078432,"alpha":0.2109375}]],"gradient_type":"Radial","start":[0.4917953695426216,3.5168687748431413],"end":[0.4917953695426216,-0.06740196271505461]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18128923159828618806,{"inputs":[{"Node":{"node_id":1229809699395562135,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}],[0.3267294443765037,{"red":0.45324707,"green":0.734375,"blue":0.5498848,"alpha":1.0}],[0.5703803350862179,{"red":0.72745097,"green":0.7784314,"blue":0.5235294,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4425774215957188,0.8669102822986486],"end":[0.40311512028827146,0.4061330859327766]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}],[0.3267294443765037,{"red":0.45324707,"green":0.734375,"blue":0.5498848,"alpha":1.0}],[0.5703803350862179,{"red":0.72745097,"green":0.7784314,"blue":0.5235294,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4425774215957188,0.8669102822986486],"end":[0.40311512028827146,0.4061330859327766]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1156213189397385283,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[65.3108891324556,617.5]],[3,[83.97114317030051,612.4999999999999]],[4,[74.64101615137773,610.0]],[1,[55.98076211353359,615.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[3,4],[2,3],[4,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8891726805381758817,{"inputs":[{"Node":{"node_id":17332567356044944766,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-74.42590421819692,41.71533421869417]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.6752258214141986},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[38.26905454222045,23.541084128981048]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4371138567686068,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12998832508553378533,{"inputs":[{"Node":{"node_id":3122972215852775755,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.46666667,"green":0.7019608,"blue":0.654902,"alpha":1.0}],[0.5,{"red":0.44313726,"green":0.68235296,"blue":0.6313726,"alpha":1.0}],[1.0,{"red":0.40784314,"green":0.627451,"blue":0.6,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0051615000620980345,0.22838569993468072],"end":[0.9899367003601665,0.951087390077165]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.46666667,"green":0.7019608,"blue":0.654902,"alpha":1.0}],[0.5,{"red":0.44313726,"green":0.68235296,"blue":0.6313726,"alpha":1.0}],[1.0,{"red":0.40784314,"green":0.627451,"blue":0.6,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0051615000620980345,0.22838569993468072],"end":[0.9899367003601665,0.951087390077165]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9798215931018813676,{"inputs":[{"Node":{"node_id":10779665858841986661,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9210109719406330381,{"inputs":[{"Node":{"node_id":8612613134760093452,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9409313765472227540,{"inputs":[{"Node":{"node_id":6821938959315178556,"output_index":0}},{"Node":{"node_id":8463468388280418154,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13920465562072008593,{"inputs":[{"Node":{"node_id":3670594928372882885,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3122972215852775755,{"inputs":[{"Node":{"node_id":10431241258085047322,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3564067978712674849,{"inputs":[{"Node":{"node_id":6777328619777499144,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970075,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2189393878093040029,{"inputs":[{"Node":{"node_id":15478704582542175684,"output_index":0}},{"Node":{"node_id":17533670083736420411,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10917301734480569398,{"inputs":[{"Node":{"node_id":3455270778005546310,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13946577152348504742,{"inputs":[{"Node":{"node_id":3021739385836969518,"output_index":0}},{"Node":{"node_id":15876464101883822838,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2510483139353274965,{"inputs":[{"Node":{"node_id":14202574750104046500,"output_index":0}},{"Node":{"node_id":18128923159828618806,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16847360882244487081,{"inputs":[{"Node":{"node_id":13817976820605296433,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.9490196,"green":0.92156863,"blue":0.7411765,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6476985249926699,0.10666666666666667],"end":[0.9920644403070608,0.4398792234469302]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.9490196,"green":0.92156863,"blue":0.7411765,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6476985249926699,0.10666666666666667],"end":[0.9920644403070608,0.4398792234469302]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7671691070850213967,{"inputs":[{"Node":{"node_id":1658032775659237960,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.22091675,"green":0.4453125,"blue":0.44150904,"alpha":1.0}],[0.6048571201787465,{"red":0.3202623,"green":0.5461857,"blue":0.5423232,"alpha":0.859375}],[0.8131497297124398,{"red":0.41960785,"green":0.64705884,"blue":0.6431373,"alpha":0.71875}],[1.0,{"red":0.43137255,"green":0.61960787,"blue":0.5803922,"alpha":0.3984375}]],"gradient_type":"Radial","start":[0.3691427845059252,-2.109375000000002],"end":[0.05794738050227899,1.089204545454546]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.22091675,"green":0.4453125,"blue":0.44150904,"alpha":1.0}],[0.6048571201787465,{"red":0.3202623,"green":0.5461857,"blue":0.5423232,"alpha":0.859375}],[0.8131497297124398,{"red":0.41960785,"green":0.64705884,"blue":0.6431373,"alpha":0.71875}],[1.0,{"red":0.43137255,"green":0.61960787,"blue":0.5803922,"alpha":0.3984375}]],"gradient_type":"Radial","start":[0.3691427845059252,-2.109375000000002],"end":[0.05794738050227899,1.089204545454546]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16244305414728361140,{"inputs":[{"Node":{"node_id":11547499603328872398,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5294118,"green":0.7490196,"blue":0.65882355,"alpha":1.0}],[1.0,{"red":0.46666667,"green":0.69803923,"blue":0.62352943,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008550171763040293,0.13076923076922986],"end":[0.99103054401049,0.7769230769230764]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5294118,"green":0.7490196,"blue":0.65882355,"alpha":1.0}],[1.0,{"red":0.46666667,"green":0.69803923,"blue":0.62352943,"alpha":1.0}]],"gradient_type":"Linear","start":[0.008550171763040293,0.13076923076922986],"end":[0.99103054401049,0.7769230769230764]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9724746185253267560,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[9,[1222.2466394788075,476.5000000000001]],[11,[1175.5960043841962,474.00000000000006]],[7,[1138.2754963085074,473.99999999999994]],[8,[1184.9261314031187,486.5]],[10,[1194.2562584220411,469.00000000000006]],[2,[1063.63448015713,453.99999999999994]],[1,[1091.6248612138966,461.5]],[4,[1184.9261314031187,496.5]],[3,[1044.9742261192855,459.0]],[6,[1194.256258422041,458.99999999999994]],[5,[1259.567147554496,476.49999999999994]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[3,3],[1,1],[6,6],[5,5],[9,9],[8,8],[10,10],[4,4],[2,2],[7,7]],"end_point":[[2,3],[6,7],[7,8],[3,4],[4,5],[9,10],[1,2],[10,11],[8,9],[5,6]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[7,[0.0,0.0]],[6,[0.0,0.0]],[1,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]],[9,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[9,[0.0,0.0]],[4,[0.0,0.0]],[10,[0.0,0.0]],[8,[0.0,0.0]],[7,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[10,0],[9,0],[4,0],[7,0],[8,0],[6,0],[5,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1108089904278882840,{"inputs":[{"Node":{"node_id":5317925967883407701,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13001069903842109798,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0311603768047983,1.0082447817061446]],[4,[0.15793848790232112,1.0756444843098496]],[2,[1.067391838882569,0.5169672994595966]],[1,[0.02964805558748984,0.4451546735104888]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[3,4],[1,2],[2,3],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[-0.4856258676143469,-0.19200483651697595]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[2,null],[1,[0.0,0.0]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4837219841531371489,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1343.5382907247958,320.00000000000006]],[4,[597.1281292110205,340.0000000000001]],[1,[933.0127018922194,430.0]],[3,[1007.6537180435968,230.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[3,4],[2,3],[4,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[2,0],[3,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17785019773455930267,{"inputs":[{"Node":{"node_id":17887542695709892422,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,-6.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10189927996178548902,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[298.56406460551045,540.0000000000002]],[2,[298.5640646055101,570.0000000000006]],[5,[709.0896534380867,660.0]],[3,[597.1281292110203,649.9999999999999]],[6,[709.0896534380864,649.9999999999999]],[4,[597.1281292110198,630.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[6,6],[5,5],[4,4],[3,3],[2,2]],"end_point":[[1,2],[4,5],[3,4],[6,1],[5,6],[2,3]],"handle_primary":[[1,[0.0,0.0]],[3,[-5.684341886080801e-13,-19.999999999999886]],[2,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]],[5,[-2.273736754432321e-13,-10.000000000000114]]],"handle_end":[[3,null],[4,null],[1,[0.0,0.0]],[6,[0.0,0.0]],[2,null],[5,null]],"stroke":[[5,0],[2,0],[1,0],[6,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13868917743026516656,{"inputs":[{"Node":{"node_id":5258402282444994019,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.9529412,"green":0.83137256,"blue":0.49411765,"alpha":1.0}],[0.5,{"red":0.6039216,"green":0.77254903,"blue":0.6117647,"alpha":1.0}],[1.0,{"red":0.48010254,"green":0.71875,"blue":0.58451086,"alpha":1.0}]],"gradient_type":"Radial","start":[0.990188567383927,0.031432585832447346],"end":[0.003820820042059303,0.7823921936299838]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.9529412,"green":0.83137256,"blue":0.49411765,"alpha":1.0}],[0.5,{"red":0.6039216,"green":0.77254903,"blue":0.6117647,"alpha":1.0}],[1.0,{"red":0.48010254,"green":0.71875,"blue":0.58451086,"alpha":1.0}]],"gradient_type":"Radial","start":[0.990188567383927,0.031432585832447346],"end":[0.003820820042059303,0.7823921936299838]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9393309733761233513,{"inputs":[{"Node":{"node_id":13946577152348504742,"output_index":0}},{"Node":{"node_id":11895211316848895241,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11634802583144606404,{"inputs":[{"Node":{"node_id":9226731772122225003,"output_index":0}},{"Node":{"node_id":6868877732348460627,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8165914767449151618,{"inputs":[{"Node":{"node_id":11158238411769751544,"output_index":0}},{"Node":{"node_id":13942146309185231085,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14400993470150734626,{"inputs":[{"Node":{"node_id":2088390810384907709,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-69.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14202574750104046500,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":1831743139584171612,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15216519480392295991,{"inputs":[{"Node":{"node_id":12019361655085452072,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.01}],[0.6837652235970189,{"red":0.6666667,"green":0.6666667,"blue":0.6666667,"alpha":0.011764706}],[0.7972664177223364,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.53515625}],[1.0,{"red":0.9647059,"green":0.7607843,"blue":0.5568628,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5377061694297174,0.1861799653787184],"end":[0.4291107938423666,0.936951921882358]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.01}],[0.6837652235970189,{"red":0.6666667,"green":0.6666667,"blue":0.6666667,"alpha":0.011764706}],[0.7972664177223364,{"red":0.79607844,"green":0.7607843,"blue":0.57254905,"alpha":0.53515625}],[1.0,{"red":0.9647059,"green":0.7607843,"blue":0.5568628,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5377061694297174,0.1861799653787184],"end":[0.4291107938423666,0.936951921882358]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1831743139584171612,{"inputs":[{"Node":{"node_id":6569279146800941123,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12360435709959435360,{"inputs":[{"Node":{"node_id":15723520455917422372,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.47843137,"green":0.7294118,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5005723020410011,0.4324498034559026],"end":[0.5007962736667897,0.9150264743070644]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.47843137,"green":0.7294118,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.39215687,"green":0.6392157,"blue":0.4745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5005723020410011,0.4324498034559026],"end":[0.5007962736667897,0.9150264743070644]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2077983679740571162,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-137.83320996790803,20.957167389569804]],[3,[-119.7591358938339,55.2367451774976]],[4,[-124.49987663457466,76.24680898300153]],[2,[-130.2776544123526,8.793446239014884]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[2,3],[1,2],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[6.814814814814781,36.49116345166567]],[2,[-5.037037037036939,-9.952135486817731]],[3,[0.0,0.0]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2058192342619930156,{"inputs":[{"Node":{"node_id":2155997486525176376,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,-5.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10181153433637856462,{"inputs":[{"Node":{"node_id":9150078008481575131,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[187.102540378,187.10254037799996]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.205080756,373.205080756]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11579925754926059876,{"inputs":[{"Node":{"node_id":15670426414376277308,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1175.596004383839,384.99999999999983]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[410.52558883186134,109.99999999999974]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9138781233934614517,{"inputs":[{"Node":{"node_id":8073807569018624098,"output_index":0}},{"Node":{"node_id":4884180935153120645,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12370676490908282512,{"inputs":[{"Node":{"node_id":9666682009015049330,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.643741535074667,{"red":0.27450982,"green":0.49411765,"blue":0.5137255,"alpha":0.5019608}],[0.8214781907174007,{"red":0.27450982,"green":0.5019608,"blue":0.52156866,"alpha":0.17254902}],[1.0,{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569}]],"gradient_type":"Linear","start":[0.8142178455184718,0.014814814814815058],"end":[0.8217337510617708,0.33779273207824057]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.643741535074667,{"red":0.27450982,"green":0.49411765,"blue":0.5137255,"alpha":0.5019608}],[0.8214781907174007,{"red":0.27450982,"green":0.5019608,"blue":0.52156866,"alpha":0.17254902}],[1.0,{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.003921569}]],"gradient_type":"Linear","start":[0.8142178455184718,0.014814814814815058],"end":[0.8217337510617708,0.33779273207824057]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16261620049358949344,{"inputs":[{"Node":{"node_id":16059265180575745658,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[7340659059180155803,{"inputs":[{"Node":{"node_id":7171713123860587892,"output_index":0}},{"Node":{"node_id":13531127678140037818,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6589978257209505606,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[709.0896534380868,410.0000000000001]],[3,[821.0511776651532,440.0000000000001]],[2,[709.0896534380868,470.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[1,1],[2,2]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16398743435291795904,{"inputs":[{"Node":{"node_id":5574499968250848265,"output_index":0}},{"Node":{"node_id":4741515246389989284,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8181290118694677328,{"inputs":[{"Node":{"node_id":5540780316862276409,"output_index":0}},{"Node":{"node_id":17638504852426495381,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13837327017498431546,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[3,[746.4101615137755,574.0]],[12,[1287.5575286112626,593.9999999999999]],[9,[1063.63448015713,504.0000000000001]],[10,[914.3524478543748,464.0]],[4,[718.4197804570089,566.5]],[6,[765.0704155516199,533.9999999999999]],[5,[802.3909236273088,543.9999999999999]],[2,[774.4005425705421,566.5]],[7,[634.4486372867094,569.0000000000001]],[1,[662.4390183434757,536.5]],[11,[858.3716857408418,479.00000000000006]],[8,[727.7499074759312,594.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[4,4],[10,10],[7,7],[6,6],[5,5],[9,9],[11,11],[3,3],[2,2],[1,1],[8,8]],"end_point":[[2,3],[10,11],[6,7],[7,8],[11,12],[1,2],[8,9],[9,10],[5,6],[4,5],[3,4]],"handle_primary":[[11,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[10,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[11,[0.0,0.0]],[6,[0.0,0.0]],[9,[0.0,0.0]],[8,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[10,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[6,0],[4,0],[5,0],[10,0],[8,0],[2,0],[11,0],[7,0],[9,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[183952488591282082,{"inputs":[{"Node":{"node_id":17965270694495451178,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,-6.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1032659476619711014,{"inputs":[{"Node":{"node_id":3014633976566537110,"output_index":0}},{"Node":{"node_id":2452294403891427489,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5670058004691708784,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[-115.759135893834,30.3564064604534]],[1,[-109.83320996790816,-37.64985269946783]],[3,[-130.2776544123526,8.793446239014884]],[2,[-117.83320996790816,-58.65991650497199]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[1,[0.0,0.0]],[3,[-0.7407407407406481,44.23171327474574]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[4,[-12.740740740740762,23.22164946924204]],[2,[0.7407407407406481,-44.23171327474574]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11221222899304956410,{"inputs":[{"Node":{"node_id":5448146793323825465,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8242413775403456296,{"inputs":[{"Node":{"node_id":9138781233934614517,"output_index":0}},{"Node":{"node_id":9115451226763736660,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15157035456876170143,{"inputs":[{"Node":{"node_id":17059035448296015006,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9150078008481575131,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,0.5]],[3,[0.5,1.0]],[2,[1.0,0.5]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[4,1],[1,2],[2,3],[3,4]],"handle_primary":[[4,[0.0,-0.275892388889507]],[3,[-0.275892388889507,0.0]],[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]]],"handle_end":[[3,[0.0,0.27589238888950707]],[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]],[2,[0.27589238888950707,0.0]]],"stroke":[[2,0],[4,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15775513677915164685,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[8,[701.8247218411828,611.4580094497792]],[17,[749.8271604938273,587.4567901234568]],[3,[699.7421124828531,603.0617283950616]],[5,[662.6063100137173,612.5432098765428]],[13,[734.8148148148149,620.9492455418381]],[1,[699.8518518518516,598.1234567901233]],[18,[725.5089163237311,594.6117969821673]],[11,[713.6278006401462,612.5505258344765]],[10,[709.413808870599,616.4718792866942]],[7,[692.1871665904588,615.6720012193263]],[9,[709.3552812071331,611.4970278920897]],[15,[763.4567901234569,605.6296296296294]],[16,[726.2990397805214,601.9862825788753]],[6,[695.3964334705074,609.7777777777776]],[2,[667.3909465020577,593.3827160493828]],[4,[682.3593964334707,606.4197530864195]],[14,[728.493827160494,609.9753086419753]],[12,[721.9094650205761,611.3799725651577]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[3,3],[7,7],[8,8],[2,2],[17,17],[11,11],[12,12],[15,15],[13,13],[10,10],[9,9],[6,6],[5,5],[1,1],[16,16],[18,18],[4,4],[14,14]],"end_point":[[3,4],[11,12],[4,5],[14,15],[2,3],[13,14],[18,1],[17,18],[6,7],[12,13],[15,16],[9,10],[1,2],[8,9],[7,8],[10,11],[5,6],[16,17]],"handle_primary":[[17,[-7.648317030623161,4.388047332817109]],[8,[0.0,0.0]],[9,[1.0398530837227329,0.17152215813985094]],[16,[0.0,0.0]],[18,[-0.0877914951989851,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[7,[0.0,0.0]],[1,[-13.651577503429507,-4.016460905349504]],[11,[0.9510922553114368,-0.40840938602514143]],[12,[0.6886396813392821,0.35058484628291353]],[13,[-3.101966163694442,-4.096936442615402]],[15,[-15.992684042066571,-5.647919524462736]],[10,[2.71082158531226,-3.275875783141601]],[2,[5.399176954732297,6.584362139917744]],[5,[0.0,0.0]],[4,[-6.038618148571572,2.2123832635880945]],[14,[-0.1771601410563335,-2.331086581557088]]],"handle_end":[[6,[4.13595488492615,-4.1749733272365575]],[16,[-5.977212841894016,7.381559383908893]],[13,[-0.5267489711934559,1.053497942386798]],[3,[6.038618148571345,-2.2123832635879808]],[7,[-5.1358024691359105,5.530864197530718]],[12,[-6.90626428898031,-2.3996342021031296]],[8,[-3.7847889041303233,-0.6242950769699291]],[5,[-8.69135802469134,3.3580246913579685]],[9,null],[1,[8.559670781892919,2.502057613168745]],[4,[0.0,0.0]],[2,[0.0,0.0]],[17,null],[11,[-1.2025737194898056,-0.6122274594622468]],[18,[0.0,0.0]],[15,[2.8483462886752022,1.1315348270080676]],[14,[-22.51851851851859,-0.614540466392441]],[10,null]],"stroke":[[2,0],[17,0],[6,0],[15,0],[3,0],[13,0],[7,0],[16,0],[14,0],[10,0],[9,0],[8,0],[4,0],[11,0],[18,0],[12,0],[5,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6569279146800941123,{"inputs":[{"Node":{"node_id":15775513677915164685,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,26.66666666666663]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7799679303995308634,{"inputs":[{"Node":{"node_id":4323461535289334196,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2881239077602364410,{"inputs":[{"Node":{"node_id":9641315149170593327,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.47058824,"green":0.73333335,"blue":0.6117647,"alpha":0.296875}],[0.2777869967086046,{"red":0.46666667,"green":0.72156864,"blue":0.6,"alpha":0.70703125}],[0.36183495566130336,{"red":0.46666667,"green":0.72156864,"blue":0.6039216,"alpha":0.80078125}],[0.6507416725274494,{"red":0.4745098,"green":0.7294118,"blue":0.5921569,"alpha":0.23137255}],[1.0,{"red":0.47058824,"green":0.7176471,"blue":0.6039216,"alpha":0.18359375}]],"gradient_type":"Linear","start":[0.94412535478592,0.7803313772362046],"end":[0.3197649256748516,0.1688059143071423]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.47058824,"green":0.73333335,"blue":0.6117647,"alpha":0.296875}],[0.2777869967086046,{"red":0.46666667,"green":0.72156864,"blue":0.6,"alpha":0.70703125}],[0.36183495566130336,{"red":0.46666667,"green":0.72156864,"blue":0.6039216,"alpha":0.80078125}],[0.6507416725274494,{"red":0.4745098,"green":0.7294118,"blue":0.5921569,"alpha":0.23137255}],[1.0,{"red":0.47058824,"green":0.7176471,"blue":0.6039216,"alpha":0.18359375}]],"gradient_type":"Linear","start":[0.94412535478592,0.7803313772362046],"end":[0.3197649256748516,0.1688059143071423]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2088390810384907709,{"inputs":[{"Node":{"node_id":14341957170885045113,"output_index":0}},{"Node":{"node_id":9323583246068171750,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2062662104423219162,{"inputs":[{"Node":{"node_id":10810157408196882043,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652970144,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6556170892691431702,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3365825508845848745,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11595529463602678384,{"inputs":[{"Node":{"node_id":4398598693761352299,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10810157408196882043,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1231.5767664977286,540.0]],[1,[1231.576766497731,510.00000000000233]],[4,[1306.2177826491084,530.0000000000023]],[3,[1306.217782649106,559.9999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[-6.821210263296962e-13,-1.1368683772161605e-13]],[2,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4323461535289334196,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[597.1281292110203,649.9999999999999]],[2,[597.1281292110198,630.0]],[1,[634.4486372867091,639.9999999999999]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,1.1368683772161605e-13]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16807867745126764195,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.5,1.0]],[1,[0.5,0.0]],[2,[1.0,0.5]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[4,4],[2,2]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[4,[0.0,-0.275892388889507]],[3,[-0.275892388889507,0.0]]],"handle_end":[[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]]],"stroke":[[2,0],[3,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17881728913029763313,{"inputs":[{"Node":{"node_id":16793555741218543212,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15709488322180832347,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7838724497953148309,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1270.0,635.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5529412,"green":0.78039217,"blue":0.70980394,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14330881008352607546,{"inputs":[{"Node":{"node_id":11595529463602678384,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[0.7251131221719457,{"red":0.39215687,"green":0.6156863,"blue":0.5921569,"alpha":0.5019608}],[1.0,{"red":0.5058824,"green":0.7294118,"blue":0.6392157,"alpha":0.0}]],"gradient_type":"Linear","start":[0.3284027974661107,0.17846479235419954],"end":[0.3331499206771569,0.5505113976358942]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[0.7251131221719457,{"red":0.39215687,"green":0.6156863,"blue":0.5921569,"alpha":0.5019608}],[1.0,{"red":0.5058824,"green":0.7294118,"blue":0.6392157,"alpha":0.0}]],"gradient_type":"Linear","start":[0.3284027974661107,0.17846479235419954],"end":[0.3331499206771569,0.5505113976358942]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[70804263053697201,{"inputs":[{"Node":{"node_id":13942787566051910019,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[3.410605131648481e-13,3.410605131648481e-13]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1268.999999999999,634.9999999999992]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[194878846429432339,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[559.8076211353317,450.0000000000001]],[4,[522.4871130596428,380.00000000000006]],[3,[410.5255888325765,410.0]],[1,[671.7691453623979,420.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[3,4],[1,2],[2,3],[4,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3806549994589872867,{"inputs":[{"Node":{"node_id":11429712783984224234,"output_index":0}},{"Node":{"node_id":11479492521093639512,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[326112971739898070,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[578.4678751731759,605.0]],[3,[597.1281292110207,610.0]],[2,[578.4678751731759,615.0]],[1,[559.8076211353317,610.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[-1.1368683772161605e-13,-1.1368683772161605e-13]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4898866541060902381,{"inputs":[{"Node":{"node_id":7799679303995308634,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.39520264,"green":0.72265625,"blue":0.56068987,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.39520264,"green":0.72265625,"blue":0.56068987,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10779665858841986661,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[122.7099999086348,-47.60198818628578]],[2,[97.17913571110468,-93.86098831945704]],[4,[127.45074064937567,-74.14101615113282]],[1,[98.808765340734,-112.29086885060116]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[4,4],[2,2]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[-5.92592592592608,-17.692685309898252]]],"stroke":[[4,0],[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7952384394377946257,{"inputs":[{"Node":{"node_id":9935922395919478146,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.15303737473719153,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.45863166412588735,{"red":0.7921569,"green":0.8509804,"blue":0.58431375,"alpha":1.0}],[0.6476150394844262,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5550432633852689,0.9407795494396834],"end":[0.3799981368712242,0.012217625842737945]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.15303737473719153,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}],[0.45863166412588735,{"red":0.7921569,"green":0.8509804,"blue":0.58431375,"alpha":1.0}],[0.6476150394844262,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.9764706,"green":0.92941177,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5550432633852689,0.9407795494396834],"end":[0.3799981368712242,0.012217625842737945]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9666682009015049330,{"inputs":[{"Node":{"node_id":2791109467690716388,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[958845362613832240,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[1195.671865772399,520.3793108463286]],[6,[1382.2744061508486,330.3793108463298]],[3,[1195.6718657723986,420.3793108463287]],[1,[971.7488173182716,440.37931084632993]],[5,[1382.2744061508483,470.3793108463301]],[2,[971.7488173182714,480.37931084632993]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[4,4],[2,2],[6,6],[1,1],[5,5]],"end_point":[[6,1],[4,5],[2,3],[5,6],[1,2],[3,4]],"handle_primary":[[1,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[6,0],[3,0],[1,0],[2,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13817976820605296433,{"inputs":[{"Node":{"node_id":4837219841531371489,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15595689026000825531,{"inputs":[{"Node":{"node_id":2785423879796980286,"output_index":0}},{"Node":{"node_id":12172015233077238737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17433098630591807963,{"inputs":[{"Node":{"node_id":11490835759023283071,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3670594928372882885,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[559.8076211353317,490.00000000000006]],[1,[671.7691453623979,459.99999999999994]],[3,[559.8076211353316,450.00000000000006]],[2,[671.7691453623979,420.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15723520455917422372,{"inputs":[{"Node":{"node_id":4187349759243468746,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[55.4066256813212,75.48692492726542]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.093432966432927,1.093432966432927]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13743495762122910279,{"inputs":[{"Node":{"node_id":322234583139821148,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.30980393,"green":0.54901963,"blue":0.5568628,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0487255567160787,0.14016773560900295],"end":[0.9275384787415986,0.5063561479050618]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.30980393,"green":0.54901963,"blue":0.5568628,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0487255567160787,0.14016773560900295],"end":[0.9275384787415986,0.5063561479050618]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17250040304106119844,{"inputs":[{"Node":{"node_id":6142412830271644616,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12548387328300782726,{"inputs":[{"Node":{"node_id":764189229787475993,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7883568080179962,0.844472024944475],"end":[0.14631144508187544,0.21558322991428724]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7883568080179962,0.844472024944475],"end":[0.14631144508187544,0.21558322991428724]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7339104629465306715,{"inputs":[{"Node":{"node_id":16229837691656808412,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9226731772122225003,{"inputs":[{"Node":{"node_id":8884703330021429739,"output_index":0}},{"Node":{"node_id":9695624216919732577,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10188337730058049439,{"inputs":[{"Node":{"node_id":1268775104597510914,"output_index":0}},{"Node":{"node_id":11076863066321508991,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15898396405528650339,{"inputs":[{"Node":{"node_id":16807867745126764195,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1156.935750346027,389.9999999999999]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4046495708656778502,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[106.87778599676416,75.02595252015249]],[3,[130.0186418839436,64.45168544306966]],[2,[111.05567892098054,93.44803081206965]],[4,[122.38078180163905,40.36997488237489]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9771562518763748677,{"inputs":[{"Node":{"node_id":14234384001010789008,"output_index":0}},{"Node":{"node_id":12554549497938935061,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11479492521093639512,{"inputs":[{"Node":{"node_id":15216519480392295991,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false}],[15300421479077882117,{"inputs":[{"Node":{"node_id":7030585744407664630,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4887570735033124574,{"inputs":[{"Node":{"node_id":9210109719406330381,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.39607844,"green":0.57322305,"blue":0.627451,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7128143377734406,-0.305555555555558],"end":[0.6180751590210081,0.944444444444442]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.39607844,"green":0.57322305,"blue":0.627451,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7128143377734406,-0.305555555555558],"end":[0.6180751590210081,0.944444444444442]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5365849201631468915,{"inputs":[{"Node":{"node_id":10849502918952703647,"output_index":0}},{"Node":{"node_id":2310170068575553369,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14483299526002574058,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1156.9357503463518,589.9999999999999]],[1,[1156.9357503463516,540.0]],[4,[839.7114317029976,625.0000000000001]],[3,[933.0127018922192,649.9999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[4,1],[3,4],[2,3],[1,2]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[2.273736754432321e-13,0.0]]],"stroke":[[3,0],[1,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14234384001010789008,{"inputs":[{"Node":{"node_id":4757672276235057645,"output_index":0}},{"Node":{"node_id":8863202447825570192,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16793555741218543212,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[597.1281292110201,559.9999999999999]],[6,[410.5255888325765,450.0000000000001]],[1,[559.7618537735666,489.9877366723751]],[5,[298.56406460551005,480.00000000000006]],[2,[634.4486372867091,470.00000000000006]],[3,[783.7306695894638,509.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[6,6],[3,3],[5,5],[2,2],[4,4]],"end_point":[[1,2],[3,4],[2,3],[6,1],[4,5],[5,6]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[149.28203230275471,39.99999999999983]],[5,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[1,null],[3,[0.0,0.0]],[6,[0.0,0.0]],[5,[0.0,0.0]],[2,null],[4,[0.0,0.0]]],"stroke":[[5,0],[3,0],[2,0],[4,0],[1,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2209276411833629008,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[0.5000000000000018,0.10816199860278752]],[2,[1.0,0.5]],[1,[0.8725092774641316,0.16666767219504575]],[4,[0.0,0.5]],[5,[0.1274934116812796,0.166664669692703]],[3,[0.5,1.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[3,3],[5,5],[2,2],[1,1],[4,4]],"end_point":[[2,3],[3,4],[1,2],[4,5],[6,1],[5,6]],"handle_primary":[[5,[0.14548887396141374,-0.05850358027814341]],[2,[0.0,0.27589238888950707]],[1,[0.07925873631249913,0.08849560350574948]],[3,[-0.275892388889507,0.0]],[6,[0.22701785858837376,9.09188805575667e-7]],[4,[0.0,-0.12799231715991943]]],"handle_end":[[2,[0.27589238888950707,0.0]],[6,null],[1,[0.0,-0.12799086965193351]],[5,null],[3,[0.0,0.27589238888950707]],[4,[-0.07926033448372466,0.08849596308181285]]],"stroke":[[1,0],[2,0],[4,0],[6,0],[3,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5434119356821575534,{"inputs":[{"Node":{"node_id":1490537476612110327,"output_index":0}},{"Node":{"node_id":16261620049358949344,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2032185045476767535,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7340659059180155803,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15261165353096835967,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[5,[597.1281292110198,599.9999999999999]],[1,[1156.9357503463468,509.9999999999987]],[4,[615.7883832488644,605.0000000000001]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[3,3],[5,5],[2,2],[1,1],[4,4]],"end_point":[[3,4],[1,2],[4,5],[6,1],[5,6],[2,3]],"handle_primary":[[2,[0.0,0.0]],[6,[0.0,0.0]],[3,null],[5,[447.84609690826574,-119.99999999999989]],[4,null],[1,[0.0,0.0]]],"handle_end":[[4,null],[1,[0.0,0.0]],[2,null],[5,null],[6,[0.0,0.0]],[3,null]],"stroke":[[4,0],[3,0],[6,0],[5,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1658032775659237960,{"inputs":[{"Node":{"node_id":14483299526002574058,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297003,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18185020559178852986,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4847316728405535983,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6785205785632793666,{"inputs":[{"Node":{"node_id":10917301734480569398,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49803922,"green":0.73333335,"blue":0.6666667,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.49803922,"green":0.73333335,"blue":0.6666667,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4884180935153120645,{"inputs":[{"Node":{"node_id":11221222899304956410,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4094933109340779,0.6607209771464397],"end":[0.921423168424672,0.39536705519277415]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4094933109340779,0.6607209771464397],"end":[0.921423168424672,0.39536705519277415]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7838724497953148309,{"inputs":[{"Node":{"node_id":9771562518763748677,"output_index":0}},{"Node":{"node_id":2058192342619930156,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17873337220577786871,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[877.0319397786863,584.9999999999998]],[1,[1156.9357503463468,509.9999999999987]],[4,[615.7883832488646,605.0000000000001]],[3,[783.7306695894646,560.0]],[5,[597.1281292110198,599.9999999999999]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[6,6],[4,4],[2,2],[5,5],[1,1]],"end_point":[[4,5],[5,6],[6,1],[3,4],[2,3],[1,2]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,null],[6,[0.0,0.0]],[3,null],[5,[447.84609690826574,-119.99999999999989]]],"handle_end":[[1,[0.0,0.0]],[5,null],[6,[0.0,0.0]],[2,null],[3,null],[4,null]],"stroke":[[2,0],[3,0],[5,0],[1,0],[6,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7861616450605235840,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.3813269975649,420.0420583039525]],[2,[1343.5382907247954,439.792314581573]],[4,[1231.5767664977302,450.00000000000233]],[3,[1268.8972745734186,460.00000000000233]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8463468388280418154,{"inputs":[{"Node":{"node_id":9993538712344947860,"output_index":0}},{"Value":{"tagged_value":{"F64":74.5472},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[15670426414376277308,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,0.5]],[3,[0.5,1.0]],[2,[1.0,0.5]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[3,4],[2,3],[1,2],[4,1]],"handle_primary":[[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[1,[0.27589238888950707,0.0]]],"handle_end":[[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2292399603649738346,{"inputs":[{"Node":{"node_id":16510804133693080967,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9127081032507663,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.6216293634586009,-3.518518518518513],"end":[0.4157051295501385,0.32812296023903675]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9127081032507663,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.6216293634586009,-3.518518518518513],"end":[0.4157051295501385,0.32812296023903675]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4069478660487729695,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-22.15328312748764,98.9633432080564]],[4,[55.822325899541134,88.0419325229343]],[2,[-23.148253406408465,116.21917209054972]],[3,[59.855160808698834,104.19217420861494]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[1,1],[2,2]],"end_point":[[3,4],[1,2],[2,3],[4,1]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[-27.645547736903644,17.139482007743737]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[24.844120782255654,5.22590107758802]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5326013268137833446,{"inputs":[{"Node":{"node_id":12875121980058869686,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.5005297191519419,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.8104119804726813,{"red":0.5686275,"green":0.69411767,"blue":0.5372549,"alpha":0.87890625}],[1.0,{"red":0.3529412,"green":0.5647059,"blue":0.57254905,"alpha":0.296875}]],"gradient_type":"Radial","start":[0.0015840517590797742,0.9627709247339196],"end":[1.0370671897237005,-1.554312234475219e-14]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.5005297191519419,{"red":0.48235294,"green":0.69803923,"blue":0.69411767,"alpha":1.0}],[0.8104119804726813,{"red":0.5686275,"green":0.69411767,"blue":0.5372549,"alpha":0.87890625}],[1.0,{"red":0.3529412,"green":0.5647059,"blue":0.57254905,"alpha":0.296875}]],"gradient_type":"Radial","start":[0.0015840517590797742,0.9627709247339196],"end":[1.0370671897237005,-1.554312234475219e-14]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12537712543904859919,{"inputs":[{"Node":{"node_id":4968550668755026811,"output_index":0}},{"Node":{"node_id":8508454285877707748,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12469956387875933942,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":2881239077602364410,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13207576193421440093,{"inputs":[{"Node":{"node_id":12930243402848966353,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5574499968250848265,{"inputs":[{"Node":{"node_id":11776939455674933130,"output_index":0}},{"Node":{"node_id":5925268772265373737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18371793711669837037,{"inputs":[{"Node":{"node_id":7861616450605235840,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.00000000000006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10742991645899166287,{"inputs":[{"Node":{"node_id":1104068854328504126,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-114.0000000000026]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18085100003956405261,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[4,[511.55555555555554,490.2222222222222]],[10,[524.0493827160495,487.1111111111112]],[8,[502.0960349862431,417.9179038759178]],[16,[530.3703703703702,486.71604938271594]],[3,[480.5925925925926,440.2962962962962]],[12,[533.8924329970387,433.46495092641567]],[13,[526.0246913580248,490.07407407407413]],[14,[552.9705625612692,418.19081042008474]],[5,[497.38271604938257,447.60493827160496]],[18,[568.2339832275112,446.0155371619765]],[17,[565.2914244954804,444.3855996237166]],[19,[530.7654320987656,499.55555555555566]],[7,[515.1604938271604,486.716049382716]],[2,[476.9512618480758,444.1904085078117]],[9,[505.311372421164,416.4524664944526]],[15,[556.7578325004595,420.13017723423656]],[1,[510.41975308641986,500.1481481481481]],[6,[499.77650172698026,445.9388618767647]],[11,[531.5890484844431,432.90541944395505]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[12,12],[7,7],[11,11],[14,14],[17,17],[2,2],[13,13],[10,10],[8,8],[9,9],[6,6],[5,5],[4,4],[18,18],[1,1],[3,3],[15,15],[19,19],[16,16]],"end_point":[[15,16],[16,17],[4,5],[8,9],[11,12],[2,3],[14,15],[5,6],[9,10],[17,18],[13,14],[18,19],[3,4],[7,8],[19,1],[1,2],[6,7],[10,11],[12,13]],"handle_primary":[[2,[-17.16805625160663,-20.28383937076643]],[10,[0.0,0.0]],[16,[0.0,0.0]],[17,[27.324497401397252,-21.15032331824051]],[9,[11.197015798182122,18.39034937970939]],[15,[-11.459519915000214,23.15277176924241]],[18,[-19.30865594294653,18.299752742610902]],[3,[21.32824309569804,17.329197515254634]],[12,[-5.082537215847424,18.7049831985629]],[11,[7.784237194372736,-22.222909722529664]],[13,[0.0,0.0]],[1,[-9.283950617284065,-12.246913580246884]],[14,[15.260998855532309,-21.888591759537466]],[6,[3.9272019767233246,4.629039357803151]],[5,[-10.016557406305251,-15.024836109457851]],[4,[0.0,0.0]],[8,[-8.936088730151937,-20.93774746663439]],[7,[0.0,0.0]],[19,[-1.5204271954055455,4.429070525747022]]],"handle_end":[[14,[11.286699158099054,-22.803605349427187]],[16,[-28.402535606591755,21.984770746653737]],[5,[-12.032856371187677,-14.183269935989983]],[2,[-22.123456790123555,-17.97530864197529]],[15,[4.54320987654296,-11.851851851852018]],[6,[0.7901234567898427,-16.197530864197745]],[19,[2.7053847913285836,3.5688054694122116]],[18,[4.54320987654296,-13.23456790123464]],[7,[18.59187624528363,43.5617887769169]],[12,[3.7530864197531177,-16.59259259259261]],[13,[-15.260998855532534,21.888591759537743]],[3,[-3.111111111111086,-12.0]],[1,[28.522359190346833,33.698803394714844]],[8,[-11.197015798182008,-18.39034937970939]],[17,[19.435079545528083,-18.419570542198244]],[9,[0.7901234567898427,-21.135802469135857]],[10,[-7.784237194372736,22.22290972252955]],[4,[13.03703703703701,19.555555555555543]],[11,[5.082537215847424,-18.704983198562843]]],"stroke":[[2,0],[7,0],[16,0],[6,0],[12,0],[18,0],[1,0],[19,0],[10,0],[5,0],[14,0],[17,0],[15,0],[4,0],[3,0],[13,0],[11,0],[9,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8612613134760093452,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[933.0127018922192,650.0]],[4,[933.0127018922192,670.0000000000001]],[3,[802.3909236273086,635.0000000000001]],[2,[839.7114317029974,625.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[1,1],[2,2]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12931264630175648107,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[8,[709.0896534380863,649.9999999999999]],[11,[1492.8203230275508,480.0000000000001]],[1,[1492.820323027551,460.0000000000025]],[2,[1531.2435565296985,470.3]],[3,[1531.243556529699,704.9999999999997]],[9,[1231.576766497731,510.0000000000024]],[5,[261.2435565296994,530.0000000000001]],[10,[1306.2177826491086,530.0000000000023]],[6,[298.56406460551034,520.0000000000002]],[4,[261.24355652969956,704.9999999999997]],[7,[298.56406460551045,540.0000000000001]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[8,8],[4,4],[3,3],[9,9],[11,11],[1,1],[2,2],[7,7],[6,6],[5,5],[10,10]],"end_point":[[11,1],[1,2],[5,6],[7,8],[3,4],[10,11],[4,5],[9,10],[8,9],[2,3],[6,7]],"handle_primary":[[3,[0.0,0.0]],[8,[0.0,0.0]],[7,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[9,[0.0,0.0]],[1,[0.0,0.0]],[10,[0.0,0.0]],[11,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[8,[0.0,0.0]],[6,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[9,[0.0,0.0]],[4,[0.0,0.0]],[7,[0.0,0.0]],[11,[0.0,0.0]],[5,[0.0,0.0]],[10,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[5,0],[7,0],[2,0],[11,0],[4,0],[9,0],[10,0],[6,0],[3,0],[1,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4757672276235057645,{"inputs":[{"Node":{"node_id":4924169570021915606,"output_index":0}},{"Node":{"node_id":14400993470150734626,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15134939288287905620,{"inputs":[{"Node":{"node_id":8958782938691501404,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10989897386232385465,{"inputs":[{"Node":{"node_id":10507084483235320484,"output_index":0}},{"Node":{"node_id":7339104629465306715,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5540780316862276409,{"inputs":[{"Node":{"node_id":1032659476619711014,"output_index":0}},{"Node":{"node_id":13743495762122910279,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9695624216919732577,{"inputs":[{"Node":{"node_id":1156213189397385283,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16852951849051795674,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[2,[1156.9357503463518,590.0]],[7,[1306.2177826491068,529.9999999999972]],[1,[1156.9357503463525,530.0]],[3,[933.0127018922192,650.0]],[5,[1343.5382907247958,560.0]],[6,[1343.5382907247958,520.0]],[8,[1231.576766497731,510.0000000000022]],[4,[933.0127018922192,670.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[5,5],[7,7],[8,8],[6,6],[3,3],[1,1],[2,2],[4,4]],"end_point":[[8,1],[6,7],[4,5],[1,2],[2,3],[7,8],[5,6],[3,4]],"handle_primary":[[4,[0.0,0.0]],[2,null],[3,[0.0,20.0]],[6,null],[5,null],[1,[0.0,0.0]],[7,[-74.64101615137588,-19.99999999999494]],[8,[0.0,0.0]]],"handle_end":[[3,null],[1,null],[4,null],[6,null],[8,[0.0,0.0]],[7,null],[2,null],[5,null]],"stroke":[[7,0],[1,0],[8,0],[4,0],[6,0],[5,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14124486712683868036,{"inputs":[{"Node":{"node_id":14449527838292182035,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.44433594,"green":0.7109375,"blue":0.60144055,"alpha":1.0}],[0.31019165912642926,{"red":0.42991638,"green":0.68359375,"blue":0.5723318,"alpha":0.85546875}],[1.0,{"red":0.41487122,"green":0.66796875,"blue":0.5466929,"alpha":0.3515625}]],"gradient_type":"Radial","start":[0.49564744287268736,0.12680209698558276],"end":[0.6983677910772572,0.8876146788990837]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11450962621506425680,{"inputs":[{"Node":{"node_id":514222872092587805,"output_index":0}},{"Node":{"node_id":6006052038693767172,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11158238411769751544,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14124486712683868036,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2310170068575553369,{"inputs":[{"Node":{"node_id":3564067978712674849,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.94921875,"green":0.8861847,"blue":0.5710144,"alpha":1.0}],[1.0,{"red":0.6594621,"green":0.859375,"blue":0.62438965,"alpha":1.0}]],"gradient_type":"Radial","start":[0.9615262104062824,0.1999999999999842],"end":[0.047819464216158014,0.809999999999961]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.94921875,"green":0.8861847,"blue":0.5710144,"alpha":1.0}],[1.0,{"red":0.6594621,"green":0.859375,"blue":0.62438965,"alpha":1.0}]],"gradient_type":"Radial","start":[0.9615262104062824,0.1999999999999842],"end":[0.047819464216158014,0.809999999999961]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6868877732348460627,{"inputs":[{"Node":{"node_id":7884283658260267478,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[4191887059541031673,{"inputs":[{"Node":{"node_id":4046495708656778502,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13287180494862716983,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[830.3813046840752,527.5]],[1,[765.0704155516202,530.0]],[3,[811.7210506462309,532.5]],[2,[783.7306695894644,525.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[3,4],[2,3],[1,2]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1396768435017101055,{"inputs":[{"Node":{"node_id":15914878146223026034,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16727310898641763441,{"inputs":[{"Node":{"node_id":13920465562072008593,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.4117647,"green":0.6392157,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.4117647,"green":0.6392157,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9278774434958175105,{"inputs":[{"Node":{"node_id":3927358878935116440,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053914,-74.00000000000011]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999972,0.9999999999999972]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12930243402848966353,{"inputs":[{"Node":{"node_id":7948029953091985757,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[895.6921938163274,315.9999999999998]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[373.2050807562376,99.99999999999976]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14805036488257720752,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[877.0319397786858,590.0]],[3,[895.6921938165302,595.0]],[1,[849.0415587219195,597.5000000000001]],[4,[942.3428289111416,582.5]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[2,3],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18011777376689315137,{"inputs":[{"Node":{"node_id":10564228200140683112,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8343201730608263656,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[933.0127018922194,430.0]],[2,[933.0127018922194,470.0]],[6,[597.1281292110205,340.0000000000001]],[4,[709.0896534380868,470.0]],[3,[709.0896534380868,410.0000000000001]],[5,[597.1281292110203,439.99999999999994]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[1,1],[5,5],[6,6],[3,3],[2,2]],"end_point":[[6,1],[1,2],[2,3],[3,4],[4,5],[5,6]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[6,0],[5,0],[2,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9935922395919478146,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[5,[1303.7037037037037,419.6872427983538]],[20,[1325.5637860082302,441.9423868312756]],[7,[1291.19341563786,379.78600823045264]],[16,[1349.7942386831278,385.3168724279836]],[8,[1311.341563786008,420.872427983539]],[17,[1331.2263374485594,418.633744855967]],[6,[1283.8189300411525,381.6296296296296]],[14,[1320.9547325102878,428.11522633744846]],[19,[1353.7448559670786,395.8518518518519]],[4,[1281.3168724279838,402.0411522633745]],[1,[1317.9649443682358,445.9417771681145]],[13,[1334.9135802469134,382.9465020576131]],[18,[1353.2181069958854,390.3209876543211]],[12,[1330.9629629629628,378.8641975308641]],[2,[1309.8491083676272,442.3520804755373]],[3,[1276.181069958848,406.51851851851853]],[15,[1346.7654320987656,379.522633744856]],[10,[1307.9176954732511,360.6913580246913]],[11,[1318.5843621399176,404.93827160493817]],[9,[1303.5720164609054,369.51440329218104]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[5,5],[11,11],[7,7],[12,12],[8,8],[17,17],[14,14],[19,19],[4,4],[13,13],[1,1],[20,20],[6,6],[15,15],[9,9],[3,3],[10,10],[2,2],[16,16],[18,18]],"end_point":[[9,10],[12,13],[19,20],[8,9],[15,16],[3,4],[7,8],[17,18],[11,12],[5,6],[6,7],[16,17],[18,19],[2,3],[10,11],[4,5],[20,1],[13,14],[14,15],[1,2]],"handle_primary":[[4,[11.934313314187648,6.04743230718924]],[9,[-8.427983539094384,-34.502057613168745]],[18,[14.617283950616866,-16.32921810699594]],[16,[-13.168724279835487,17.382716049382793]],[11,[0.0,0.0]],[10,[10.930041152263357,24.88888888888891]],[7,[13.958847736626012,18.304526748971227]],[14,[0.0,0.0]],[2,[-1.1927104603494172,-1.8387619597050957]],[3,[-25.9423868312756,-18.304526748971227]],[8,[0.0,0.0]],[12,[8.691358024691226,-13.168724279835374]],[17,[0.0,0.0]],[19,[-17.792694511774243,22.05806648377495]],[20,[-0.8876695625660886,2.750800182899013]],[6,[-13.958847736625785,-23.967078189300366]],[15,[17.514403292181214,-18.96296296296299]],[13,[-7.506172839506235,20.67489711934155]],[5,[0.0,0.0]],[1,[-5.73075474332677,0.190602104454058]]],"handle_end":[[4,[0.0,0.0]],[10,[0.0,0.0]],[7,[0.0,0.0]],[15,[22.902000000470935,-30.23064000062169]],[2,[21.160177959832257,14.930277849830986]],[14,[-16.17829033097064,17.51634441849427]],[20,[6.571889866311722,-0.218577847920983]],[11,[-8.691358024691226,13.168724279835374]],[1,[1.8728852309102424,2.887364730986178]],[17,[-11.234881916731185,12.550678897970386]],[13,[0.0,0.0]],[8,[7.512329871725342,30.753600412376215]],[19,[2.149866795831258,-6.662224576095184]],[16,[0.0,0.0]],[18,[19.22633744855989,-23.835390946502]],[9,[-11.24897964853426,-25.61514642859032]],[12,[7.506172839506235,-20.67489711934155]],[3,[-29.366255144032948,-14.880658436213992]],[5,[8.275699533270199,14.209219953350214]],[6,[-21.35436745259517,-28.00242524443996]]],"stroke":[[17,0],[5,0],[19,0],[16,0],[7,0],[2,0],[14,0],[10,0],[1,0],[20,0],[8,0],[18,0],[4,0],[11,0],[6,0],[13,0],[3,0],[9,0],[15,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8073807569018624098,{"inputs":[{"Node":{"node_id":8028812053913481975,"output_index":0}},{"Node":{"node_id":12998832508553378533,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12875121980058869686,{"inputs":[{"Node":{"node_id":13747030364552895864,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14341957170885045113,{"inputs":[{"Node":{"node_id":12469956387875933942,"output_index":0}},{"Node":{"node_id":7952384394377946257,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[514222872092587805,{"inputs":[{"Node":{"node_id":5434119356821575534,"output_index":0}},{"Node":{"node_id":3679103217373457623,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9908869573449854874,{"inputs":[{"Node":{"node_id":16416441286881083283,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17059035448296015006,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[821.0511776651531,500.0]],[4,[821.0511776651532,440.0000000000001]],[1,[709.0896534380867,469.99999999999994]],[3,[933.0127018922194,470.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[3,4],[4,1],[2,3],[1,2]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8028812053913481975,{"inputs":[{"Node":{"node_id":15517065353723874205,"output_index":0}},{"Node":{"node_id":6785205785632793666,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9993538712344947860,{"inputs":[{"Node":{"node_id":15134939288287905620,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.38039216,"green":0.58431375,"blue":0.57254905,"alpha":1.0}],[1.0,{"red":0.38039216,"green":0.58431375,"blue":0.5764706,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9375072552322194,-0.022211489741806645],"end":[0.8621391458239049,0.9748376053312908]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.38039216,"green":0.58431375,"blue":0.57254905,"alpha":1.0}],[1.0,{"red":0.38039216,"green":0.58431375,"blue":0.5764706,"alpha":0.0}]],"gradient_type":"Radial","start":[0.9375072552322194,-0.022211489741806645],"end":[0.8621391458239049,0.9748376053312908]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[456239140723765386,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.5,1.0]],[2,[1.0,0.5]],[4,[0.0,0.5]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[1,2],[4,1],[2,3],[3,4]],"handle_primary":[[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[1,[0.27589238888950707,0.0]],[3,[-0.275892388889507,0.0]]],"handle_end":[[4,[-0.275892388889507,0.0]],[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2465823993152870948,{"inputs":[{"Node":{"node_id":15898396405528650339,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3778839,"green":0.76171875,"blue":0.72573423,"alpha":1.0}],[1.0,{"red":0.7411765,"green":0.87058824,"blue":0.7372549,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4840260278337376,0.5459259284371654],"end":[-0.00035013139300899,0.5459259284371651]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3778839,"green":0.76171875,"blue":0.72573423,"alpha":1.0}],[1.0,{"red":0.7411765,"green":0.87058824,"blue":0.7372549,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4840260278337376,0.5459259284371654],"end":[-0.00035013139300899,0.5459259284371651]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14161755104759532162,{"inputs":[{"Node":{"node_id":13837327017498431546,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3021739385836969518,{"inputs":[{"Node":{"node_id":6556170892691431702,"output_index":0}},{"Node":{"node_id":13868917743026516656,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11547499603328872398,{"inputs":[{"Node":{"node_id":8343201730608263656,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6777328619777499144,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[1231.5767664977295,450.0]],[3,[1268.8972745734193,460.0000000000024]],[2,[1380.8587988003642,430.0]],[1,[1343.5382907246749,419.99978273075953]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[1,2],[3,4],[2,3],[4,1]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[-6.821210263296962e-13,-5.684341886080804e-14]],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3455270778005546310,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[559.7618537735666,489.9877366723752]],[3,[410.5255888325765,450.0000000000001]],[4,[410.5255888325765,410.0]],[1,[559.8076211353316,449.99999999999994]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4]],"end_point":[[3,4],[2,3],[1,2],[4,1]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]],[2,[0.0,0.0]]],"stroke":[[2,0],[3,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11076863066321508991,{"inputs":[{"Node":{"node_id":8891726805381758817,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5925268772265373737,{"inputs":[{"Node":{"node_id":4105329493214975815,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11895211316848895241,{"inputs":[{"Node":{"node_id":10742991645899166287,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5019608,"green":0.72156864,"blue":0.62352943,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5019608,"green":0.72156864,"blue":0.62352943,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7639490284239357347,{"inputs":[{"Node":{"node_id":14805036488257720752,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[7259756719760382667,{"inputs":[{"Node":{"node_id":15157035456876170143,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":0.0}]],"gradient_type":"Linear","start":[0.4803107402195895,-0.1138575403671318],"end":[0.41147745365941946,0.9225580029175888]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":1.0}],[1.0,{"red":0.27450982,"green":0.50980395,"blue":0.54509807,"alpha":0.0}]],"gradient_type":"Linear","start":[0.4803107402195895,-0.1138575403671318],"end":[0.41147745365941946,0.9225580029175888]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2036609094647228373,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[0.0,0.5]],[5,[0.12749341167028605,0.1666646696927025]],[2,[1.0,0.5]],[1,[0.8725092774628217,0.1666676721950458]],[3,[0.5,1.0]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[4,4],[1,1],[2,2],[3,3]],"end_point":[[3,4],[2,3],[4,5],[5,1],[1,2]],"handle_primary":[[1,[0.07925873631249913,0.08849560350574948]],[2,[0.0,0.27589238888950707]],[4,[0.0,-0.12799231715991943]],[3,[-0.275892388889507,0.0]],[5,null]],"handle_end":[[4,[-0.07926033448372466,0.0884959630818129]],[5,null],[1,[0.0,-0.12799086965193351]],[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]]],"stroke":[[5,0],[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14842592386831797498,{"inputs":[{"Node":{"node_id":664587514588499648,"output_index":0}},{"Node":{"node_id":14330881008352607546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4243146970185091100,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[17,[668.3566529492455,433.2510288065844]],[10,[607.8683127572016,488.3840877914952]],[1,[583.5500685871057,499.53360768175577]],[3,[589.8710562414265,497.0754458161865]],[11,[615.6378600823045,431.5390946502058]],[16,[616.0751917898693,491.077444156548]],[2,[533.9259259259258,420.7407407407407]],[9,[606.0246913580247,486.803840877915]],[4,[591.18792866941,498.3045267489712]],[14,[650.6666666666667,398.2222222222223]],[15,[615.4183813443072,491.19341563786]],[12,[609.0096021947874,496.4609053497942]],[18,[618.4910836762688,499.9725651577503]],[6,[594.4362139917694,493.6515775034293]],[13,[609.7997256515774,497.6899862825788]],[7,[596.3676268861453,491.9835390946502]],[5,[574.0246913580246,440.2962962962963]],[8,[580.9382716049382,401.9753086419752]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[5,5],[4,4],[17,17],[13,13],[11,11],[2,2],[3,3],[10,10],[18,18],[7,7],[16,16],[6,6],[12,12],[9,9],[1,1],[15,15],[14,14],[8,8]],"end_point":[[3,4],[10,11],[2,3],[14,15],[1,2],[12,13],[13,14],[6,7],[15,16],[7,8],[8,9],[4,5],[5,6],[18,1],[9,10],[17,18],[16,17],[11,12]],"handle_primary":[[9,[0.0,0.0]],[15,[0.0,0.0]],[7,[0.0,0.0]],[8,[22.10150891632361,44.44444444444463]],[18,[-7.386678859929702,8.10852004267656]],[2,[44.005486968450214,35.16049382716062]],[16,[0.0,0.0]],[11,[-3.906721536351256,29.62962962962956]],[4,[0.0,0.0]],[5,[18.392318244170156,23.769547325102906]],[17,[-38.27709190672158,34.5020576131688]],[12,[0.0,0.0]],[10,[0.0,0.0]],[3,[0.0,0.0]],[13,[0.0,0.0]],[14,[-18.3045267489714,37.31138545953348]],[1,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[7,[25.964334705075316,61.47599451303165]],[15,[0.0,0.0]],[8,null],[6,[0.0,0.0]],[13,[-23.747599451303245,35.4677640603565]],[5,null],[12,[0.0,0.0]],[1,[48.21947873799752,48.855967078189394]],[4,[21.113854595336193,37.201646090535064]],[18,[3.2434080170708057,6.03566529492457]],[11,[0.0,0.0]],[2,null],[10,[-6.189300411522709,26.732510288065782]],[14,null],[16,[-35.29218106995893,26.337448559670804]],[9,[0.0,0.0]],[17,null]],"stroke":[[18,0],[6,0],[7,0],[2,0],[3,0],[8,0],[16,0],[17,0],[4,0],[1,0],[13,0],[9,0],[11,0],[5,0],[10,0],[12,0],[14,0],[15,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17965270694495451178,{"inputs":[{"Node":{"node_id":9409313765472227540,"output_index":0}},{"Node":{"node_id":4887570735033124574,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15167880819976070791,{"inputs":[{"Node":{"node_id":4898866541060902381,"output_index":0}},{"Value":{"tagged_value":{"F64":33.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[16069762220015310717,{"inputs":[{"Node":{"node_id":16398743435291795904,"output_index":0}},{"Node":{"node_id":14791465604033956302,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16510804133693080967,{"inputs":[{"Node":{"node_id":3966971396176820223,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2785423879796980286,{"inputs":[{"Node":{"node_id":11634802583144606404,"output_index":0}},{"Node":{"node_id":16591255610014418910,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2921219300441868542,{"inputs":[{"Node":{"node_id":11506204916439878896,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.49019608,"green":0.69411767,"blue":0.627451,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7067047867039575315,{"inputs":[{"Node":{"node_id":15261165353096835967,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5261200785298607501,{"inputs":[{"Node":{"node_id":2465823993152870948,"output_index":0}},{"Value":{"tagged_value":{"BlendMode":"Lighten"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::BlendModeNode"}},"visible":true,"skip_deduplication":false}],[12554549497938935061,{"inputs":[{"Node":{"node_id":14055195208113082127,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[833.274364370262,-33.56362500933909]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.8,-0.6]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.2246467991473532e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8256712316698018135,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1268.897274573418,500.00000000000006]],[2,[1268.8972745734184,559.9999999999999]],[4,[1343.5382907247958,520.0]],[3,[1343.538290724796,579.9999999999998]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18046677540207938977,{"inputs":[{"Node":{"node_id":2189393878093040029,"output_index":0}},{"Node":{"node_id":2292399603649738346,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4134257789770357215,{"inputs":[{"Node":{"node_id":9640215309187299519,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053945,-71.86019325256757]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999948,0.9999999999999948]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15914878146223026034,{"inputs":[{"Node":{"node_id":4069478660487729695,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[39.06014871394696,-80.31594690033606]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.44070994426773896},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.7021527212517815,1.4014617956106905]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.8600612888523491,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2640491057355360805,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[7,[671.7691453623979,459.99999999999994]],[2,[653.1088913245535,475.0]],[10,[933.0127018922194,470.0]],[1,[783.7306695894642,510.0]],[9,[821.0511776651531,440.00000000000006]],[3,[559.8076211353318,500.00000000000017]],[5,[410.5255888325765,450.0000000000001]],[4,[410.5255888325763,460.0]],[6,[559.7618537735666,489.9877366723752]],[8,[709.0896534380868,470.00000000000006]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[1,1],[5,5],[2,2],[7,7],[6,6],[10,10],[8,8],[3,3],[9,9],[4,4]],"end_point":[[6,7],[5,6],[3,4],[9,10],[7,8],[4,5],[2,3],[1,2],[10,1],[8,9]],"handle_primary":[[7,[37.32050807568885,10.000000000000114]],[4,[0.0,0.0]],[1,null],[6,null],[5,null],[9,[0.0,0.0]],[8,[0.0,0.0]],[2,null],[3,[-149.2820323027555,-40.00000000000017]],[10,[0.0,0.0]]],"handle_end":[[10,null],[7,null],[4,null],[1,null],[9,[0.0,0.0]],[6,null],[5,null],[3,null],[2,null],[8,[0.0,0.0]]],"stroke":[[10,0],[5,0],[7,0],[6,0],[3,0],[1,0],[9,0],[4,0],[2,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3680957604830907751,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[8,[1319.9451303155006,428.8614540466391]],[14,[1313.0096021947877,442.29355281207137]],[15,[1264.5486968449932,395.9981710105167]],[13,[1322.315500685871,442.4691358024692]],[12,[1360.3292181069958,385.0534979423868]],[3,[1278.0100594421583,366.7343392775492]],[4,[1311.6049382716046,423.2427983539094]],[7,[1336.2743484224964,374.25514403292175]],[1,[1304.1133973479657,421.12604785855825]],[10,[1354.710562414266,375.5720164609054]],[11,[1325.124828532236,431.14403292181055]],[6,[1317.750342935528,414.37585733882025]],[2,[1304.6986739826243,420.69684499314127]],[9,[1321.5253772290812,429.56378600823047]],[5,[1301.1577503429353,350.639231824417]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[4,4],[7,7],[2,2],[3,3],[15,15],[5,5],[14,14],[9,9],[13,13],[12,12],[8,8],[6,6],[1,1],[10,10],[11,11]],"end_point":[[3,4],[14,15],[9,10],[6,7],[8,9],[10,11],[11,12],[5,6],[15,1],[12,13],[1,2],[2,3],[7,8],[13,14],[4,5]],"handle_primary":[[1,[0.0,0.0]],[14,[-1.4013919408635047,-1.0754868383370422]],[3,[22.884316415180592,29.146776406035656]],[5,[15.978052126200282,30.375857338820197]],[15,[30.375857338820197,15.10013717421117]],[4,[0.0,0.0]],[10,[-22.650205761316556,26.60082304526742]],[12,[-18.78737997256485,20.455418381344316]],[11,[6.190926179952385,-9.64405832444237]],[7,[-16.182898948331285,35.4677640603565]],[13,[-1.0925163846973192,0.8063811410860922]],[8,[0.0,0.0]],[9,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[13,[0.8337588052027058,0.639861408644208]],[1,[0.0,0.0]],[4,[16.153635116598025,62.683127572016474]],[6,[-20.484682213077576,38.013717421124625]],[11,[-18.34842249657072,19.13854595336079]],[3,[0.0,0.0]],[5,[0.0,0.0]],[7,[0.0,0.0]],[15,[0.0,0.0]],[12,[1.2603823499284772,-0.9302822106615168]],[10,null],[2,[26.044810242340873,43.48605395518973]],[14,[36.34567901234527,22.650205761316897]],[9,[-20.894375857338673,18.52400548696835]],[8,[0.0,0.0]]],"stroke":[[8,0],[13,0],[11,0],[12,0],[6,0],[15,0],[5,0],[10,0],[3,0],[14,0],[9,0],[1,0],[4,0],[7,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7910743362843097140,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[4,[55.98076211353338,555.0000000000001]],[10,[261.2435565298214,580.0]],[9,[326.55444566227675,562.5]],[3,[83.97114317030001,547.5]],[1,[-9.33012701892199,592.5]],[11,[18.66025403784454,515.0]],[8,[261.24355652982126,545.0]],[6,[130.62177826491063,599.9999999999999]],[5,[177.2724133595217,587.5]],[7,[93.30127018922188,590.0]],[2,[121.29165124598823,557.5000000000001]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[8,8],[1,1],[10,10],[4,4],[9,9],[5,5],[2,2],[7,7],[6,6],[3,3]],"end_point":[[10,11],[8,9],[1,2],[9,10],[7,8],[2,3],[6,7],[5,6],[3,4],[4,5]],"handle_primary":[[7,[0.0,0.0]],[8,[0.0,0.0]],[2,[0.0,0.0]],[10,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]],[5,[0.0,0.0]],[9,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[10,[0.0,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]],[9,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[8,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[9,0],[2,0],[5,0],[3,0],[8,0],[7,0],[10,0],[6,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17887542695709892422,{"inputs":[{"Node":{"node_id":14842592386831797498,"output_index":0}},{"Node":{"node_id":7259756719760382667,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10564228200140683112,{"inputs":[{"Node":{"node_id":13001069903842109798,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-140.23409378379097,-66.17529531267506]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.1549250908208777},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[61.12160376625298,24.813625019997943]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.6236723178991973,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11634445349252640936,{"inputs":[{"Node":{"node_id":2032185045476767535,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[708.5896534382083,269.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,0.267949192432]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3966971396176820223,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[1156.9357503463468,509.9999999999987]],[5,[597.1281292110198,599.9999999999999]],[2,[877.0319397786863,584.9999999999998]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[6,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[6,6],[2,2],[5,5],[4,4],[3,3]],"end_point":[[4,5],[2,3],[3,4],[1,2],[5,6],[6,1]],"handle_primary":[[5,[447.84609690826574,-119.99999999999989]],[6,[0.0,0.0]],[2,[0.0,0.0]],[3,null],[1,[0.0,0.0]],[4,null]],"handle_end":[[1,[0.0,0.0]],[3,null],[4,null],[5,null],[2,null],[6,[0.0,0.0]]],"stroke":[[5,0],[4,0],[1,0],[6,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2900504420179573771,{"inputs":[{"Node":{"node_id":3185536512640676801,"output_index":0}},{"Node":{"node_id":10852750245702849075,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2843751023378786714,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[2,[476.9512618480758,444.1904085078117]],[6,[499.77650172698026,445.9388618767647]],[11,[531.5890484844431,432.90541944395505]],[1,[510.41975308641986,500.1481481481481]],[3,[480.5925925925926,440.2962962962962]],[14,[552.9705625612692,418.19081042008474]],[4,[511.55555555555554,490.2222222222222]],[7,[515.1604938271604,486.716049382716]],[13,[526.0246913580248,490.07407407407413]],[5,[497.38271604938257,447.60493827160496]],[15,[556.7578325004595,420.13017723423656]],[16,[530.3703703703702,486.71604938271594]],[17,[565.2914244954804,444.3855996237166]],[8,[502.0960349862431,417.9179038759178]],[12,[533.8924329970387,433.46495092641567]],[19,[530.7654320987656,499.55555555555566]],[9,[505.311372421164,416.4524664944526]],[10,[524.0493827160495,487.1111111111112]],[18,[568.2339832275112,446.0155371619765]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[5,5],[4,4],[6,6],[2,2],[11,11],[8,8],[13,13],[9,9],[18,18],[15,15],[14,14],[12,12],[16,16],[1,1],[10,10],[7,7],[3,3],[19,19],[17,17]],"end_point":[[8,9],[1,2],[18,19],[13,14],[17,18],[4,5],[5,6],[6,7],[11,12],[10,11],[9,10],[7,8],[15,16],[19,1],[2,3],[3,4],[14,15],[16,17],[12,13]],"handle_primary":[[4,[0.0,0.0]],[13,[0.0,0.0]],[3,[21.32824309569804,17.329197515254634]],[16,[0.0,0.0]],[1,[-9.283950617284065,-12.246913580246884]],[12,[-5.082537215847424,18.7049831985629]],[17,[27.324497401397252,-21.15032331824051]],[19,[-1.5204271954055455,4.429070525747022]],[11,[7.784237194372736,-22.222909722529664]],[2,[-17.16805625160663,-20.28383937076643]],[15,[-11.459519915000214,23.15277176924241]],[8,[-8.936088730151937,-20.93774746663439]],[7,[0.0,0.0]],[6,[3.9272019767233246,4.629039357803151]],[9,[11.197015798182122,18.39034937970939]],[14,[15.260998855532309,-21.888591759537466]],[18,[-19.30865594294653,18.299752742610902]],[10,[0.0,0.0]],[5,[-10.016557406305251,-15.024836109457851]]],"handle_end":[[5,[-12.032856371187677,-14.183269935989983]],[6,[0.7901234567898427,-16.197530864197745]],[3,[-3.111111111111086,-12.0]],[19,[2.7053847913285836,3.5688054694122116]],[16,[-28.402535606591755,21.984770746653737]],[4,[13.03703703703701,19.555555555555543]],[14,[11.286699158099054,-22.803605349427187]],[15,[4.54320987654296,-11.851851851852018]],[17,[19.435079545528083,-18.419570542198244]],[8,[-11.197015798182008,-18.39034937970939]],[13,[-15.260998855532534,21.888591759537743]],[1,[28.522359190346833,33.698803394714844]],[9,[0.7901234567898427,-21.135802469135857]],[18,[4.54320987654296,-13.23456790123464]],[2,[-22.123456790123555,-17.97530864197529]],[10,[-7.784237194372736,22.22290972252955]],[7,[18.59187624528363,43.5617887769169]],[12,[3.7530864197531177,-16.59259259259261]],[11,[5.082537215847424,-18.704983198562843]]],"stroke":[[8,0],[17,0],[18,0],[12,0],[19,0],[6,0],[14,0],[3,0],[16,0],[4,0],[15,0],[2,0],[1,0],[13,0],[11,0],[10,0],[7,0],[5,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7637119583909417127,{"inputs":[{"Node":{"node_id":4740496570730418920,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8166796652234334001,{"inputs":[{"Node":{"node_id":8034980397175569257,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.47937012,"green":0.73046875,"blue":0.56778514,"alpha":1.0}],[1.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4830458531002497,0.18799510852727777],"end":[0.5102584056336581,0.7583861422837161]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.47937012,"green":0.73046875,"blue":0.56778514,"alpha":1.0}],[1.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4830458531002497,0.18799510852727777],"end":[0.5102584056336581,0.7583861422837161]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16591255610014418910,{"inputs":[{"Node":{"node_id":2225749123534781340,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[5891705401441266824,{"inputs":[{"Node":{"node_id":5670058004691708784,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17332567356044944766,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[-0.10921713655450987,1.0126086768123077]],[3,[1.0,1.0]],[1,[0.0,0.0]],[2,[1.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[4,4],[1,1]],"end_point":[[3,4],[1,2],[2,3],[4,1]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[4,0],[3,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[429913874753911073,{"inputs":[{"Node":{"node_id":11236872744106223256,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.9098039,"blue":0.7764706,"alpha":0.75}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[13701442050580061197,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[1530.14083110324,469.9999999999986]],[4,[1380.8587988003635,429.9999999999991]],[2,[1343.5382907247958,520.0000000000001]],[5,[1380.8587988003635,469.9997827307588]],[6,[1380.8587988003635,469.9999999999993]],[1,[1268.897274573418,500.00000000000006]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[5,5],[6,6],[3,3],[4,4],[1,1]],"end_point":[[5,6],[2,3],[6,1],[1,2],[3,4],[4,5]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0002172692405224552]],[6,[0.0,0.0]]],"handle_end":[[4,null],[2,[0.0,0.0]],[5,null],[6,[4.547473508864641e-13,5.684341886080804e-14]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[5,0],[3,0],[4,0],[1,0],[6,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16059265180575745658,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[1194.256258422041,640.0]],[5,[839.7114317029976,645.0]],[2,[1044.9742261192855,599.9999999999999]],[4,[1082.2947341949744,580.0]],[3,[1100.9549882328188,585.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[1,2],[4,5],[3,4],[2,3]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5882319123081134737,{"inputs":[{"Node":{"node_id":14102693648424950146,"output_index":0}},{"Node":{"node_id":13207576193421440093,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7030585744407664630,{"inputs":[{"Node":{"node_id":13701442050580061197,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053887,-113.99999999999903]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4740496570730418920,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[261.24355652982155,620.0]],[1,[279.9038105676662,605.0000000000001]],[4,[298.56406460551034,610.0]],[2,[242.58330249197704,615.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[4,4],[2,2]],"end_point":[[1,2],[4,1],[2,3],[3,4]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10651614176902312108,{"inputs":[{"Node":{"node_id":4134257789770357215,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.41568628,"green":0.6313726,"blue":0.6039216,"alpha":1.0}],[0.869076264787314,{"red":0.46666667,"green":0.69803923,"blue":0.6313726,"alpha":1.0}],[0.9670173672287944,{"red":0.39215687,"green":0.6117647,"blue":0.6,"alpha":1.0}],[1.0,{"red":0.37254903,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Radial","start":[0.004591093221745557,0.9549938856995572],"end":[1.0010898078090742,0.23229219555707512]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.41568628,"green":0.6313726,"blue":0.6039216,"alpha":1.0}],[0.869076264787314,{"red":0.46666667,"green":0.69803923,"blue":0.6313726,"alpha":1.0}],[0.9670173672287944,{"red":0.39215687,"green":0.6117647,"blue":0.6,"alpha":1.0}],[1.0,{"red":0.37254903,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Radial","start":[0.004591093221745557,0.9549938856995572],"end":[1.0010898078090742,0.23229219555707512]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18431382379595272672,{"inputs":[{"Node":{"node_id":10989897386232385465,"output_index":0}},{"Node":{"node_id":4191887059541031673,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13609749019463823009,{"inputs":[{"Node":{"node_id":2062662104423219162,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":0.0}]],"gradient_type":"Linear","start":[0.6190188337031772,0.2673182752249348],"end":[0.4910887633661796,0.9800526827918484]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":1.0}],[1.0,{"red":0.34901962,"green":0.5647059,"blue":0.5686275,"alpha":0.0}]],"gradient_type":"Linear","start":[0.6190188337031772,0.2673182752249348],"end":[0.4910887633661796,0.9800526827918484]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4847316728405535983,{"inputs":[{"Node":{"node_id":11579925754926059876,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5686275,"green":0.7411765,"blue":0.654902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10431241258085047322,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[298.56406460551034,479.99999999999983]],[2,[597.1281292110192,559.9999999999998]],[6,[298.56406460551045,540.0000000000001]],[5,[709.0896534380863,649.9999999999999]],[4,[709.0896534380863,630.0]],[3,[597.1281292110202,599.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[6,6],[5,5],[4,4],[3,3],[2,2]],"end_point":[[2,3],[1,2],[3,4],[5,6],[4,5],[6,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[5,0],[2,0],[4,0],[6,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5346759588580719138,{"inputs":[{"Node":{"node_id":57904581517036791,"output_index":0}},{"Node":{"node_id":16244305414728361140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8508454285877707748,{"inputs":[{"Node":{"node_id":9908869573449854874,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5137255,"green":0.7294118,"blue":0.68235296,"alpha":1.0}],[1.0,{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0033697141397510677,0.6230645063687077],"end":[0.058070316242295306,1.09924019568288]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5137255,"green":0.7294118,"blue":0.68235296,"alpha":1.0}],[1.0,{"red":0.49019608,"green":0.7882353,"blue":0.75686276,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0033697141397510677,0.6230645063687077],"end":[0.058070316242295306,1.09924019568288]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11236872744106223256,{"inputs":[{"Node":{"node_id":9724746185253267560,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,16.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14102693648424950146,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":16847360882244487081,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6142412830271644616,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[1250.2370205355735,424.00000000000006]],[3,[1203.586385440963,436.5]],[2,[1175.5960043841962,429.0]],[1,[1278.2274015923404,401.49999999999994]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[2,3],[1,2],[3,4]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[57904581517036791,{"inputs":[{"Node":{"node_id":9393309733761233513,"output_index":0}},{"Node":{"node_id":15300421479077882117,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10852750245702849075,{"inputs":[{"Node":{"node_id":17250040304106119844,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.77254903,"alpha":0.75}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[14449710315388146362,{"inputs":[{"Node":{"node_id":7671691070850213967,"output_index":0}},{"Value":{"tagged_value":{"F64":81.1788},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[6006052038693767172,{"inputs":[{"Node":{"node_id":4197544064668946479,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16923062582661131268,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[671.769145362398,420.0000000000001]],[2,[597.1281292110202,409.99999999999994]],[3,[653.1088913245534,424.99999999999994]],[1,[597.1281292110202,399.9999999999999]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[2,2],[3,3]],"end_point":[[3,4],[1,2],[4,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8958782938691501404,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1156.9357503463525,530.0]],[4,[1156.9357503463516,540.0]],[3,[1231.6308657449686,540.0144958496094]],[2,[1231.576766497729,510.00000000000233]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[2,3],[1,2],[4,1],[3,4]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[-74.69511539861696,-0.014495849609375]]],"handle_end":[[1,[0.0,0.0]],[2,null],[3,null],[4,[0.0,-2.273736754432321e-13]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15478704582542175684,{"inputs":[{"Node":{"node_id":8242413775403456296,"output_index":0}},{"Node":{"node_id":13696921450692276893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[532055960192543062,{"inputs":[{"Node":{"node_id":326112971739898070,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[13942787566051910019,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.000788022064618,-6.266203653947348e-16]],[4,[0.0,1.0]],[1,[0.0,0.0]],[3,[1.000788022064618,1.0000000000000009]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[3,3],[2,2]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13852123721901366011,{"inputs":[{"Node":{"node_id":456239140723765386,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[819.6941583984747,299.6363877833991]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.20900992053447,59.27277556679853]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-3.2814312084546346e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7171713123860587892,{"inputs":[{"Node":{"node_id":18431382379595272672,"output_index":0}},{"Node":{"node_id":9798215931018813676,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7884283658260267478,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1184.9261314031187,552.5]],[3,[1250.2370205355735,545.0000000000001]],[4,[1203.5863854409629,557.4999999999999]],[2,[1231.5767664977295,540.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[1,2],[3,4],[4,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16564941800301062922,{"inputs":[{"Node":{"node_id":18371793711669837037,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":0.03}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3616319631707471648,{"inputs":[{"Node":{"node_id":12852312236973354891,"output_index":0}},{"Node":{"node_id":16727310898641763441,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1104068854328504126,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[1343.538290724796,580.0000000000001]],[4,[1343.5382907247958,520.0]],[3,[1530.14083110324,470.00000000000216]],[2,[1530.14083110324,530.000000000003]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[1,1],[2,2]],"end_point":[[1,2],[3,4],[2,3],[4,1]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[2,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13942146309185231085,{"inputs":[{"Node":{"node_id":15166516760575860563,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}],[0.2134053325596848,{"red":0.45490196,"green":0.70980394,"blue":0.58431375,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4417705336480124,0.7894513882255817],"end":[0.4000315611112892,0.37243515464306]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.36862746,"green":0.57254905,"blue":0.45490196,"alpha":1.0}],[0.2134053325596848,{"red":0.45490196,"green":0.70980394,"blue":0.58431375,"alpha":1.0}],[1.0,{"red":1.0,"green":0.84705883,"blue":0.4627451,"alpha":1.0}]],"gradient_type":"Linear","start":[0.4417705336480124,0.7894513882255817],"end":[0.4000315611112892,0.37243515464306]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14449527838292182035,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"delta":[[5,[662.6063100137173,612.5432098765428]],[11,[713.6278006401462,612.5505258344765]],[1,[699.8518518518516,598.1234567901233]],[15,[763.4567901234569,605.6296296296294]],[13,[734.8148148148149,620.9492455418381]],[18,[725.5089163237311,594.6117969821673]],[7,[692.1871665904588,615.6720012193263]],[2,[667.3909465020577,593.3827160493828]],[17,[749.8271604938273,587.4567901234568]],[14,[728.493827160494,609.9753086419753]],[10,[709.413808870599,616.4718792866942]],[12,[721.9094650205761,611.3799725651577]],[16,[726.2990397805214,601.9862825788753]],[3,[699.7421124828531,603.0617283950616]],[4,[682.3593964334707,606.4197530864195]],[8,[701.8247218411828,611.4580094497792]],[9,[709.3552812071331,611.4970278920897]],[6,[695.3964334705074,609.7777777777776]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"remove":[],"start_point":[[6,6],[12,12],[7,7],[14,14],[11,11],[2,2],[1,1],[8,8],[13,13],[10,10],[17,17],[4,4],[3,3],[18,18],[5,5],[9,9],[15,15],[16,16]],"end_point":[[10,11],[18,1],[5,6],[8,9],[14,15],[13,14],[3,4],[7,8],[16,17],[17,18],[11,12],[2,3],[1,2],[9,10],[4,5],[6,7],[12,13],[15,16]],"handle_primary":[[4,[-6.038618148571572,2.2123832635880945]],[7,[0.0,0.0]],[15,[-15.992684042066571,-5.647919524462736]],[5,[0.0,0.0]],[16,[0.0,0.0]],[11,[0.9510922553114368,-0.40840938602514143]],[13,[-3.101966163694442,-4.096936442615402]],[9,[1.0398530837227329,0.17152215813985094]],[3,[0.0,0.0]],[6,[0.0,0.0]],[10,[2.71082158531226,-3.275875783141601]],[1,[-13.651577503429507,-4.016460905349504]],[8,[0.0,0.0]],[12,[0.6886396813392821,0.35058484628291353]],[17,[-7.648317030623161,4.388047332817109]],[18,[-0.0877914951989851,0.0]],[14,[-0.1771601410563335,-2.331086581557088]],[2,[5.399176954732297,6.584362139917744]]],"handle_end":[[3,[6.038618148571345,-2.2123832635879808]],[17,null],[2,[0.0,0.0]],[8,[-3.7847889041303233,-0.6242950769699291]],[1,[8.559670781892919,2.502057613168745]],[11,[-1.2025737194898056,-0.6122274594622468]],[14,[-22.51851851851859,-0.614540466392441]],[9,null],[15,[2.8483462886752022,1.1315348270080676]],[18,[0.0,0.0]],[10,null],[6,[4.13595488492615,-4.1749733272365575]],[4,[0.0,0.0]],[13,[-0.5267489711934559,1.053497942386798]],[7,[-5.1358024691359105,5.530864197530718]],[12,[-6.90626428898031,-2.3996342021031296]],[5,[-8.69135802469134,3.3580246913579685]],[16,[-5.977212841894016,7.381559383908893]]],"stroke":[[2,0],[12,0],[9,0],[17,0],[4,0],[7,0],[8,0],[15,0],[10,0],[16,0],[11,0],[1,0],[14,0],[13,0],[3,0],[18,0],[6,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":18}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13861850149743924125,{"inputs":[{"Node":{"node_id":13442128106088307772,"output_index":0}},{"Node":{"node_id":5891705401441266824,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4398598693761352299,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[709.0896534380867,469.99999999999994]],[2,[821.0511776651531,500.0]],[3,[933.0127018922194,470.0]],[4,[821.0511776651532,440.0000000000001]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4]],"end_point":[[2,3],[1,2],[3,4],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,5.684341886080804e-14]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16732345645494316637,{"inputs":[{"Node":{"node_id":11450962621506425680,"output_index":0}},{"Node":{"node_id":7637119583909417127,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[938033825024582130,{"inputs":[{"Node":{"node_id":10477328336261010694,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":1.0}],[1.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":0.0}]],"gradient_type":"Linear","start":[0.44995556068938913,0.40889389103747775],"end":[0.42763248011625454,0.6979899795516591]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":1.0}],[1.0,{"red":0.5019608,"green":0.72156864,"blue":0.70980394,"alpha":0.0}]],"gradient_type":"Linear","start":[0.44995556068938913,0.40889389103747775],"end":[0.42763248011625454,0.6979899795516591]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12019361655085452072,{"inputs":[{"Node":{"node_id":2036609094647228373,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.98352292316827]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.2222560378726955e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[585709295659496998,{"inputs":[{"Node":{"node_id":11990662272042254522,"output_index":0}},{"Node":{"node_id":12331680982485935376,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15347111149235590492,{"inputs":[{"Node":{"node_id":2209276411833629008,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1080.8351529382842,378.9835229231682]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[221.0038859407525,220.57244110912933]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.2222560378726955e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14752203606937854133,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[597.1281292110193,599.9999999999997]],[3,[1044.9742261192855,439.99999999999994]],[2,[597.1281292110197,559.9999999999997]],[4,[1044.9742261192855,480.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[3,4],[4,1],[2,3],[1,2]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10849502918952703647,{"inputs":[{"Node":{"node_id":9663740787529879916,"output_index":0}},{"Node":{"node_id":17433098630591807963,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11506204916439878896,{"inputs":[{"Node":{"node_id":2640491057355360805,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7005645574203740491,{"inputs":[{"Node":{"node_id":17873337220577786871,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2452294403891427489,{"inputs":[{"Node":{"node_id":9278774434958175105,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.3372549,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Linear","start":[0.027025122260555538,0.6600000000000135],"end":[0.9916422150126412,0.04000000000001247]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.3372549,"green":0.5647059,"blue":0.5529412,"alpha":1.0}]],"gradient_type":"Linear","start":[0.027025122260555538,0.6600000000000135],"end":[0.9916422150126412,0.04000000000001247]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17638504852426495381,{"inputs":[{"Node":{"node_id":17881728913029763313,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7363207208514658,0.8045676758185962],"end":[0.02104094774655124,0.19319223963735063]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.972549,"green":0.87058824,"blue":0.6666667,"alpha":1.0}],[1.0,{"red":0.98039216,"green":0.94509804,"blue":0.7058824,"alpha":1.0}]],"gradient_type":"Radial","start":[0.7363207208514658,0.8045676758185962],"end":[0.02104094774655124,0.19319223963735063]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13696921450692276893,{"inputs":[{"Node":{"node_id":729026403095264425,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9059757781988896,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.8930663763318565,-1.4466906873466163],"end":[1.0003976000579349,0.2239198862330611]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[0.9059757781988896,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":1.0}],[1.0,{"red":0.27058825,"green":0.49411765,"blue":0.5137255,"alpha":0.0}]],"gradient_type":"Radial","start":[0.8930663763318565,-1.4466906873466163],"end":[1.0003976000579349,0.2239198862330611]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[764189229787475993,{"inputs":[{"Node":{"node_id":194878846429432339,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[664587514588499648,{"inputs":[{"Node":{"node_id":5365849201631468915,"output_index":0}},{"Node":{"node_id":16564941800301062922,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4924169570021915606,{"inputs":[{"Node":{"node_id":972153153989181918,"output_index":0}},{"Node":{"node_id":8015732980153557800,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13853529851208960143,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[29.146213900404632,142.10291541428978]],[4,[-40.648024782723304,138.90840278889075]],[1,[-39.199465111941095,125.88462054688308]],[2,[28.09271595801783,129.8163283935271]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[3,3],[1,1]],"end_point":[[3,4],[2,3],[1,2],[4,1]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[-37.794238683127446,8.35487917411865]],[2,[0.0,0.0]],[3,[27.65672806576993,9.286366023261053]],[4,[0.0,0.0]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16416441286881083283,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[1306.2177826491068,529.9999999999972]],[2,[1492.8203230275508,509.99999999999994]],[1,[1306.217782649107,559.9999999999999]],[3,[1492.8203230275506,480.00000000000006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[4,0],[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7948029953091985757,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.5]],[4,[0.0,0.5]],[3,[0.5,1.0]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[1,[0.27589238888950707,0.0]],[4,[0.0,-0.275892388889507]]],"handle_end":[[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]],[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9663740787529879916,{"inputs":[{"Node":{"node_id":14633096010607565334,"output_index":0}},{"Node":{"node_id":10651614176902312108,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9323583246068171750,{"inputs":[{"Node":{"node_id":3680957604830907751,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.54901963,"green":0.7372549,"blue":0.654902,"alpha":1.0}],[1.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}]],"gradient_type":"Linear","start":[0.481496333638864,0.31809715494984925],"end":[0.5186182401466546,0.7659061379880119]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.54901963,"green":0.7372549,"blue":0.654902,"alpha":1.0}],[1.0,{"red":0.44705883,"green":0.654902,"blue":0.50980395,"alpha":1.0}]],"gradient_type":"Linear","start":[0.481496333638864,0.31809715494984925],"end":[0.5186182401466546,0.7659061379880119]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15876464101883822838,{"inputs":[{"Node":{"node_id":3227544593834141716,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.33333334,"green":0.5647059,"blue":0.5529412,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.33333334,"green":0.5647059,"blue":0.5529412,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5317925967883407701,{"inputs":[{"Node":{"node_id":13853529851208960143,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,2.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[729026403095264425,{"inputs":[{"Node":{"node_id":9392462024456293097,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.24355652969996,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[972153153989181918,{"inputs":[{"Node":{"node_id":15488533792651297821,"output_index":0}},{"Node":{"node_id":9981992739451603109,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12852312236973354891,{"inputs":[{"Node":{"node_id":8181290118694677328,"output_index":0}},{"Node":{"node_id":2921219300441868542,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5017082804473894058,{"inputs":[{"Node":{"node_id":8165914767449151618,"output_index":0}},{"Node":{"node_id":8166796652234334001,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1268775104597510914,{"inputs":[{"Node":{"node_id":13861850149743924125,"output_index":0}},{"Node":{"node_id":18011777376689315137,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9641315149170593327,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[15,[1319.4403292181073,447.7366255144034]],[4,[1309.432098765432,385.3827160493827]],[8,[1270.5185185185182,430.0]],[11,[1259.4489801206926,442.53166286845914]],[20,[1326.2661179698216,436.1481481481482]],[1,[1313.111111111111,440.66666666666663]],[6,[1286.7160493827164,380.04205830395256]],[12,[1302.7379972565157,443.9615912208504]],[5,[1280.0,432.79012345679007]],[7,[1284.082304526749,376.2304526748971]],[19,[1353.7580246913572,440.1251028806582]],[10,[1267.5056400134067,396.48371220183463]],[2,[1297.047751590237,432.45710241679353]],[3,[1311.0123456790122,389.1358024691358]],[9,[1269.113854595336,397.6954732510288]],[17,[1343.538290724795,449.4814814814814]],[14,[1325.5637860082304,455.6378600823044]],[18,[1327.484998303753,444.1384489176408]],[13,[1312.9218106995884,446.85871056241416]],[16,[1323.5884773662551,445.96633567616453]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[6,6],[17,17],[8,8],[13,13],[18,18],[12,12],[16,16],[10,10],[11,11],[4,4],[9,9],[1,1],[5,5],[3,3],[7,7],[14,14],[19,19],[15,15],[20,20],[2,2]],"end_point":[[6,7],[14,15],[16,17],[2,3],[1,2],[10,11],[15,16],[18,19],[20,1],[3,4],[12,13],[4,5],[7,8],[9,10],[11,12],[8,9],[5,6],[19,20],[17,18],[13,14]],"handle_primary":[[5,[0.0,-30.09785939152056]],[6,null],[3,null],[12,[9.763281342613707,0.018425375535628064]],[18,[26.44161668001243,-3.0566001241026584]],[15,[0.05852766346606586,-1.7558299039780536]],[19,[-0.162851070793522,-0.9241759662677964]],[14,[0.7997581306144639,-0.5767761645364544]],[2,[-7.975963753017595,-5.0295761250696955]],[16,[19.75931834024595,4.512540664093933]],[8,[-2.1728395061727497,-5.1111111111111995]],[4,[-16.197530864197688,14.61728395061732]],[7,[-10.798353909464822,37.53086419753089]],[9,[0.0,0.0]],[1,[-1.6922078070856514,-5.274941522376082]],[20,null],[17,[0.17673990847697496,-0.9253757795596016]],[10,[-0.14088374697121253,12.961503560065635]],[13,[0.0,0.0]],[11,[14.00629256044499,3.614815506799175]]],"handle_end":[[1,[3.0857646420445235,-0.2303077208630384]],[3,null],[13,[-0.8413105648451165,0.6067432917530482]],[20,null],[8,[0.0,0.0]],[16,null],[19,[1.229080932784882,6.672153635116501]],[6,null],[18,null],[9,null],[17,null],[7,null],[10,[-4.337869009581482,-9.544008547471435]],[14,[-0.022878726643284608,0.6863617992941045]],[4,null],[5,null],[12,[0.0,0.0]],[2,null],[15,null],[11,[-11.251577773519555,-0.02123410547835647]]],"stroke":[[3,0],[17,0],[1,0],[7,0],[14,0],[18,0],[10,0],[13,0],[15,0],[11,0],[20,0],[4,0],[9,0],[16,0],[2,0],[8,0],[19,0],[12,0],[6,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3927358878935116440,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1082.2947341949805,450.0000000000013]],[1,[1194.2562584220414,520.0000000000001]],[4,[1194.2562584220411,420.00000000000006]],[2,[1082.2947341949798,490.0000000000013]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[6.821210263296962e-13,-40.0]],[1,[0.0,0.0]]],"handle_end":[[2,null],[1,null],[3,[0.0,0.0]],[4,[0.0,-1.1368683772161605e-13]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14255588039347536657,{"inputs":[{"Node":{"node_id":18185020559178852986,"output_index":0}},{"Node":{"node_id":5261200785298607501,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9640215309187299519,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[1268.8972745734306,457.8601932525698]],[3,[746.4101615137856,637.8601932525706]],[2,[1194.2562584220475,517.8601932525687]],[5,[1268.8972745734306,517.8601932525701]],[4,[746.4101615137852,657.8601932525711]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[3,4],[5,1],[4,5],[2,3]],"handle_primary":[[4,[0.0,0.0]],[5,[0.0,-60.00000000000029]],[2,[-447.8460969082618,120.00000000000192]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,null],[3,[0.0,0.0]],[2,null],[5,null],[1,null]],"stroke":[[4,0],[5,0],[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4101813853952238986,{"inputs":[{"Node":{"node_id":14161755104759532162,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9372549,"green":0.90588236,"blue":0.7764706,"alpha":0.7490196}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8884703330021429739,{"inputs":[{"Node":{"node_id":16732345645494316637,"output_index":0}},{"Node":{"node_id":532055960192543062,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2155997486525176376,{"inputs":[{"Node":{"node_id":15595689026000825531,"output_index":0}},{"Node":{"node_id":7639490284239357347,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13700218159488557234,{"inputs":[{"Node":{"node_id":10181153433637856462,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.4831746395427087,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.49908141270537343,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.5160486374122156,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.65708869278784,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.6729954659505047,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.6899626906573468,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7291993977919214,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7440457194104085,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.7588920410288952,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5008896367526079,0.4999999999999998],"end":[1.0,0.5]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.4831746395427087,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.49908141270537343,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.5160486374122156,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.65708869278784,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.6729954659505047,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.6899626906573468,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7291993977919214,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[0.7440457194104085,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],[0.7588920410288952,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.5008896367526079,0.4999999999999998],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8863202447825570192,{"inputs":[{"Node":{"node_id":5017082804473894058,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-299.38891648776223,-111.69072674057747]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0616145921394244,1.0616145921394244]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7156963182187517674,{"inputs":[{"Node":{"node_id":14752203606937854133,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565296996,-63.99999999999977]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[322234583139821148,{"inputs":[{"Node":{"node_id":6589978257209505606,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-63.99999999999994]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11990662272042254522,{"inputs":[{"Node":{"node_id":1147521068928676110,"output_index":0}},{"Node":{"node_id":15167880819976070791,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14633096010607565334,{"inputs":[{"Node":{"node_id":18046677540207938977,"output_index":0}},{"Node":{"node_id":12370676490908282512,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3227544593834141716,{"inputs":[{"Node":{"node_id":8256712316698018135,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-298.5640646053871,-113.9999999999974]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999996,0.9999999999999996]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2183401450260403525,{"inputs":[{"Node":{"node_id":16852951849051795674,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-261.2435565297001,-64.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11429712783984224234,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":12302362769310895852,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9392462024456293097,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[597.1281292110198,599.9999999999999]],[1,[1156.9357503463468,509.9999999999987]],[6,[1044.9742261192855,480.0]],[3,[783.7306695894646,560.0]],[4,[615.7883832488646,605.0000000000001]],[2,[877.0319397786863,584.9999999999998]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[5,5],[6,6],[2,2],[1,1],[4,4],[3,3]],"end_point":[[1,2],[2,3],[3,4],[4,5],[6,1],[5,6]],"handle_primary":[[5,[447.84609690826574,-119.99999999999989]],[2,[0.0,0.0]],[6,[0.0,0.0]],[3,null],[4,null],[1,[0.0,0.0]]],"handle_end":[[5,null],[6,[0.0,0.0]],[3,null],[2,null],[1,[0.0,0.0]],[4,null]],"stroke":[[6,0],[4,0],[3,0],[2,0],[1,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12331680982485935376,{"inputs":[{"Node":{"node_id":2183401450260403525,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7293479177394283,-0.000903965337796908],"end":[0.7877909957441462,0.5587258938108439]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.6313726}],[1.0,{"red":0.5882353,"green":0.627451,"blue":0.39607844,"alpha":0.0}]],"gradient_type":"Linear","start":[0.7293479177394283,-0.000903965337796908],"end":[0.7877909957441462,0.5587258938108439]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[3365825508845848745,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13700218159488557234,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15167880819976070791,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4105329493214975815,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15517065353723874205,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13942146309185231085,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3806549994589872867,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,84]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4191887059541031673,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7952384394377946257,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14255588039347536657,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,255]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2785423879796980286,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7171713123860587892,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17332567356044944766,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7156963182187517674,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10181153433637856462,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16229837691656808412,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6821938959315178556,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9393309733761233513,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15347111149235590492,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11506204916439878896,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4323461535289334196,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2510483139353274965,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11860177410232537211,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2077983679740571162,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14234384001010789008,{"persistent_metadata":{"reference":"Merge","display_name":"Plant (Lower Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3670594928372882885,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9798215931018813676,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3680957604830907751,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10189927996178548902,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12370676490908282512,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8181290118694677328,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12019361655085452072,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[70804263053697201,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15166516760575860563,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13868917743026516656,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16591255610014418910,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15670426414376277308,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15300421479077882117,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[972153153989181918,{"persistent_metadata":{"reference":"Merge","display_name":"Sphere Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16416441286881083283,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8463468388280418154,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5448146793323825465,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1147521068928676110,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3185536512640676801,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2900504420179573771,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5258402282444994019,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13701442050580061197,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4884180935153120645,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9695624216919732577,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17433098630591807963,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4197544064668946479,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,27]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15775513677915164685,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2881239077602364410,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3970872207068447290,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14752203606937854133,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9392462024456293097,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18011777376689315137,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11236872744106223256,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,36]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14791465604033956302,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8612613134760093452,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5261200785298607501,{"persistent_metadata":{"reference":"Blend Mode","display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12852312236973354891,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1156213189397385283,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,18]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14449527838292182035,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10564228200140683112,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13531127678140037818,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2209276411833629008,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14483299526002574058,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10852750245702849075,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1396768435017101055,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12931264630175648107,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10989897386232385465,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18046677540207938977,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8073807569018624098,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15876464101883822838,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10188337730058049439,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1108089904278882840,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18371793711669837037,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9138781233934614517,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13609749019463823009,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16244305414728361140,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13743495762122910279,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13442128106088307772,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12548387328300782726,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8884703330021429739,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5365849201631468915,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5891705401441266824,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1831743139584171612,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3616319631707471648,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6785205785632793666,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2225749123534781340,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4740496570730418920,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,24]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13942787566051910019,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14449710315388146362,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9323583246068171750,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11634802583144606404,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1229809699395562135,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3455270778005546310,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3564067978712674849,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17881728913029763313,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16732345645494316637,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11547499603328872398,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11450962621506425680,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7637119583909417127,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13852123721901366011,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","is_integer":false,"y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18187802220803838247,{"persistent_metadata":{"reference":"Blend Mode","display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9226731772122225003,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5670058004691708784,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10742991645899166287,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[456239140723765386,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13861850149743924125,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11429712783984224234,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10779665858841986661,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18431382379595272672,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[729026403095264425,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9771562518763748677,{"persistent_metadata":{"reference":"Merge","display_name":"Plant (Upper Left)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":39}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11479492521093639512,{"persistent_metadata":{"reference":"Blend Mode","display_name":"Blend Mode","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Blend Mode","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8891726805381758817,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[194878846429432339,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4968550668755026811,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8256712316698018135,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4924169570021915606,{"persistent_metadata":{"reference":"Merge","display_name":"Sphere","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1032659476619711014,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1490537476612110327,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9278774434958175105,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9409313765472227540,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11579925754926059876,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12302362769310895852,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2088390810384907709,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,72]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15723520455917422372,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4398598693761352299,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4243146970185091100,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2189393878093040029,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13920465562072008593,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","x":"W","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12998832508553378533,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7799679303995308634,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16793555741218543212,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10507084483235320484,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8958782938691501404,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9150078008481575131,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12331680982485935376,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9210109719406330381,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2036609094647228373,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11595529463602678384,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7030585744407664630,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13853529851208960143,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13207576193421440093,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5017082804473894058,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,60]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5434119356821575534,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7340659059180155803,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-44,219]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4046495708656778502,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6569279146800941123,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10651614176902312108,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7884283658260267478,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,15]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18185020559178852986,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9684750473849891261,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2843751023378786714,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16069762220015310717,{"persistent_metadata":{"reference":"Merge","display_name":"Fountain Water Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":87}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9157963288496356916,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3122972215852775755,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14102693648424950146,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4837219841531371489,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11158238411769751544,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2640491057355360805,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8028812053913481975,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16852951849051795674,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12172015233077238737,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7639490284239357347,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17965270694495451178,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,96]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15157035456876170143,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7671691070850213967,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6589978257209505606,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14019233912018234740,{"persistent_metadata":{"reference":"Merge","display_name":"Structure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":27}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[322234583139821148,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9993538712344947860,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[57904581517036791,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16261620049358949344,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17887542695709892422,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,126]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14842592386831797498,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16807867745126764195,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4187349759243468746,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16398743435291795904,{"persistent_metadata":{"reference":"Merge","display_name":"Fountain Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":36}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12930243402848966353,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2062662104423219162,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13747030364552895864,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2465823993152870948,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12360435709959435360,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15134939288287905620,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8165914767449151618,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10810157408196882043,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14330881008352607546,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[938033825024582130,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12683405703338263457,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11776939455674933130,{"persistent_metadata":{"reference":"Merge","display_name":"Backdrop Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1658032775659237960,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4757672276235057645,{"persistent_metadata":{"reference":"Merge","display_name":"Plant (Right)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":9}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[958845362613832240,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15488533792651297821,{"persistent_metadata":{"reference":"Merge","display_name":"Structure Reflection","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10849502918952703647,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7861616450605235840,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16847360882244487081,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4741515246389989284,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13946577152348504742,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13837327017498431546,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14341957170885045113,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16923062582661131268,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4101813853952238986,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4898866541060902381,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6868877732348460627,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2292399603649738346,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5317925967883407701,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14055195208113082127,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,48]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12875121980058869686,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[664587514588499648,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2791109467690716388,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2452294403891427489,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17059035448296015006,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[585709295659496998,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13287180494862716983,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7910743362843097140,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,30]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8034980397175569257,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1104068854328504126,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[532055960192543062,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15914878146223026034,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9935922395919478146,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12554549497938935061,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","is_integer":false,"y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2921219300441868542,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8242413775403456296,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17873337220577786871,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6556170892691431702,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9115451226763736660,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8015732980153557800,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9663740787529879916,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15216519480392295991,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6142412830271644616,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,39]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5326013268137833446,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[326112971739898070,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,21]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15478704582542175684,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4134257789770357215,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3927358878935116440,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17250040304106119844,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,39]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10477328336261010694,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11221222899304956410,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5574499968250848265,{"persistent_metadata":{"reference":"Merge","display_name":"Water","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9666682009015049330,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11895211316848895241,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11490835759023283071,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4847316728405535983,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5882319123081134737,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,189]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16059265180575745658,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,33]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3679103217373457623,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7339104629465306715,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5346759588580719138,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3227544593834141716,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14202574750104046500,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15595689026000825531,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2183401450260403525,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2155997486525176376,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-22,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17785019773455930267,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7948029953091985757,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3021739385836969518,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2310170068575553369,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11076863066321508991,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3966971396176820223,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13696921450692276893,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12469956387875933942,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14633096010607565334,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18085100003956405261,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7838724497953148309,{"persistent_metadata":{"reference":"Merge","display_name":"Geometric Ripples","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-9,3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17638504852426495381,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9908869573449854874,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","x":"W","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9981992739451603109,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9724746185253267560,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,36]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[514222872092587805,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14805036488257720752,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8508454285877707748,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[764189229787475993,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","unit":" px","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8343201730608263656,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2032185045476767535,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-36,216]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14400993470150734626,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4887570735033124574,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6777328619777499144,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13001069903842109798,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7067047867039575315,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[183952488591282082,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1268775104597510914,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[429913874753911073,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5540780316862276409,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5925268772265373737,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16727310898641763441,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8166796652234334001,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11634445349252640936,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14161755104759532162,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17533670083736420411,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9640215309187299519,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2058192342619930156,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3014633976566537110,{"persistent_metadata":{"reference":"Merge","display_name":"Boolean Cut","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16564941800301062922,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13817976820605296433,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7005645574203740491,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","unit":"x","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12537712543904859919,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10431241258085047322,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16510804133693080967,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4069478660487729695,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10917301734480569398,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11990662272042254522,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9641315149170593327,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15898396405528650339,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","is_integer":false,"y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14124486712683868036,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18128923159828618806,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15709488322180832347,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":true,"x":"W","unit":" px"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,0]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7259756719760382667,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8863202447825570192,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","unit":"x","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6006052038693767172,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15261165353096835967,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[693.0,-4081.136664739667],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,693.0,-4081.0],"node_graph_top_right":[1468.796875,0.0]},"selection_undo_history":[[],[],[],[],[],[15517065353723874205],[7340659059180155803],[7340659059180155803,13442128106088307772,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[16398743435291795904,4741515246389989284,14255588039347536657,5261200785298607501,2465823993152870948,15898396405528650339,16807867745126764195,18185020559178852986,4847316728405535983,11579925754926059876,15670426414376277308,5574499968250848265,5925268772265373737,4105329493214975815,12931264630175648107,11776939455674933130,9684750473849891261,70804263053697201,13942787566051910019],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[16398743435291795904,4741515246389989284,14255588039347536657,5261200785298607501,2465823993152870948,15898396405528650339,16807867745126764195,18185020559178852986,4847316728405535983,11579925754926059876,15670426414376277308,5574499968250848265,5925268772265373737,4105329493214975815,12931264630175648107,11776939455674933130,9684750473849891261,70804263053697201,13942787566051910019],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766,1268775104597510914,18011777376689315137,10564228200140683112,13001069903842109798,13861850149743924125,5891705401441266824,5670058004691708784],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[13442128106088307772],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766,1268775104597510914,18011777376689315137,10564228200140683112,13001069903842109798],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[13861850149743924125],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143,10188337730058049439,11076863066321508991,8891726805381758817,17332567356044944766],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[1268775104597510914],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695,9157963288496356916,1108089904278882840,5317925967883407701,13853529851208960143],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10188337730058049439],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412,10507084483235320484,1396768435017101055,15914878146223026034,4069478660487729695],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[9157963288496356916],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502,10989897386232385465,7339104629465306715,16229837691656808412],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10507084483235320484],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661,18431382379595272672,4191887059541031673,4046495708656778502],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[10989897386232385465],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162,7171713123860587892,9798215931018813676,10779665858841986661],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[18431382379595272672],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7340659059180155803,13531127678140037818,3970872207068447290,2077983679740571162],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[7171713123860587892],[7340659059180155803,7171713123860587892,18431382379595272672,10989897386232385465,10507084483235320484,9157963288496356916,10188337730058049439,1268775104597510914,13861850149743924125,13442128106088307772],[2032185045476767535],[11776939455674933130]],"selection_redo_history":[]}}},"collapsed":[7838724497953148310,9771562518763748678,14234384001010789009,4757672276235057646,4924169570021915607,15488533792651297822,16398743435291795905,972153153989181919,14019233912018234741,5574499968250848266,11776939455674933131,2032185045476767536,16069762220015310718],"commit_hash":"8d83fa707928a1c54fe10224695a0c4791ab3501","document_ptz":{"pan":[-639.4105997694348,-319.94980900906876],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Isometric":{"y_axis_spacing":20.0,"angle_a":15.0,"angle_b":15.0}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.60784316,"green":0.60784316,"blue":0.60784316,"alpha":0.25},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/marbled-mandelbrot.graphite b/demo-artwork/marbled-mandelbrot.graphite index 2cb1c9fad5..bc6f80fc8c 100644 --- a/demo-artwork/marbled-mandelbrot.graphite +++ b/demo-artwork/marbled-mandelbrot.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":12241147352993594415,"output_index":0,"lambda":false}}],"nodes":[[4388711862172196665,{"inputs":[],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::std_nodes::MandelbrotNode"}},"visible":true,"skip_deduplication":false}],[3606681156406984991,{"inputs":[{"Node":{"node_id":6323350524796370485,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"GradientStops":[[0.3237704918032787,{"red":1.0,"green":0.0,"blue":1.0,"alpha":0.1}],[0.5655737704918032,{"red":0.8901961,"green":0.8117647,"blue":0.39215687,"alpha":1.0}],[0.8155737704918032,{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.5}]]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::adjustments::GradientMapNode"}},"visible":true,"skip_deduplication":false}],[6029481207635803402,{"inputs":[{"Node":{"node_id":4388711862172196665,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7624113397561636853,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3606681156406984991,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[80924370013313595,{"inputs":[{"Node":{"node_id":6029481207635803402,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.19607843,"green":0.0,"blue":0.21176471,"alpha":1.0}],[0.12704918032786883,{"red":0.0627451,"green":0.19215687,"blue":0.39607844,"alpha":1.0}],[0.5,{"red":0.8901961,"green":0.8117647,"blue":0.39215687,"alpha":1.0}],[1.0,{"red":0.58431375,"green":0.92941177,"blue":0.92941177,"alpha":0.01}]]},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::adjustments::GradientMapNode"}},"visible":true,"skip_deduplication":false}],[6323350524796370485,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"NoiseType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"DomainWarpType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}},{"Value":{"tagged_value":{"FractalType":"PingPong"},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"CellularDistanceFunction":"Hybrid"},"exposed":false}},{"Value":{"tagged_value":{"CellularReturnType":"CellValue"},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::std_nodes::NoisePatternNode"}},"visible":true,"skip_deduplication":false}],[6565638614909771142,{"inputs":[{"Node":{"node_id":7624113397561636853,"output_index":0,"lambda":false}},{"Node":{"node_id":80924370013313595,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12241147352993594415,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6565638614909771142,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[6323350524796370485,{"persistent_metadata":{"reference":"Noise Pattern","display_name":"Noise Pattern","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacer","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_scale","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_noise_type","input_name":"Noise Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_type","input_name":"Domain Warp Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_amplitude","input_name":"Domain Warp Amplitude","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_type","input_name":"Fractal Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_octaves","input_name":"Fractal Octaves","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_lacunarity","input_name":"Fractal Lacunarity","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_gain","input_name":"Fractal Gain","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_weighted_strength","input_name":"Fractal Weighted Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_ping_pong_strength","input_name":"Fractal Ping Pong Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_distance_function","input_name":"Cellular Distance Function","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_return_type","input_name":"Cellular Return Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_jitter","input_name":"Cellular Jitter","input_description":"TODO"}}],"output_names":["Image"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[80924370013313595,{"persistent_metadata":{"reference":"Gradient Map","display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12241147352993594415,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6565638614909771142,{"persistent_metadata":{"reference":"Merge","display_name":"Mandelbrot Set","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-16,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4388711862172196665,{"persistent_metadata":{"reference":"Mandelbrot","display_name":"Mandelbrot","input_metadata":[],"output_names":["Raster"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7624113397561636853,{"persistent_metadata":{"reference":"Merge","display_name":"Swirly Noise","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6029481207635803402,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3606681156406984991,{"persistent_metadata":{"reference":"Gradient Map","display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[345.0,-187.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1336.0,394.0],"node_graph_top_right":[1468.796875,0.0]},"selection_undo_history":[[12241147352993594415]],"selection_redo_history":[]}}},"collapsed":[],"name":"marbled-mandelbrot.graphite","commit_hash":"f6ffa45a8180183d70a67d3e41249934a8fcacc9","document_ptz":{"pan":[-339.3903349049215,-502.62390663267854],"tilt":0.0,"zoom":4.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":12241147352993594415,"output_index":0}}],"nodes":[[4388711862172196665,{"inputs":[],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::std_nodes::MandelbrotNode"}},"visible":true,"skip_deduplication":false}],[3606681156406984991,{"inputs":[{"Node":{"node_id":6323350524796370485,"output_index":0}},{"Value":{"tagged_value":{"GradientStops":[[0.3237704918032787,{"red":1.0,"green":0.0,"blue":1.0,"alpha":0.1}],[0.5655737704918032,{"red":0.8901961,"green":0.8117647,"blue":0.39215687,"alpha":1.0}],[0.8155737704918032,{"red":0.0,"green":1.0,"blue":1.0,"alpha":0.5}]]},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::gradient_map::GradientMapNode"}},"visible":true,"skip_deduplication":false}],[6029481207635803402,{"inputs":[{"Node":{"node_id":4388711862172196665,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7624113397561636853,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3606681156406984991,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[80924370013313595,{"inputs":[{"Node":{"node_id":6029481207635803402,"output_index":0}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.19607843,"green":0.0,"blue":0.21176471,"alpha":1.0}],[0.12704918032786883,{"red":0.0627451,"green":0.19215687,"blue":0.39607844,"alpha":1.0}],[0.5,{"red":0.8901961,"green":0.8117647,"blue":0.39215687,"alpha":1.0}],[1.0,{"red":0.58431375,"green":0.92941177,"blue":0.92941177,"alpha":0.01}]]},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::gradient_map::GradientMapNode"}},"visible":true,"skip_deduplication":false}],[6323350524796370485,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"NoiseType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"DomainWarpType":"OpenSimplex2"},"exposed":false}},{"Value":{"tagged_value":{"F64":100.0},"exposed":false}},{"Value":{"tagged_value":{"FractalType":"PingPong"},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"CellularDistanceFunction":"Hybrid"},"exposed":false}},{"Value":{"tagged_value":{"CellularReturnType":"CellValue"},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_raster_nodes::std_nodes::NoisePatternNode"}},"visible":true,"skip_deduplication":false}],[6565638614909771142,{"inputs":[{"Node":{"node_id":7624113397561636853,"output_index":0}},{"Node":{"node_id":80924370013313595,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12241147352993594415,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6565638614909771142,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[7624113397561636853,{"persistent_metadata":{"reference":"Merge","display_name":"Swirly Noise","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6565638614909771142,{"persistent_metadata":{"reference":"Merge","display_name":"Mandelbrot Set","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-16,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6323350524796370485,{"persistent_metadata":{"reference":"Noise Pattern","display_name":"Noise Pattern","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacer","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_scale","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_noise_type","input_name":"Noise Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_type","input_name":"Domain Warp Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_domain_warp_amplitude","input_name":"Domain Warp Amplitude","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_type","input_name":"Fractal Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_octaves","input_name":"Fractal Octaves","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_lacunarity","input_name":"Fractal Lacunarity","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_gain","input_name":"Fractal Gain","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_fractal_weighted_strength","input_name":"Fractal Weighted Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_ping_pong_strength","input_name":"Fractal Ping Pong Strength","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_distance_function","input_name":"Cellular Distance Function","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_return_type","input_name":"Cellular Return Type","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"noise_properties_cellular_jitter","input_name":"Cellular Jitter","input_description":"TODO"}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3606681156406984991,{"persistent_metadata":{"reference":"Gradient Map","display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6029481207635803402,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","x":"W","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[80924370013313595,{"persistent_metadata":{"reference":"Gradient Map","display_name":"Gradient Map","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Image","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Gradient","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":""}}],"output_names":["Image"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12241147352993594415,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":true,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4388711862172196665,{"persistent_metadata":{"reference":"Mandelbrot","display_name":"Mandelbrot","input_metadata":[],"output_names":["Raster"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[345.0,-187.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1336.0,394.0],"node_graph_top_right":[1468.796875,0.0]},"selection_undo_history":[[12241147352993594415]],"selection_redo_history":[]}}},"collapsed":[],"commit_hash":"f6ffa45a8180183d70a67d3e41249934a8fcacc9","document_ptz":{"pan":[-339.3903349049215,-502.62390663267854],"tilt":0.0,"zoom":4.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/painted-dreams.graphite b/demo-artwork/painted-dreams.graphite index 8ed5f9f185..6434c0a594 100644 --- a/demo-artwork/painted-dreams.graphite +++ b/demo-artwork/painted-dreams.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":392274448837115448,"output_index":0,"lambda":false}}],"nodes":[[13353438235848911576,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6379137305818664393,18442321214082298093,18118267825025549699,6351696498298648253,17863574903157697896,4691860614575868200,301778328144628917,10625296323957562985,533731991408535384,13357220652574593654,15992617814592812350],"remove":[],"delta":[[6351696498298648253,[646.8148148148149,0.0]],[13357220652574593654,[574.2222222222222,108.44444444444449]],[6379137305818664393,[625.4814814814813,0.0]],[301778328144628917,[493.5149940383244,200.29629629629628]],[18442321214082298093,[565.6296296296297,122.96296296296298]],[17863574903157697896,[606.8148151308641,95.19407372365433]],[15992617814592812350,[621.0370370370368,0.0]],[4691860614575868200,[528.2962962962963,283.8518518518518]],[10625296323957562985,[473.4814814814815,272.5925925925926]],[18118267825025549699,[642.0740740740741,0.0]],[533731991408535384,[501.6296296296296,175.40740740740742]]]},"segments":{"add":[13662059715350867364,3384102572540409881,12035095010819582754,10146665273368938971,318560030360358929,8462655819889292900,3303411878775644985,8661113083384527971,2035327810332855521,11346538709718766144,3710133387837274291],"remove":[],"start_point":[[3710133387837274291,15992617814592812350],[12035095010819582754,18118267825025549699],[3303411878775644985,301778328144628917],[318560030360358929,17863574903157697896],[10146665273368938971,6351696498298648253],[8661113083384527971,10625296323957562985],[3384102572540409881,18442321214082298093],[8462655819889292900,4691860614575868200],[2035327810332855521,533731991408535384],[13662059715350867364,6379137305818664393],[11346538709718766144,13357220652574593654]],"end_point":[[11346538709718766144,15992617814592812350],[3384102572540409881,18118267825025549699],[318560030360358929,4691860614575868200],[3710133387837274291,6379137305818664393],[8462655819889292900,301778328144628917],[8661113083384527971,533731991408535384],[12035095010819582754,6351696498298648253],[13662059715350867364,18442321214082298093],[3303411878775644985,10625296323957562985],[2035327810332855521,13357220652574593654],[10146665273368938971,17863574903157697896]],"handle_primary":[[3710133387837274291,[0.0,0.0]],[3303411878775644985,[0.0,0.0]],[8661113083384527971,[0.2962962962963047,0.2962962962963047]],[11346538709718766144,[9.925839724176626,-9.951533978271286]],[13662059715350867364,[0.0,0.0]],[8462655819889292900,[0.0,0.0]],[10146665273368938971,[0.0,0.0]],[3384102572540409881,[0.0,0.0]],[2035327810332855521,[42.96296296296293,-41.7777777777778]],[318560030360358929,[-46.95465552079859,46.40007297527743]],[12035095010819582754,[0.0,0.0]]],"handle_end":[[318560030360358929,[-97.48148148148152,-81.18518518518522]],[2035327810332855521,[-8.299214014278164,8.32069754812484]],[13662059715350867364,[68.68148181185177,-54.8859262904691]],[8661113083384527971,[-42.34888386913234,41.180638796880466]],[3303411878775644985,[-6.2222222222222285,-40.59259259259261]],[10146665273368938971,[48.16592595101224,-47.597037061827145]],[3710133387837274291,[0.0,0.0]],[11346538709718766144,[1.1377781018271662,63.71555518874077]],[3384102572540409881,[0.5807410754567854,77.36888852918523]],[12035095010819582754,[0.0,0.0]],[8462655819889292900,[-21.74426522093495,47.99999999999997]]],"stroke":[[318560030360358929,0],[2035327810332855521,0],[8462655819889292900,0],[3384102572540409881,0],[11346538709718766144,0],[12035095010819582754,0],[3303411878775644985,0],[3710133387837274291,0],[8661113083384527971,0],[10146665273368938971,0],[13662059715350867364,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8661113083384527971},{"ty":"Primary","segment":2035327810332855521}],[{"ty":"End","segment":12035095010819582754},{"ty":"Primary","segment":10146665273368938971}],[{"ty":"Primary","segment":11346538709718766144},{"ty":"End","segment":2035327810332855521}],[{"ty":"End","segment":10146665273368938971},{"ty":"Primary","segment":318560030360358929}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16671141883125519098,{"inputs":[{"Node":{"node_id":16306737306999003555,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6445954214067437701,{"inputs":[{"Node":{"node_id":13670206802546093234,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[140396870212231820,{"inputs":[{"Node":{"node_id":18095952297474762348,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5449860184735415958,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[17520941196305861319,6029995238423674441,16590926169549948521,12817219955590128894,4723170318056755559,12317789037775437786,17339925811006567497,4659274885664969740,1541401134848201833,17321098837874422287,11084016020553554647,9729762716079513741,13279221198527484331,7727030009292816503,15701538241214188894],"remove":[],"delta":[[4659274885664969740,[896.0,523.0]],[13279221198527484331,[564.0,768.0]],[7727030009292816503,[0.0,768.0]],[1541401134848201833,[886.0,572.0]],[17339925811006567497,[898.0,468.0]],[12817219955590128894,[933.0,273.0]],[9729762716079513741,[585.0,666.0]],[6029995238423674441,[898.0,46.0]],[16590926169549948521,[869.0,147.0]],[4723170318056755559,[923.0,349.0]],[12317789037775437786,[902.0,394.0]],[17520941196305861319,[889.0,0.0]],[11084016020553554647,[655.0,636.0]],[17321098837874422287,[802.6666666666667,656.4444444444445]],[15701538241214188894,[0.0,0.0]]]},"segments":{"add":[862900208337901235,4806484166818510930,11569179934425192262,9808624553037921371,9730229894941201870,1248401493076165062,8832757535144158913,15056691877609602335,8919277736361106420,16631919016540861133,9314952320711038398,10137845066833192587,14740183693208469558,3307452201570141575,3876401232874291775],"remove":[],"start_point":[[8832757535144158913,17339925811006567497],[3876401232874291775,15701538241214188894],[1248401493076165062,12317789037775437786],[9808624553037921371,12817219955590128894],[9730229894941201870,4723170318056755559],[4806484166818510930,6029995238423674441],[10137845066833192587,9729762716079513741],[14740183693208469558,13279221198527484331],[15056691877609602335,4659274885664969740],[862900208337901235,17520941196305861319],[8919277736361106420,1541401134848201833],[16631919016540861133,17321098837874422287],[9314952320711038398,11084016020553554647],[3307452201570141575,7727030009292816503],[11569179934425192262,16590926169549948521]],"end_point":[[9314952320711038398,9729762716079513741],[16631919016540861133,11084016020553554647],[8832757535144158913,4659274885664969740],[11569179934425192262,12817219955590128894],[3876401232874291775,17520941196305861319],[862900208337901235,6029995238423674441],[15056691877609602335,1541401134848201833],[9730229894941201870,12317789037775437786],[1248401493076165062,17339925811006567497],[3307452201570141575,15701538241214188894],[9808624553037921371,4723170318056755559],[4806484166818510930,16590926169549948521],[14740183693208469558,7727030009292816503],[8919277736361106420,17321098837874422287],[10137845066833192587,13279221198527484331]],"handle_primary":[[8919277736361106420,[10.458809984597837,40.44073194044492]],[14740183693208469558,[0.0,0.0]],[3307452201570141575,[0.0,0.0]],[9314952320711038398,[-34.0,-7.0]],[8832757535144158913,[14.888888888888914,4.8888888888888005]],[4806484166818510930,[11.595886737767424,32.210796493798]],[3876401232874291775,[0.0,0.0]],[9808624553037921371,[18.0,36.0]],[15056691877609602335,[0.0,0.0]],[1248401493076165062,[21.0,27.0]],[862900208337901235,[0.0,0.0]],[11569179934425192262,[-4.0,51.0]],[9730229894941201870,[-24.00371914417652,11.366922485048674]],[10137845066833192587,[-19.0,43.0]],[16631919016540861133,[-63.996421719362885,-1.2074796550824587]]],"handle_end":[[9808624553037921371,[28.703703703703695,-13.592592592592496]],[1248401493076165062,[30.59259259259261,-36.59259259259255]],[8832757535144158913,[33.33333333333326,-9.666666666666742]],[9314952320711038398,[19.0,-43.0]],[3876401232874291775,[0.0,0.0]],[15056691877609602335,[-10.0,-38.66666666666663]],[16631919016540861133,[34.0,7.0]],[14740183693208469558,[0.0,0.0]],[3307452201570141575,[0.0,0.0]],[10137845066833192587,[0.0,0.0]],[4806484166818510930,[3.365858386031487,-42.91469442190146]],[11569179934425192262,[-18.0,-36.0]],[862900208337901235,[-9.000000000000114,-25.0]],[9730229894941201870,[-21.0,-27.0]],[8919277736361106420,[70.66666666666652,1.333333333333485]]],"stroke":[[11569179934425192262,0],[16631919016540861133,0],[9808624553037921371,0],[3876401232874291775,0],[862900208337901235,0],[9730229894941201870,0],[15056691877609602335,0],[9314952320711038398,0],[3307452201570141575,0],[14740183693208469558,0],[10137845066833192587,0],[4806484166818510930,0],[8832757535144158913,0],[8919277736361106420,0],[1248401493076165062,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":11569179934425192262},{"ty":"Primary","segment":9808624553037921371}],[{"ty":"End","segment":16631919016540861133},{"ty":"Primary","segment":9314952320711038398}],[{"ty":"End","segment":862900208337901235},{"ty":"Primary","segment":4806484166818510930}],[{"ty":"End","segment":15056691877609602335},{"ty":"Primary","segment":8919277736361106420}],[{"ty":"End","segment":4806484166818510930},{"ty":"Primary","segment":11569179934425192262}],[{"ty":"End","segment":9808624553037921371},{"ty":"Primary","segment":9730229894941201870}],[{"ty":"End","segment":9730229894941201870},{"ty":"Primary","segment":1248401493076165062}],[{"ty":"End","segment":9314952320711038398},{"ty":"Primary","segment":10137845066833192587}],[{"ty":"End","segment":3307452201570141575},{"ty":"Primary","segment":3876401232874291775}],[{"ty":"End","segment":8919277736361106420},{"ty":"Primary","segment":16631919016540861133}],[{"ty":"End","segment":10137845066833192587},{"ty":"Primary","segment":14740183693208469558}],[{"ty":"End","segment":14740183693208469558},{"ty":"Primary","segment":3307452201570141575}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8832757535144158913},{"ty":"End","segment":1248401493076165062}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12709602171929957216,{"inputs":[{"Node":{"node_id":17753909951719808506,"output_index":0,"lambda":false}},{"Node":{"node_id":12922148192688274227,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16609137733952262762,{"inputs":[{"Node":{"node_id":17397123104674848450,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7855094781869605606,{"inputs":[{"Node":{"node_id":14141479077115894852,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractBack"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8460565235419043665,{"inputs":[{"Node":{"node_id":3079923906392020295,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,412.1]},"exposed":false}},{"Value":{"tagged_value":{"F64":27.6},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[6194305264313730032,{"inputs":[{"Node":{"node_id":4560146526699152877,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14950060858756810933,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[9346093213164033195,3249248431686392864,9577388580635291078],"remove":[],"delta":[[3249248431686392864,[1536.0,95.0]],[9346093213164033195,[1211.0,0.0]],[9577388580635291078,[1536.0,0.0]]]},"segments":{"add":[9585086796709645600,13980191878100735848,1147165232046305110],"remove":[],"start_point":[[1147165232046305110,9577388580635291078],[9585086796709645600,9346093213164033195],[13980191878100735848,3249248431686392864]],"end_point":[[9585086796709645600,3249248431686392864],[13980191878100735848,9577388580635291078],[1147165232046305110,9346093213164033195]],"handle_primary":[[9585086796709645600,[0.0,0.0]],[13980191878100735848,[4.547473508864641e-13,2.8421709430404014e-14]],[1147165232046305110,[0.0,0.0]]],"handle_end":[[13980191878100735848,[0.0,0.0]],[1147165232046305110,[0.0,0.0]],[9585086796709645600,[-281.0,-17.00000000000003]]],"stroke":[[1147165232046305110,0],[9585086796709645600,0],[13980191878100735848,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13980191878100735848},{"ty":"Primary","segment":1147165232046305110}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14698962747138962125,{"inputs":[{"Node":{"node_id":17562801632450633291,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18031616785650843168,{"inputs":[{"Node":{"node_id":17952673493105230490,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[11196821089257149774,{"inputs":[{"Node":{"node_id":5888633415105234509,"output_index":0,"lambda":false}},{"Node":{"node_id":18031616785650843168,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8359580532088731394,{"inputs":[{"Node":{"node_id":6726954210929537972,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8269257328703012432,{"inputs":[{"Node":{"node_id":4102754869474520966,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13203761224559198689,{"inputs":[{"Node":{"node_id":4809200889774783438,"output_index":0,"lambda":false}},{"Node":{"node_id":14690269209726153565,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13670206802546093234,{"inputs":[{"Node":{"node_id":17285637344898461972,"output_index":0,"lambda":false}},{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7201841978411396053,{"inputs":[{"Node":{"node_id":4328376070224119511,"output_index":0,"lambda":false}},{"Node":{"node_id":17735408893002232096,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11429506195623419966,{"inputs":[{"Node":{"node_id":11301831865756336526,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9071802450034150503,{"inputs":[{"Node":{"node_id":9338394475379815879,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10063704933309776584,{"inputs":[{"Node":{"node_id":13838011362258067867,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false}],[3608604157153838227,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false}],[12185047359007423618,{"inputs":[{"Node":{"node_id":10080296672372912698,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7018444885869143173,{"inputs":[{"Node":{"node_id":12234961922142600898,"output_index":0,"lambda":false}},{"Node":{"node_id":8426490990601560741,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1001728975241745659,{"inputs":[{"Node":{"node_id":12770183061753030023,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[392274448837115448,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6787585796949551500,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1536.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17562801632450633291,{"inputs":[{"Node":{"node_id":10286817149456341619,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3750439930725791025,{"inputs":[{"Node":{"node_id":12276520439585231336,"output_index":0,"lambda":false}},{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[682567808439406093,{"inputs":[{"Node":{"node_id":7755499790391969923,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":15},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[17740294143355019755,{"inputs":[{"Node":{"node_id":15301503532602557206,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16759836951269190891,{"inputs":[{"Node":{"node_id":11429506195623419966,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17495267820524300686,{"inputs":[{"Node":{"node_id":13616602029989984195,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1248.4973005620557,-153.1867628889006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.2972951295167027},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0000000000000002,1.0000000000000002]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.551115123125782e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12234961922142600898,{"inputs":[{"Node":{"node_id":1627123781166851142,"output_index":0,"lambda":false}},{"Node":{"node_id":18351415092709164412,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11095670964487764044,{"inputs":[{"Node":{"node_id":17603523494627491590,"output_index":0,"lambda":false}},{"Node":{"node_id":8359580532088731394,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11301831865756336526,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3251241957527197760,11100418327549747778,8048619563638005414,1078998931754662073],"remove":[],"delta":[[11100418327549747778,[910.880658436214,243.0946502057613]],[1078998931754662073,[942.0246913580248,264.2962962962963]],[8048619563638005414,[944.0577392578124,302.0703430175781]],[3251241957527197760,[875.8001811251517,185.6784024477276]]]},"segments":{"add":[6165219920202055745,10795897848378052161,3439025775805007707,12551435438068218604],"remove":[],"start_point":[[10795897848378052161,11100418327549747778],[12551435438068218604,1078998931754662073],[3439025775805007707,8048619563638005414],[6165219920202055745,3251241957527197760]],"end_point":[[3439025775805007707,1078998931754662073],[10795897848378052161,8048619563638005414],[12551435438068218604,3251241957527197760],[6165219920202055745,11100418327549747778]],"handle_primary":[[3439025775805007707,[-2.629814161991817e-6,5.151861046215345e-6]],[10795897848378052161,[11.46027223334628,13.82427457744465]],[6165219920202055745,[0.0,0.0]],[12551435438068218604,[-14.61728395061732,-27.456790123456813]]],"handle_end":[[10795897848378052161,[-4.732636377154108,-19.33783272951229]],[6165219920202055745,[-29.36625514403283,-35.42386831275718]],[3439025775805007707,[14.61728395061732,27.456790123456813]],[12551435438068218604,[23.33217876876199,5.204454965879364]]],"stroke":[[12551435438068218604,0],[3439025775805007707,0],[10795897848378052161,0],[6165219920202055745,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6165219920202055745},{"ty":"Primary","segment":10795897848378052161}],[{"ty":"End","segment":3439025775805007707},{"ty":"Primary","segment":12551435438068218604}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15301503532602557206,{"inputs":[{"Node":{"node_id":6728362629909402903,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6787585796949551500,{"inputs":[{"Node":{"node_id":11095670964487764044,"output_index":0,"lambda":false}},{"Node":{"node_id":16177422101884031678,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18003287685830153881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4475009837548700636,4481635366652149569,1608608093193158603,4765910415851982345],"remove":[1647009925892902058],"delta":[[4481635366652149569,[684.8888888888889,395.55555555555554]],[4475009837548700636,[525.7325506063205,282.1042056224195]],[4765910415851982345,[283.33331298828125,354.6666564941406]],[1608608093193158603,[609.7777777777777,620.0]]]},"segments":{"add":[3045825504718908919,8024777209266880257,3983292299330016176,11103925991989272298],"remove":[13489289770112164650],"start_point":[[3045825504718908919,4475009837548700636],[8024777209266880257,4481635366652149569],[3983292299330016176,1608608093193158603],[11103925991989272298,4765910415851982345]],"end_point":[[3983292299330016176,4765910415851982345],[8024777209266880257,1608608093193158603],[11103925991989272298,4475009837548700636],[3045825504718908919,4481635366652149569]],"handle_primary":[[11103925991989272298,[0.0,0.0]],[3045825504718908919,[62.22222222222217,43.111111111111086]],[3983292299330016176,[0.0,0.0]],[8024777209266880257,[11.111111111111086,62.22222222222217]]],"handle_end":[[11103925991989272298,[-113.5844024581724,39.08097956276566]],[8024777209266880257,[34.66666666666674,-85.33333333333337]],[3045825504718908919,[-11.111111111111086,-62.22222222222217]],[3983292299330016176,[0.0,0.0]]],"stroke":[[8024777209266880257,0],[11103925991989272298,0],[3045825504718908919,0],[3983292299330016176,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3983292299330016176},{"ty":"Primary","segment":11103925991989272298}],[{"ty":"End","segment":3045825504718908919},{"ty":"Primary","segment":8024777209266880257}]],"remove_g1_continuous":[[{"ty":"End","segment":11103925991989272298},{"ty":"Primary","segment":3045825504718908919}],[{"ty":"End","segment":13489289770112164650},{"ty":"Primary","segment":3045825504718908919}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12770183061753030023,{"inputs":[{"Node":{"node_id":17495267820524300686,"output_index":0,"lambda":false}},{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17299978721726771610,{"inputs":[{"Node":{"node_id":7029437790788498388,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[459.4,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.6},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[9135110142507605216,{"inputs":[{"Node":{"node_id":11196821089257149774,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7104261880154687267,{"inputs":[{"Node":{"node_id":2834866505092039323,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18271512507682813443,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10872099980755217048,13049263474526562389,2409359561719399794,9175973472325454282,14263506369487797530,5496457317579994340,7125168137854779179,9658821733796680583,425878374398720476,5252668597335249558],"remove":[],"delta":[[7125168137854779179,[912.2962962962964,205.6296296296296]],[5496457317579994340,[929.3607681755832,198.40877914951983]],[10872099980755217048,[889.0,0.0]],[9658821733796680583,[920.5925925925926,208.0]],[5252668597335249558,[888.2516734908237,208.88931872324497]],[425878374398720476,[898.633744855967,207.99999999999997]],[2409359561719399794,[892.7407407407408,111.70370370370372]],[14263506369487797530,[886.5185185185185,178.66666666666669]],[9175973472325454282,[881.4814814814815,152.5925925925926]],[13049263474526562389,[903.1111111111112,55.70370370370371]]]},"segments":{"add":[16241193756011776206,13961346931609713434,6443321953815072406,13223251807271379465,6545223889678917273,9745298522639115232,8058164935346100149,9187894839116405225,5210886161307886529,11050813873332011119],"remove":[],"start_point":[[8058164935346100149,7125168137854779179],[16241193756011776206,10872099980755217048],[6443321953815072406,2409359561719399794],[9187894839116405225,9658821733796680583],[5210886161307886529,425878374398720476],[11050813873332011119,5252668597335249558],[9745298522639115232,5496457317579994340],[6545223889678917273,14263506369487797530],[13961346931609713434,13049263474526562389],[13223251807271379465,9175973472325454282]],"end_point":[[8058164935346100149,9658821733796680583],[11050813873332011119,10872099980755217048],[6443321953815072406,9175973472325454282],[5210886161307886529,5252668597335249558],[13961346931609713434,2409359561719399794],[6545223889678917273,5496457317579994340],[16241193756011776206,13049263474526562389],[9745298522639115232,7125168137854779179],[13223251807271379465,14263506369487797530],[9187894839116405225,425878374398720476]],"handle_primary":[[9187894839116405225,[-8.263374485596842,1.880201188843188]],[8058164935346100149,[0.0,0.0]],[11050813873332011119,[-5.947146741852521,-2.1403475298293415]],[6545223889678917273,[0.0,0.0]],[13961346931609713434,[6.522611384544012,17.67970980547415]],[13223251807271379465,[3.2812071330587287,8.329218106995853]],[6443321953815072406,[-9.144953020396894,24.145964868041293]],[9745298522639115232,[0.0,0.0]],[5210886161307886529,[-1.1368683772161605e-13,-2.8421709430404014e-14]],[16241193756011776206,[0.0,0.0]]],"handle_end":[[9187894839116405225,[4.974851394604343,2.0557841792410443]],[9745298522639115232,[7.703703703703695,-2.074074074074076]],[8058164935346100149,[-5.925925925925867,-2.370370370370381]],[13961346931609713434,[10.984910836762538,-29.00411522633746]],[13223251807271379465,[0.7901234567900701,-9.492455418381354]],[6443321953815072406,[-3.3276401397055917,-8.447086508484054]],[11050813873332011119,[-86.26684502769479,250.37037037037035]],[16241193756011776206,[-7.506172839506348,-20.345679012345684]],[6545223889678917273,[-25.3424782807499,-1.3461362597164737]],[5210886161307886529,[5.947146741852521,2.1403475298293415]]],"stroke":[[9745298522639115232,0],[16241193756011776206,0],[8058164935346100149,0],[5210886161307886529,0],[13961346931609713434,0],[11050813873332011119,0],[9187894839116405225,0],[13223251807271379465,0],[6545223889678917273,0],[6443321953815072406,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":5210886161307886529},{"ty":"Primary","segment":11050813873332011119}],[{"ty":"End","segment":6443321953815072406},{"ty":"Primary","segment":13223251807271379465}],[{"ty":"End","segment":16241193756011776206},{"ty":"Primary","segment":13961346931609713434}],[{"ty":"End","segment":13961346931609713434},{"ty":"Primary","segment":6443321953815072406}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9187894839116405225},{"ty":"End","segment":8058164935346100149}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8511737864852441844,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[17696051535511578981,{"inputs":[{"Node":{"node_id":16780039553038473906,"output_index":0,"lambda":false}},{"Node":{"node_id":9071802450034150503,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10286817149456341619,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10786213048155734586,12599396287665855262,6164201091766276213,6781153531246981076,15695128662656633322,8241402276734357681,10333377922713208038,3749627916562964805,2535476870476707501],"remove":[],"delta":[[8241402276734357681,[853.3333333333336,529.1851851851854]],[10786213048155734586,[917.7283950617284,502.91358024691374]],[12599396287665855262,[902.5185185185188,498.56790123456807]],[15695128662656633322,[825.6790123456792,509.4320987654323]],[2535476870476707501,[887.5061728395062,568.6913580246915]],[10333377922713208038,[843.4567901234569,550.1234567901236]],[6781153531246981076,[872.6913580246915,513.7777777777779]],[3749627916562964805,[866.172839506173,558.2222222222224]],[6164201091766276213,[902.9135802469136,506.8641975308643]]]},"segments":{"add":[15700595221504820396,6369399239389505343,17761347836385237495,3021925106447084698,14489254209548096966,3461110970422306113,14847678502054094837,14515109677644612103,264894972572137143],"remove":[],"start_point":[[14515109677644612103,3749627916562964805],[14489254209548096966,15695128662656633322],[264894972572137143,2535476870476707501],[3461110970422306113,8241402276734357681],[14847678502054094837,10333377922713208038],[6369399239389505343,12599396287665855262],[17761347836385237495,6164201091766276213],[3021925106447084698,6781153531246981076],[15700595221504820396,10786213048155734586]],"end_point":[[264894972572137143,10786213048155734586],[3461110970422306113,10333377922713208038],[17761347836385237495,6781153531246981076],[3021925106447084698,15695128662656633322],[14515109677644612103,2535476870476707501],[14847678502054094837,3749627916562964805],[14489254209548096966,8241402276734357681],[6369399239389505343,6164201091766276213],[15700595221504820396,12599396287665855262]],"handle_primary":[[3021925106447084698,[-16.59259259259261,2.370370370370324]],[264894972572137143,[0.0,0.0]],[6369399239389505343,[-7.1111111111111995,-5.530864197530889]],[3461110970422306113,[0.38915905346209456,1.493515242756871]],[15700595221504820396,[0.0,0.0]],[14489254209548096966,[-0.3950434518873181,1.0617032941893854]],[17761347836385237495,[0.0,0.0]],[14847678502054094837,[0.7901234567900701,2.765432098765473]],[14515109677644612103,[8.888888888888914,0.0]]],"handle_end":[[15700595221504820396,[7.1111111111111995,5.530864197530889]],[3021925106447084698,[0.5488119028742631,-1.474965354794051]],[14847678502054094837,[-8.888888888888914,0.0]],[264894972572137143,[3.753086419753003,37.1358024691358]],[3461110970422306113,[-0.7901234567900701,-2.765432098765473]],[14515109677644612103,[0.0,0.0]],[17761347836385237495,[16.59259259259261,-2.370370370370324]],[14489254209548096966,[-0.5712718875797691,-2.192428171126153]],[6369399239389505343,[0.0,0.0]]],"stroke":[[14847678502054094837,0],[14489254209548096966,0],[264894972572137143,0],[15700595221504820396,0],[6369399239389505343,0],[3461110970422306113,0],[17761347836385237495,0],[14515109677644612103,0],[3021925106447084698,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":14489254209548096966},{"ty":"Primary","segment":3461110970422306113}],[{"ty":"End","segment":14847678502054094837},{"ty":"Primary","segment":14515109677644612103}],[{"ty":"End","segment":6369399239389505343},{"ty":"Primary","segment":17761347836385237495}],[{"ty":"End","segment":14515109677644612103},{"ty":"Primary","segment":264894972572137143}],[{"ty":"End","segment":15700595221504820396},{"ty":"Primary","segment":6369399239389505343}],[{"ty":"End","segment":3021925106447084698},{"ty":"Primary","segment":14489254209548096966}],[{"ty":"End","segment":17761347836385237495},{"ty":"Primary","segment":3021925106447084698}],[{"ty":"End","segment":3461110970422306113},{"ty":"Primary","segment":14847678502054094837}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6726954210929537972,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[177515045030371783,4609870404630548899,1458337690478625792,16230687409600568539,8055802412900565217,12390708657704154619,12909592102393222573,6873550371723398444,13416153271806375161,2492294980235986276,12448133448335459077,7624137673235413199],"remove":[],"delta":[[4609870404630548899,[589.432098765432,64.79012345679011]],[2492294980235986276,[604.4434936307387,42.970116997735616]],[12448133448335459077,[610.3703703703706,2.4308653429145085e-63]],[177515045030371783,[604.2883706752018,0.0]],[6873550371723398444,[538.6666666666667,136.0]],[12909592102393222573,[607.8024691358027,0.0]],[13416153271806375161,[531.8518518518517,131.2592592592593]],[1458337690478625792,[473.1851851851851,213.62962962962965]],[7624137673235413199,[617.8765432098766,2.465190328815662e-32]],[16230687409600568539,[491.55555555555554,311.55555555555566]],[8055802412900565217,[480.4444444444445,219.7777777777778]],[12390708657704154619,[596.6748971193416,72.42798353909465]]]},"segments":{"add":[12529947318087068663,5578827639764758986,1705877195608053135,2463526518527501592,9361245670457788924,921651403153242564,9825559201153691780,15749222431214672690,14294722277069184337,4341232355541306629,3818841110886669992],"remove":[17799038492181728804,11060716078587457450,5057709998225566481,17843645051722826880,16939098306153440303],"start_point":[[1705877195608053135,16230687409600568539],[14294722277069184337,12448133448335459077],[12529947318087068663,177515045030371783],[9361245670457788924,6873550371723398444],[2463526518527501592,8055802412900565217],[9825559201153691780,13416153271806375161],[921651403153242564,4609870404630548899],[4341232355541306629,12390708657704154619],[5578827639764758986,1458337690478625792],[15749222431214672690,2492294980235986276],[3818841110886669992,7624137673235413199]],"end_point":[[921651403153242564,13416153271806375161],[1705877195608053135,8055802412900565217],[9825559201153691780,1458337690478625792],[15749222431214672690,12909592102393222573],[9361245670457788924,12390708657704154619],[14294722277069184337,2492294980235986276],[3818841110886669992,12448133448335459077],[2463526518527501592,6873550371723398444],[5578827639764758986,16230687409600568539],[12529947318087068663,4609870404630548899],[4341232355541306629,7624137673235413199]],"handle_primary":[[9825559201153691780,[-30.00610951685011,28.39287782239575]],[4341232355541306629,[19.753086419753117,-26.73251028806584]],[15749222431214672690,[3.877242131088792,-22.333682252383095]],[14294722277069184337,[-0.2633744855968416,28.576131687242796]],[2463526518527501592,[9.74414620103056,-24.528368023283747]],[1705877195608053135,[0.0,0.0]],[12529947318087068663,[0.0,0.0]],[921651403153242564,[-7.513106110924076,12.956274823940417]],[5578827639764758986,[-19.25925925925924,60.44444444444443]],[3818841110886669992,[0.0,0.0]],[9361245670457788924,[22.844654233974516,-21.876660410500975]]],"handle_end":[[9361245670457788924,[-16.14969885498249,21.855925783742933]],[3818841110886669992,[0.0,0.0]],[15749222431214672690,[0.0,0.0]],[921651403153242564,[27.555555555555657,-26.07407407407412]],[1705877195608053135,[-19.33333333333331,48.66666666666666]],[12529947318087068663,[12.90534979423876,-22.255144032921805]],[4341232355541306629,[0.0,0.0]],[5578827639764758986,[0.0,0.0]],[2463526518527501592,[-34.96296296296305,33.481481481481495]],[9825559201153691780,[6.194184133897295,-19.440208666385132]],[14294722277069184337,[0.0,0.0]]],"stroke":[[12529947318087068663,0],[2463526518527501592,0],[5578827639764758986,0],[3818841110886669992,0],[14294722277069184337,0],[1705877195608053135,0],[4341232355541306629,0],[15749222431214672690,0],[9825559201153691780,0],[9361245670457788924,0],[921651403153242564,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":4341232355541306629}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":11060716078587457450}],[{"ty":"Primary","segment":5578827639764758986},{"ty":"End","segment":9825559201153691780}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":17799038492181728804}],[{"ty":"End","segment":17799038492181728804},{"ty":"Primary","segment":16939098306153440303}],[{"ty":"End","segment":17843645051722826880},{"ty":"Primary","segment":15749222431214672690}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":2463526518527501592}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":5057709998225566481}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":17843645051722826880}],[{"ty":"End","segment":921651403153242564},{"ty":"Primary","segment":9825559201153691780}],[{"ty":"End","segment":2463526518527501592},{"ty":"Primary","segment":9361245670457788924}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":921651403153242564}],[{"ty":"End","segment":11060716078587457450},{"ty":"Primary","segment":5578827639764758986}],[{"ty":"Primary","segment":16939098306153440303},{"ty":"End","segment":9361245670457788924}]],"remove_g1_continuous":[[{"ty":"End","segment":4341232355541306629},{"ty":"Primary","segment":3818841110886669992}],[{"ty":"Primary","segment":14294722277069184337},{"ty":"End","segment":3818841110886669992}],[{"ty":"Primary","segment":15749222431214672690},{"ty":"End","segment":14294722277069184337}],[{"ty":"End","segment":5057709998225566481},{"ty":"Primary","segment":14294722277069184337}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17603523494627491590,{"inputs":[{"Node":{"node_id":10995640810984321903,"output_index":0,"lambda":false}},{"Node":{"node_id":17740294143355019755,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13616602029989984195,{"inputs":[{"Node":{"node_id":3050731459444225191,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FlattenPathNode"}},"visible":true,"skip_deduplication":false}],[4301099429811409147,{"inputs":[{"Node":{"node_id":57390435731316553,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[81.3755165062,-154.9064700048801]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.4164633072520061},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3109716240255919254,{"inputs":[{"Node":{"node_id":5877930116725120460,"output_index":0,"lambda":false}},{"Node":{"node_id":18053728639616073084,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2723198387862533596,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0,"lambda":false}},{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18351415092709164412,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6484183251661832039,{"inputs":[{"Node":{"node_id":294265135510952894,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[474.2,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.2},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12922148192688274227,{"inputs":[{"Node":{"node_id":18188505856445531484,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7755499790391969923,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[6503655938154160104,{"inputs":[{"Node":{"node_id":17696051535511578981,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16780039553038473906,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7104088139635280554,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1508440849951861669,{"inputs":[{"Node":{"node_id":8566844905246185636,"output_index":0,"lambda":false}},{"Node":{"node_id":7480253252288032958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5856350938151339368,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5138872293174440313,14935583009751134816,9014079831396927156,7008812441195504980,9603704700847490044,7238075805746621699,2355002738045707979,5021902985892894619,17629528758352690600,5995306636877552],"remove":[10768931421586254879],"delta":[[17629528758352690600,[892.148148148148,480.2962962962963]],[5995306636877552,[912.8888888888888,479.7037037037037]],[7238075805746621699,[798.6831275720165,497.9094650205762]],[5138872293174440313,[922.9629629629628,422.22222222222223]],[9603704700847490044,[821.037037037037,464.2962962962963]],[14935583009751134816,[914.9629629629628,418.3703703703703]],[2355002738045707979,[826.2057613168724,485.0041152263375]],[7008812441195504980,[888.8888888888887,421.3333333333333]],[9014079831396927156,[908.4444444444443,429.9259259259259]],[5021902985892894619,[857.679012345679,478.2880658436215]]]},"segments":{"add":[7250062683967197158,14131440324578863745,4499620435559196394,14571502160667941876,7203043366367198812,239843798079287870,7655921914272804429,12687760936062936386,7117413478945421556,9071432674597727163],"remove":[3746587001535987651],"start_point":[[239843798079287870,2355002738045707979],[14131440324578863745,14935583009751134816],[9071432674597727163,7238075805746621699],[7655921914272804429,5021902985892894619],[7203043366367198812,9603704700847490044],[7250062683967197158,5138872293174440313],[12687760936062936386,17629528758352690600],[14571502160667941876,7008812441195504980],[4499620435559196394,9014079831396927156],[7117413478945421556,5995306636877552]],"end_point":[[4499620435559196394,7008812441195504980],[12687760936062936386,5995306636877552],[7250062683967197158,14935583009751134816],[9071432674597727163,2355002738045707979],[7655921914272804429,17629528758352690600],[14131440324578863745,9014079831396927156],[14571502160667941876,9603704700847490044],[7203043366367198812,7238075805746621699],[7117413478945421556,5138872293174440313],[239843798079287870,5021902985892894619]],"handle_primary":[[14571502160667941876,[-0.5925925925926094,0.0]],[4499620435559196394,[-0.2962962962963047,-0.2962962962963047]],[7250062683967197158,[0.0,0.0]],[9071432674597727163,[4.345679012345499,-3.555555555555543]],[12687760936062936386,[10.666666666666742,3.555555555555543]],[7117413478945421556,[0.0,0.0]],[7655921914272804429,[18.172839506172863,-1.9753086419753456]],[14131440324578863745,[0.0,0.0]],[239843798079287870,[9.61316872427983,-1.843621399176982]],[7203043366367198812,[0.0,0.2962962962963047]]],"handle_end":[[12687760936062936386,[0.0,0.0]],[239843798079287870,[-21.502976534539364,2.3372800581021456]],[7250062683967197158,[0.0,0.0]],[7117413478945421556,[15.703703703703695,33.48148148148147]],[7203043366367198812,[-1.1851851851852189,-25.18518518518516]],[7655921914272804429,[-10.666666666666742,-3.555555555555543]],[14571502160667941876,[24.395061728395035,-0.36213991769540144]],[14131440324578863745,[2.962962962963047,-3.259259259259238]],[9071432674597727163,[-9.913826570592164,1.9012818080587977]],[4499620435559196394,[8.59259259259261,5.629629629629619]]],"stroke":[[14131440324578863745,0],[7655921914272804429,0],[239843798079287870,0],[4499620435559196394,0],[14571502160667941876,0],[9071432674597727163,0],[12687760936062936386,0],[7203043366367198812,0],[7117413478945421556,0],[7250062683967197158,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":239843798079287870},{"ty":"Primary","segment":7655921914272804429}],[{"ty":"End","segment":7655921914272804429},{"ty":"Primary","segment":12687760936062936386}],[{"ty":"End","segment":12687760936062936386},{"ty":"Primary","segment":7117413478945421556}],[{"ty":"Primary","segment":239843798079287870},{"ty":"End","segment":9071432674597727163}],[{"ty":"End","segment":7250062683967197158},{"ty":"Primary","segment":14131440324578863745}]],"remove_g1_continuous":[[{"ty":"End","segment":3746587001535987651},{"ty":"Primary","segment":239843798079287870}],[{"ty":"End","segment":9071432674597727163},{"ty":"Primary","segment":3746587001535987651}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14257963317028524134,{"inputs":[{"Node":{"node_id":1001728975241745659,"output_index":0,"lambda":false}},{"Node":{"node_id":6503655938154160104,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1491840484128555837,{"inputs":[{"Node":{"node_id":1508440849951861669,"output_index":0,"lambda":false}},{"Node":{"node_id":9808637865669223270,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5888633415105234509,{"inputs":[{"Node":{"node_id":3750439930725791025,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1258994191538244490,{"inputs":[{"Node":{"node_id":5488285068107445023,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5486211022469996717,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[266134622800431246,12075466065090700811,7115673652122600762,9852238672814254137],"remove":[134095410253559933],"delta":[[9852238672814254137,[879.7947439326053,110.54094004739208]],[266134622800431246,[525.7325506063205,282.1042056224195]],[7115673652122600762,[646.5386352539062,343.99395751953125]],[12075466065090700811,[877.0370370370372,136.5925925925926]]]},"segments":{"add":[17255728395700231433,3166693019207180063,10242199012993595528,2159953159628520134],"remove":[10196443086284452827,13980530488817762548,3769008694104161528],"start_point":[[17255728395700231433,12075466065090700811],[2159953159628520134,9852238672814254137],[10242199012993595528,266134622800431246],[3166693019207180063,7115673652122600762]],"end_point":[[3166693019207180063,266134622800431246],[2159953159628520134,12075466065090700811],[17255728395700231433,7115673652122600762],[10242199012993595528,9852238672814254137]],"handle_primary":[[10242199012993595528,[137.37856050479058,-43.88198340019727]],[2159953159628520134,[0.0,0.0]],[3166693019207180063,[-126.67994767097883,-51.72627287889763]],[17255728395700231433,[0.0010773420832492775,-0.01370555995902123]]],"handle_end":[[17255728395700231433,[165.46136474609386,67.5615980360243]],[2159953159628520134,[0.0,0.0]],[10242199012993595528,[-15.794743932605344,36.71831921186718]],[3166693019207180063,[0.0,0.0]]],"stroke":[[2159953159628520134,0],[10242199012993595528,0],[3166693019207180063,0],[17255728395700231433,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3166693019207180063},{"ty":"End","segment":17255728395700231433}]],"remove_g1_continuous":[[{"ty":"Primary","segment":3769008694104161528},{"ty":"End","segment":10196443086284452827}],[{"ty":"End","segment":3166693019207180063},{"ty":"Primary","segment":13980530488817762548}],[{"ty":"End","segment":10242199012993595528},{"ty":"Primary","segment":2159953159628520134}],[{"ty":"Primary","segment":10242199012993595528},{"ty":"End","segment":3166693019207180063}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139129879376457893,{"inputs":[{"Node":{"node_id":11373527190663101881,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5954536408321808728,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8323145223085840944,87630150944518163,8212340198835025146,6057321578372831916,16788403743390653241,16686047298905200065,15635903913637220842,8652457572576966876,3124531241960914803,18307826411292029066,9969822516610975381,16995054111951247369,16808246968731723098],"remove":[],"delta":[[9969822516610975381,[0.0,0.0]],[18307826411292029066,[601.1756940654021,0.0]],[8323145223085840944,[891.5555555555554,569.3827160493826]],[8652457572576966876,[514.4523315429688,146.72100830078125]],[16808246968731723098,[891.5555555555554,768.0]],[16788403743390653241,[467.99999999999994,487.3333333333333]],[6057321578372831916,[708.148148148148,616.2962962962962]],[8212340198835025146,[830.8148148148148,633.7777777777776]],[15635903913637220842,[468.4799499511719,219.78570556640625]],[16686047298905200065,[283.3333333333333,354.66666666666663]],[16995054111951247369,[0.0,768.0]],[87630150944518163,[879.1111111111111,595.8518518518517]],[3124531241960914803,[589.9588477366256,64.65843621399176]]]},"segments":{"add":[14879480148926424885,5227512358023446442,17410347049685436697,9544743211426701912,14715945740984195653,515539069333222772,9242150930423817167,8823161072525575433,15885450050057549950,1662692131856898001,178608879920007638,12162371359208565273,16224358815792062223],"remove":[],"start_point":[[5227512358023446442,87630150944518163],[14879480148926424885,8323145223085840944],[515539069333222772,16686047298905200065],[9544743211426701912,6057321578372831916],[12162371359208565273,16995054111951247369],[9242150930423817167,15635903913637220842],[178608879920007638,9969822516610975381],[1662692131856898001,18307826411292029066],[15885450050057549950,3124531241960914803],[14715945740984195653,16788403743390653241],[8823161072525575433,8652457572576966876],[17410347049685436697,8212340198835025146],[16224358815792062223,16808246968731723098]],"end_point":[[9544743211426701912,16788403743390653241],[15885450050057549950,18307826411292029066],[1662692131856898001,9969822516610975381],[14715945740984195653,16686047298905200065],[17410347049685436697,6057321578372831916],[178608879920007638,16995054111951247369],[8823161072525575433,3124531241960914803],[5227512358023446442,8212340198835025146],[515539069333222772,15635903913637220842],[16224358815792062223,8323145223085840944],[12162371359208565273,16808246968731723098],[9242150930423817167,8652457572576966876],[14879480148926424885,87630150944518163]],"handle_primary":[[12162371359208565273,[0.0,0.0]],[14879480148926424885,[0.0,0.0]],[9242150930423817167,[27.25925925925918,-22.518518518518533]],[15885450050057549950,[11.193415637860312,-27.25925925925926]],[178608879920007638,[0.0,0.0]],[1662692131856898001,[0.0,0.0]],[5227512358023446442,[-4.444444444444457,18.074074074074133]],[8823161072525575433,[11.259252477575274,-22.666663275824646]],[515539069333222772,[48.66666666666663,-23.999999999999943]],[9544743211426701912,[-57.48148148148141,-21.629629629629676]],[14715945740984195653,[-92.66666666666656,-80.66666666666669]],[17410347049685436697,[-26.37037037037044,2.3703703703704377]],[16224358815792062223,[0.0,0.0]]],"handle_end":[[178608879920007638,[0.0,0.0]],[5227512358023446442,[26.37037037037044,-2.3703703703704377]],[14879480148926424885,[4.444444444444457,-18.074074074074133]],[14715945740984195653,[0.0,0.0]],[9544743211426701912,[92.66666666666656,80.66666666666669]],[9242150930423817167,[-9.36826657882972,18.859808361471693]],[1662692131856898001,[0.0,0.0]],[16224358815792062223,[0.0,0.0]],[8823161072525575433,[-12.439135136214697,30.29295262583988]],[515539069333222772,[-95.07216232621772,78.5378732260062]],[12162371359208565273,[0.0,0.0]],[17410347049685436697,[57.48148148148141,21.629629629629676]],[15885450050057549950,[0.0,0.0]]],"stroke":[[1662692131856898001,0],[15885450050057549950,0],[12162371359208565273,0],[515539069333222772,0],[14879480148926424885,0],[5227512358023446442,0],[9242150930423817167,0],[178608879920007638,0],[17410347049685436697,0],[16224358815792062223,0],[14715945740984195653,0],[9544743211426701912,0],[8823161072525575433,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":1662692131856898001},{"ty":"Primary","segment":178608879920007638}],[{"ty":"End","segment":515539069333222772},{"ty":"Primary","segment":9242150930423817167}],[{"ty":"End","segment":14879480148926424885},{"ty":"Primary","segment":5227512358023446442}],[{"ty":"End","segment":15885450050057549950},{"ty":"Primary","segment":1662692131856898001}],[{"ty":"End","segment":5227512358023446442},{"ty":"Primary","segment":17410347049685436697}],[{"ty":"End","segment":9242150930423817167},{"ty":"Primary","segment":8823161072525575433}],[{"ty":"End","segment":9544743211426701912},{"ty":"Primary","segment":14715945740984195653}],[{"ty":"End","segment":12162371359208565273},{"ty":"Primary","segment":16224358815792062223}],[{"ty":"End","segment":178608879920007638},{"ty":"Primary","segment":12162371359208565273}],[{"ty":"End","segment":8823161072525575433},{"ty":"Primary","segment":15885450050057549950}],[{"ty":"End","segment":17410347049685436697},{"ty":"Primary","segment":9544743211426701912}]],"remove_g1_continuous":[[{"ty":"End","segment":14715945740984195653},{"ty":"Primary","segment":515539069333222772}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18053728639616073084,{"inputs":[{"Node":{"node_id":6616450276140292763,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17569892869974995307,{"inputs":[{"Node":{"node_id":3997031659711823213,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}],[5534800796196967885,{"inputs":[{"Node":{"node_id":3608604157153838227,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CentroidNode"}},"visible":true,"skip_deduplication":false}],[7029437790788498388,{"inputs":[{"Node":{"node_id":1809704172129195322,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17351444026127625357,{"inputs":[{"Node":{"node_id":14808063168960305551,"output_index":0,"lambda":false}},{"Node":{"node_id":13916027199283115943,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17735408893002232096,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17285637344898461972,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16608607268690234590,17457877227823502997,13436129231170586617,5992570223148766873],"remove":[],"delta":[[16608607268690234590,[0.0,340.0]],[5992570223148766873,[-2.273736754432321e-13,768.0]],[17457877227823502997,[273.0,476.0]],[13436129231170586617,[481.3333333333333,768.0]]]},"segments":{"add":[13284808974014161135,5472571334856691465,8776124420595946733,4274372337254864190],"remove":[],"start_point":[[4274372337254864190,5992570223148766873],[5472571334856691465,17457877227823502997],[8776124420595946733,13436129231170586617],[13284808974014161135,16608607268690234590]],"end_point":[[4274372337254864190,16608607268690234590],[13284808974014161135,17457877227823502997],[5472571334856691465,13436129231170586617],[8776124420595946733,5992570223148766873]],"handle_primary":[[4274372337254864190,[0.0,0.0]],[8776124420595946733,[0.0,0.0]],[13284808974014161135,[161.73791370620617,43.57576470888159]],[5472571334856691465,[146.0,-13.0]]],"handle_end":[[8776124420595946733,[0.0,0.0]],[5472571334856691465,[0.4078646547782227,-253.307727480567]],[4274372337254864190,[0.0,0.0]],[13284808974014161135,[-165.43581782916667,14.730586519035386]]],"stroke":[[5472571334856691465,0],[4274372337254864190,0],[8776124420595946733,0],[13284808974014161135,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13284808974014161135},{"ty":"Primary","segment":5472571334856691465}],[{"ty":"End","segment":8776124420595946733},{"ty":"Primary","segment":4274372337254864190}]],"remove_g1_continuous":[[{"ty":"Primary","segment":13284808974014161135},{"ty":"End","segment":4274372337254864190}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15900830679378240619,{"inputs":[{"Node":{"node_id":2287485748649359627,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1662641269094032596,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6728362629909402903,{"inputs":[{"Node":{"node_id":5856350938151339368,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12276520439585231336,{"inputs":[{"Node":{"node_id":13795432594059356320,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[997.5029638869316,545.7213923090854]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10995640810984321903,{"inputs":[{"Node":{"node_id":12353675714904258944,"output_index":0,"lambda":false}},{"Node":{"node_id":10265035897167064154,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15354358358546908017,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4328376070224119511,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13446205009526451196,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1009114585722052052,{"inputs":[{"Node":{"node_id":15692102598187739001,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7252918969430566594,{"inputs":[{"Node":{"node_id":5534800796196967885,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false}],[14684142559936015947,{"inputs":[{"Node":{"node_id":15930698052919171086,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4771789845668099116,{"inputs":[{"Node":{"node_id":17351444026127625357,"output_index":0,"lambda":false}},{"Node":{"node_id":14684142559936015947,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5014806436727666175,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}},{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139765080256493579,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3507505346656189771,2904729023031858224,854708012647259796,4175610638601362388,7821224334582795476,2195807584570698921],"remove":[16332448509429125699,1009888023123207923],"delta":[[2195807584570698921,[993.0,767.9999999999999]],[2904729023031858224,[491.3420376907663,506.7530051313737]],[4175610638601362388,[957.0,324.0]],[3507505346656189771,[552.0,768.0000000000001]],[854708012647259796,[740.0,298.0]],[7821224334582795476,[1093.0,600.0]]]},"segments":{"add":[4553965744616493549,13993263006398686359,6577640955869157325,17304574948462342226,8570276641842028192,17183285389582020412],"remove":[546565283439891712,5710832026764395735],"start_point":[[6577640955869157325,854708012647259796],[13993263006398686359,2904729023031858224],[17304574948462342226,4175610638601362388],[17183285389582020412,7821224334582795476],[8570276641842028192,2195807584570698921],[4553965744616493549,3507505346656189771]],"end_point":[[13993263006398686359,854708012647259796],[17183285389582020412,2195807584570698921],[6577640955869157325,4175610638601362388],[8570276641842028192,3507505346656189771],[4553965744616493549,2904729023031858224],[17304574948462342226,7821224334582795476]],"handle_primary":[[6577640955869157325,[102.0,-45.0]],[8570276641842028192,[0.0,0.0]],[4553965744616493549,[0.0,0.0]],[13993263006398686359,[0.0,-84.7537417270637]],[17304574948462342226,[50.35246044959922,33.38607084805801]],[17183285389582020412,[-24.08196064282073,82.4624712920831]]],"handle_end":[[4553965744616493549,[0.0,135.2464055295568]],[17183285389582020412,[0.0,0.0]],[17304574948462342226,[33.0,-113.0]],[6577640955869157325,[-50.35246044959922,-33.38607084805801]],[8570276641842028192,[0.0,0.0]],[13993263006398686359,[-102.0,45.0]]],"stroke":[[17304574948462342226,0],[8570276641842028192,0],[13993263006398686359,0],[17183285389582020412,0],[4553965744616493549,0],[6577640955869157325,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":17183285389582020412}],[{"ty":"End","segment":17304574948462342226},{"ty":"Primary","segment":17183285389582020412}],[{"ty":"End","segment":13993263006398686359},{"ty":"Primary","segment":6577640955869157325}],[{"ty":"End","segment":6577640955869157325},{"ty":"Primary","segment":17304574948462342226}],[{"ty":"End","segment":4553965744616493549},{"ty":"Primary","segment":13993263006398686359}]],"remove_g1_continuous":[[{"ty":"End","segment":17183285389582020412},{"ty":"Primary","segment":546565283439891712}],[{"ty":"End","segment":5710832026764395735},{"ty":"Primary","segment":8570276641842028192}],[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":546565283439891712}],[{"ty":"End","segment":546565283439891712},{"ty":"Primary","segment":5710832026764395735}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10080296672372912698,{"inputs":[{"Node":{"node_id":12867379765049504290,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2834866505092039323,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14690269209726153565,{"inputs":[{"Node":{"node_id":7376049709233607419,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18188505856445531484,{"inputs":[{"Node":{"node_id":8887924609778270360,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3410481056630111806,{"inputs":[{"Node":{"node_id":1097494158696050491,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12353675714904258944,{"inputs":[{"Node":{"node_id":13203761224559198689,"output_index":0,"lambda":false}},{"Node":{"node_id":17271572793812678706,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17271572793812678706,{"inputs":[{"Node":{"node_id":15900830679378240619,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14228923746783465609,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[2003133867055127539,13758328146055368475],"remove":[],"delta":[[2003133867055127539,[1011.111083984375,786.3993530273438]],[4648964341912884959,[324.66666666666646,0.0]],[16569120368910754547,[-43.0,0.0]],[13758328146055368475,[1299.3064572949788,786.3993743175897]]]},"segments":{"add":[8214025514312603513,7334532063810723038,13431612844608018700],"remove":[6602880736207868665,3433930674303663828],"start_point":[[8214025514312603513,2003133867055127539],[7334532063810723038,16569120368910754547],[13431612844608018700,13758328146055368475]],"end_point":[[7334532063810723038,13758328146055368475],[8214025514312603513,4648964341912884959],[13431612844608018700,2003133867055127539]],"handle_primary":[[13431612844608018700,null],[9030015329489789075,[69.08057198853999,-80.19415805947563]],[7334532063810723038,null],[8214025514312603513,null]],"handle_end":[[7334532063810723038,null],[8214025514312603513,null],[9030015329489789075,[0.0,0.0]],[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[13431612844608018700,null]],"stroke":[[7334532063810723038,0],[13431612844608018700,0],[8214025514312603513,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}],[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11210964267417873667,{"inputs":[{"Node":{"node_id":4261249487994076490,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[91.7203910728,-99.9607940061]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.40698564029617024},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7962101329808960965,{"inputs":[{"Node":{"node_id":16322546010403524636,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false}],[8887924609778270360,{"inputs":[{"Node":{"node_id":5014806436727666175,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17036604842139972912,{"inputs":[{"Node":{"node_id":1491840484128555837,"output_index":0,"lambda":false}},{"Node":{"node_id":11210964267417873667,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12145355397916841389,{"inputs":[{"Node":{"node_id":16759836951269190891,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4470272391975492611,{"inputs":[{"Node":{"node_id":7018444885869143173,"output_index":0,"lambda":false}},{"Node":{"node_id":12145355397916841389,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1097494158696050491,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":15.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[5556372312033787775,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false}],[294265135510952894,{"inputs":[{"Node":{"node_id":11264395591110193456,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2025899804080897524,{"inputs":[{"Node":{"node_id":17740496701763775226,"output_index":0,"lambda":false}},{"Node":{"node_id":3214181946162459584,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[990192925663920333,{"inputs":[{"Node":{"node_id":3410481056630111806,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[466.8,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.9},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[11264395591110193456,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[13027689870767713939,{"inputs":[{"Node":{"node_id":7201841978411396053,"output_index":0,"lambda":false}},{"Node":{"node_id":13340751444307201866,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9338394475379815879,{"inputs":[{"Node":{"node_id":7977952035097419157,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1327.0278641242007,11.102707365920756]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.23820276778328575},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[230.36030209674013,67.6958526826066]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.855605378252775e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14496934933990319842,{"inputs":[{"Node":{"node_id":12709602171929957216,"output_index":0,"lambda":false}},{"Node":{"node_id":12185047359007423618,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13739729101529293427,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3214181946162459584,{"inputs":[{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16322546010403524636,{"inputs":[{"Node":{"node_id":5556372312033787775,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CentroidNode"}},"visible":true,"skip_deduplication":false}],[804622576568168609,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[13654185056786459919,6952183320761642858,2802617302192982616,7639287212006638253,15117515618866904690,15750781936547583892,7025422618543191491,3831533579307185652,16937470333767479918,10412162547161259027,5269777039739103358],"remove":[],"delta":[[13654185056786459919,[946.1728395061732,330.8641975308642]],[7639287212006638253,[862.8888888888888,349.3333333333333]],[16937470333767479918,[876.6666666666665,359.55555555555554]],[2802617302192982616,[911.7777777777776,334.88888888888886]],[10412162547161259027,[887.3333333333333,376.0]],[6952183320761642858,[933.9259259259262,324.3456790123457]],[15750781936547583892,[840.6666666666665,368.66666666666663]],[15117515618866904690,[819.1111111111109,354.44444444444434]],[3831533579307185652,[880.4444444444443,357.3333333333333]],[7025422618543191491,[911.5555555555554,345.3333333333333]],[5269777039739103358,[902.2222222222222,394.66666666666663]]]},"segments":{"add":[10498175376126066982,10426255560432238561,11214998966879437330,1241631398419524272,15286139376878919277,15838384105575178137,12854270992100552972,379744301215040936,4069217348643062888,10438163357339042361,9330486019469919863],"remove":[],"start_point":[[10438163357339042361,10412162547161259027],[10498175376126066982,13654185056786459919],[15838384105575178137,15750781936547583892],[9330486019469919863,5269777039739103358],[10426255560432238561,6952183320761642858],[379744301215040936,3831533579307185652],[12854270992100552972,7025422618543191491],[4069217348643062888,16937470333767479918],[1241631398419524272,7639287212006638253],[11214998966879437330,2802617302192982616],[15286139376878919277,15117515618866904690]],"end_point":[[15838384105575178137,7025422618543191491],[10498175376126066982,6952183320761642858],[9330486019469919863,13654185056786459919],[12854270992100552972,3831533579307185652],[1241631398419524272,15117515618866904690],[10426255560432238561,2802617302192982616],[379744301215040936,16937470333767479918],[10438163357339042361,5269777039739103358],[15286139376878919277,15750781936547583892],[11214998966879437330,7639287212006638253],[4069217348643062888,10412162547161259027]],"handle_primary":[[10438163357339042361,[1.3333333333332575,10.888888888888856]],[10498175376126066982,[0.0,0.0]],[12854270992100552972,[-0.4444444444443434,0.0]],[9330486019469919863,[5.555555555555429,-0.2222222222221717]],[11214998966879437330,[-16.666666666666515,-3.777777777777771]],[1241631398419524272,[-17.111111111111086,12.888888888888856]],[379744301215040936,[-0.2222222222221717,0.0]],[15286139376878919277,[-0.5188510642573192,0.6084707935380038]],[10426255560432238561,[-0.39506172839503506,-0.19753086419757435]],[4069217348643062888,[0.0,0.0]],[15838384105575178137,[22.222222222222285,5.555555555555543]]],"handle_end":[[10438163357339042361,[-5.555555555555429,0.2222222222221717]],[10498175376126066982,[4.9382716049382225,0.19753086419757435]],[379744301215040936,[0.0,0.0]],[15286139376878919277,[-22.222222222222285,-5.555555555555543]],[1241631398419524272,[0.5951379226228255,-0.6979344728938486]],[11214998966879437330,[17.111111111111086,-12.888888888888856]],[10426255560432238561,[16.666666666666515,3.777777777777771]],[9330486019469919863,[0.0,0.0]],[4069217348643062888,[-1.3333333333332575,-10.888888888888856]],[15838384105575178137,[-20.0,2.0]],[12854270992100552972,[33.77777777777783,2.2222222222222285]]],"stroke":[[10426255560432238561,0],[1241631398419524272,0],[15286139376878919277,0],[10438163357339042361,0],[12854270992100552972,0],[4069217348643062888,0],[10498175376126066982,0],[379744301215040936,0],[15838384105575178137,0],[11214998966879437330,0],[9330486019469919863,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":15286139376878919277},{"ty":"Primary","segment":15838384105575178137}],[{"ty":"End","segment":1241631398419524272},{"ty":"Primary","segment":15286139376878919277}],[{"ty":"End","segment":4069217348643062888},{"ty":"Primary","segment":10438163357339042361}],[{"ty":"End","segment":10438163357339042361},{"ty":"Primary","segment":9330486019469919863}],[{"ty":"End","segment":10426255560432238561},{"ty":"Primary","segment":11214998966879437330}],[{"ty":"End","segment":379744301215040936},{"ty":"Primary","segment":4069217348643062888}],[{"ty":"End","segment":11214998966879437330},{"ty":"Primary","segment":1241631398419524272}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17753909951719808506,{"inputs":[{"Node":{"node_id":2185437945364824599,"output_index":0,"lambda":false}},{"Node":{"node_id":9563008199132558110,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8566844905246185636,{"inputs":[{"Node":{"node_id":6852799892628327372,"output_index":0,"lambda":false}},{"Node":{"node_id":17131529656312051452,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18095952297474762348,{"inputs":[{"Node":{"node_id":5954536408321808728,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4261249487994076490,{"inputs":[{"Node":{"node_id":14516211820212764316,"output_index":0,"lambda":false}},{"Node":{"node_id":5534800796196967885,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8426490990601560741,{"inputs":[{"Node":{"node_id":10760002922115563021,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13795432594059356320,{"inputs":[{"Node":{"node_id":2871608309888343463,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FlattenPathNode"}},"visible":true,"skip_deduplication":false}],[7651693425519490419,{"inputs":[{"Node":{"node_id":4771789845668099116,"output_index":0,"lambda":false}},{"Node":{"node_id":15817956847588799375,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6616450276140292763,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[14760110820354327749,9465415708990918986,13517856880347849115,12398030966924498647,2930103517622848405,9496337687212684441],"remove":[],"delta":[[9496337687212684441,[732.148148148148,57.18518518518518]],[12398030966924498647,[823.4074074074074,97.4814814814815]],[2930103517622848405,[819.2592592592591,69.33333333333334]],[13517856880347849115,[777.1851851851851,92.44444444444446]],[14760110820354327749,[614.8148148148148,129.1851851851852]],[9465415708990918986,[706.3703703703703,86.51851851851853]]]},"segments":{"add":[18226408581696793441,16628058317667581864,3809009367670994230,13496648265229692336,10686631697241750410,11696351847604335156],"remove":[],"start_point":[[10686631697241750410,2930103517622848405],[16628058317667581864,9465415708990918986],[11696351847604335156,9496337687212684441],[18226408581696793441,14760110820354327749],[13496648265229692336,12398030966924498647],[3809009367670994230,13517856880347849115]],"end_point":[[13496648265229692336,2930103517622848405],[16628058317667581864,13517856880347849115],[11696351847604335156,14760110820354327749],[18226408581696793441,9465415708990918986],[3809009367670994230,12398030966924498647],[10686631697241750410,9496337687212684441]],"handle_primary":[[11696351847604335156,[-29.333333333333258,11.55555555555555]],[18226408581696793441,[0.0,0.0]],[13496648265229692336,[14.222222222222172,-0.8888888888888857]],[16628058317667581864,[41.185185185185105,-9.7777777777778]],[10686631697241750410,[-13.037037037036953,-4.444444444444457]],[3809009367670994230,[21.33333333333337,4.740740740740733]]],"handle_end":[[3809009367670994230,[-14.222222222222172,0.8888888888888857]],[11696351847604335156,[54.81481481481478,-42.37037037037035]],[13496648265229692336,[13.037037037036953,4.444444444444457]],[18226408581696793441,[-41.185185185185105,9.7777777777778]],[10686631697241750410,[29.333333333333258,-11.55555555555555]],[16628058317667581864,[-21.33333333333337,-4.740740740740733]]],"stroke":[[13496648265229692336,0],[3809009367670994230,0],[16628058317667581864,0],[18226408581696793441,0],[11696351847604335156,0],[10686631697241750410,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3809009367670994230},{"ty":"Primary","segment":13496648265229692336}],[{"ty":"End","segment":16628058317667581864},{"ty":"Primary","segment":3809009367670994230}],[{"ty":"End","segment":10686631697241750410},{"ty":"Primary","segment":11696351847604335156}],[{"ty":"End","segment":18226408581696793441},{"ty":"Primary","segment":16628058317667581864}],[{"ty":"End","segment":13496648265229692336},{"ty":"Primary","segment":10686631697241750410}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4560146526699152877,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0,"lambda":false}},{"Node":{"node_id":13646498613066619660,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[57390435731316553,{"inputs":[{"Node":{"node_id":8460565235419043665,"output_index":0,"lambda":false}},{"Node":{"node_id":13838011362258067867,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16785043320296790229,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[9808637865669223270,{"inputs":[{"Node":{"node_id":140396870212231820,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16177422101884031678,{"inputs":[{"Node":{"node_id":13353438235848911576,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11201759760883367635,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5173348374891662425,12314285668680405002,7388288026322342161,12796056970187696453],"remove":[],"delta":[[5173348374891662425,[969.0,0.0]],[12314285668680405002,[1085.0,181.0]],[7388288026322342161,[1277.0,319.0]],[12796056970187696453,[1418.0,0.0]]]},"segments":{"add":[10860608091363771974,9177623211202289793,18091265337503274797,9065140293539496953],"remove":[],"start_point":[[10860608091363771974,5173348374891662425],[18091265337503274797,7388288026322342161],[9177623211202289793,12314285668680405002],[9065140293539496953,12796056970187696453]],"end_point":[[10860608091363771974,12314285668680405002],[18091265337503274797,12796056970187696453],[9065140293539496953,5173348374891662425],[9177623211202289793,7388288026322342161]],"handle_primary":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-33.0,137.0]],[10860608091363771974,[0.0,0.0]],[18091265337503274797,[178.0,-35.0]]],"handle_end":[[9065140293539496953,[0.0,0.0]],[18091265337503274797,[168.99998492988766,81.0]],[9177623211202289793,[-77.81941867085992,15.301571086966838]],[10860608091363771974,[25.066898104916696,-104.0656072840481]]],"stroke":[[9177623211202289793,0],[18091265337503274797,0],[9065140293539496953,0],[10860608091363771974,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9177623211202289793},{"ty":"Primary","segment":18091265337503274797}],[{"ty":"End","segment":10860608091363771974},{"ty":"Primary","segment":9177623211202289793}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10760002922115563021,{"inputs":[{"Node":{"node_id":14257963317028524134,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13588160462734303101,{"inputs":[{"Node":{"node_id":17036604842139972912,"output_index":0,"lambda":false}},{"Node":{"node_id":4301099429811409147,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11373527190663101881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12058665768506126331,6802441093413090533,4854280308383915721,17729943149159368459,7436032950540776377,2189722519288419244,15817054697695831753,15744271344233846756,13877679667762731651,13567509413382199058,5664077098702810122,14178520291283306679,15575201098426093294],"remove":[],"delta":[[15817054697695831753,[806.716049382716,206.22222222222223]],[4854280308383915721,[813.9259259259259,200.2962962962963]],[15575201098426093294,[636.7407407407406,173.33333333333331]],[17729943149159368459,[801.1851851851852,199.90123456790124]],[6802441093413090533,[783.4074074074074,172.74074074074073]],[5664077098702810122,[686.5185185185185,191.1111111111111]],[13567509413382199058,[702.6831275720166,195.95061728395063]],[14178520291283306679,[668.4444444444443,183.1111111111111]],[7436032950540776377,[815.4074074074074,203.25925925925927]],[15744271344233846756,[785.7777777777777,205.62962962962965]],[2189722519288419244,[796.0493827160494,202.2716049382716]],[13877679667762731651,[743.4074074074074,234.66666666666669]],[12058665768506126331,[693.7283950617283,174.35390946502056]]]},"segments":{"add":[2336956120616260883,1639796012074210121,3918280827204321712,13932755083907220179,14941832641240060361,94092576912261794,18299135553255571870,3109091330258982137,11037018395008586448,16261506098907231989,8279051592565434787,2367379450383978497,5102625335252315850],"remove":[],"start_point":[[3109091330258982137,15744271344233846756],[14941832641240060361,7436032950540776377],[13932755083907220179,17729943149159368459],[1639796012074210121,6802441093413090533],[5102625335252315850,15575201098426093294],[11037018395008586448,13877679667762731651],[16261506098907231989,13567509413382199058],[94092576912261794,2189722519288419244],[8279051592565434787,5664077098702810122],[2367379450383978497,14178520291283306679],[18299135553255571870,15817054697695831753],[3918280827204321712,4854280308383915721],[2336956120616260883,12058665768506126331]],"end_point":[[94092576912261794,15817054697695831753],[3918280827204321712,17729943149159368459],[8279051592565434787,14178520291283306679],[2367379450383978497,15575201098426093294],[1639796012074210121,4854280308383915721],[14941832641240060361,2189722519288419244],[3109091330258982137,13877679667762731651],[2336956120616260883,6802441093413090533],[5102625335252315850,12058665768506126331],[18299135553255571870,15744271344233846756],[11037018395008586448,13567509413382199058],[13932755083907220179,7436032950540776377],[16261506098907231989,5664077098702810122]],"handle_primary":[[2367379450383978497,[-5.037037037036953,-1.7777777777777717]],[18299135553255571870,[0.0,0.0]],[14941832641240060361,[0.0,0.0]],[11037018395008586448,[0.0,0.0]],[94092576912261794,[0.0,0.0]],[3918280827204321712,[0.0,0.0]],[8279051592565434787,[-16.75720164609038,-2.1399176954732297]],[13932755083907220179,[0.0,0.0]],[16261506098907231989,[0.0,0.0]],[2336956120616260883,[0.0,0.0]],[1639796012074210121,[0.0,0.0]],[5102625335252315850,[0.0,0.0]],[3109091330258982137,[0.0,0.0]]],"handle_end":[[18299135553255571870,[10.07407407407402,2.7654320987654444]],[3109091330258982137,[18.962962962963047,2.074074074074048]],[11037018395008586448,[13.168724279835374,22.12345679012344]],[8279051592565434787,[5.037037037036953,1.7777777777777717]],[13932755083907220179,[0.0,0.0]],[1639796012074210121,[-19.259259259259352,-3.259259259259238]],[14941832641240060361,[7.1111111111111995,1.7777777777778]],[16261506098907231989,[12.1395654462896,1.5502392023748983]],[5102625335252315850,[-27.12757201646093,2.633744855967052]],[94092576912261794,[0.0,0.0]],[2336956120616260883,[-65.77777777777783,13.333333333333314]],[3918280827204321712,[0.0,0.0]],[2367379450383978497,[12.740740740740648,5.037037037037038]]],"stroke":[[14941832641240060361,0],[2336956120616260883,0],[1639796012074210121,0],[2367379450383978497,0],[18299135553255571870,0],[3918280827204321712,0],[11037018395008586448,0],[13932755083907220179,0],[94092576912261794,0],[3109091330258982137,0],[5102625335252315850,0],[8279051592565434787,0],[16261506098907231989,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8279051592565434787},{"ty":"Primary","segment":2367379450383978497}],[{"ty":"End","segment":94092576912261794},{"ty":"Primary","segment":18299135553255571870}],[{"ty":"End","segment":3918280827204321712},{"ty":"Primary","segment":13932755083907220179}],[{"ty":"End","segment":13932755083907220179},{"ty":"Primary","segment":14941832641240060361}],[{"ty":"End","segment":16261506098907231989},{"ty":"Primary","segment":8279051592565434787}]],"remove_g1_continuous":[[{"ty":"Primary","segment":16261506098907231989},{"ty":"End","segment":11037018395008586448}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9563008199132558110,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18081743490344004315,{"inputs":[{"Node":{"node_id":13588160462734303101,"output_index":0,"lambda":false}},{"Node":{"node_id":18068340617333437755,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6852799892628327372,{"inputs":[{"Node":{"node_id":2025899804080897524,"output_index":0,"lambda":false}},{"Node":{"node_id":16671141883125519098,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17952673493105230490,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8863346544623578893,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5480246971175127548,949359986970918930,6461719056721357962,6265491311473200676],"remove":[947514826240006203],"delta":[[5480246971175127548,[364.0,767.9999999999999]],[6461719056721357962,[173.33333333333331,506.66666666666674]],[6265491311473200676,[-2.273736754432321e-13,768.0000000000001]],[949359986970918930,[0.0,608.0]]]},"segments":{"add":[8951068186878308228,9717584104793611782,15710828508798332384,12480300844056666979],"remove":[6561081452252813685,11231973846952426191,15926511461198813522],"start_point":[[15710828508798332384,5480246971175127548],[12480300844056666979,6265491311473200676],[9717584104793611782,949359986970918930],[8951068186878308228,6461719056721357962]],"end_point":[[8951068186878308228,5480246971175127548],[15710828508798332384,6265491311473200676],[9717584104793611782,6461719056721357962],[12480300844056666979,949359986970918930]],"handle_primary":[[8951068186878308228,[121.00000000000006,-37.99999999999994]],[9717584104793611782,[0.0,0.0]],[15710828508798332384,null],[12480300844056666979,null]],"handle_end":[[15710828508798332384,null],[9717584104793611782,[-63.1770926995265,19.84073985604961]],[8951068186878308228,[-92.0,-81.99999999999989]],[12480300844056666979,null]],"stroke":[[15710828508798332384,0],[12480300844056666979,0],[8951068186878308228,0],[9717584104793611782,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8951068186878308228},{"ty":"End","segment":9717584104793611782}],[{"ty":"Primary","segment":9717584104793611782},{"ty":"End","segment":12480300844056666979}],[{"ty":"End","segment":6561081452252813685},{"ty":"Primary","segment":9717584104793611782}]],"remove_g1_continuous":[[{"ty":"End","segment":15926511461198813522},{"ty":"Primary","segment":8951068186878308228}],[{"ty":"Primary","segment":11231973846952426191},{"ty":"End","segment":9717584104793611782}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15692102598187739001,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0,"lambda":false}},{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4421418468606442725,{"inputs":[{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4807760870555738383,{"inputs":[{"Node":{"node_id":876963243827503916,"output_index":0,"lambda":false}},{"Node":{"node_id":8269257328703012432,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4102754869474520966,{"inputs":[{"Node":{"node_id":2723198387862533596,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2880630606834119505,{"inputs":[{"Node":{"node_id":8297015715799006244,"output_index":0,"lambda":false}},{"Node":{"node_id":16322546010403524636,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10265035897167064154,{"inputs":[{"Node":{"node_id":14698962747138962125,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17131529656312051452,{"inputs":[{"Node":{"node_id":13646498613066619660,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7104088139635280554,{"inputs":[{"Node":{"node_id":16785043320296790229,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[18068340617333437755,{"inputs":[{"Node":{"node_id":2880630606834119505,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[73.0306419396,-200.8521460039]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.42594097420784194},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2185437945364824599,{"inputs":[{"Node":{"node_id":18081743490344004315,"output_index":0,"lambda":false}},{"Node":{"node_id":4421418468606442725,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1627123781166851142,{"inputs":[{"Node":{"node_id":4807760870555738383,"output_index":0,"lambda":false}},{"Node":{"node_id":15354358358546908017,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14141479077115894852,{"inputs":[{"Node":{"node_id":15433707377961038695,"output_index":0,"lambda":false}},{"Node":{"node_id":17285637344898461972,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17397123104674848450,{"inputs":[{"Node":{"node_id":1662641269094032596,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15877481873925059044,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0,"lambda":false}},{"Node":{"node_id":7252918969430566594,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13340751444307201866,{"inputs":[{"Node":{"node_id":9135110142507605216,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12741076678082295759,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13916027199283115943,{"inputs":[{"Node":{"node_id":6194305264313730032,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15930698052919171086,{"inputs":[{"Node":{"node_id":13739729101529293427,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4631655038168471552,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false}],[17223836790030950966,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17056531964793634106,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0,"lambda":false}},{"Node":{"node_id":10063704933309776584,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13446205009526451196,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15433707377961038695,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16723991032614525258,1623125309784127684,7209807874503344461,3123395482103162919,2668496811386192321],"remove":[12344391980636687302],"delta":[[7209807874503344461,[188.0,694.6666666666669]],[16723991032614525258,[553.0000000000001,768.0]],[1623125309784127684,[643.9258958566198,633.6997633965701]],[2668496811386192321,[0.0,768.0]],[3123395482103162919,[-2.273736754432321e-13,689.0]]]},"segments":{"add":[3656277643115996070,6789459806904610761,16287649713110748258,16456150086799119359,1652964032977338610],"remove":[1848051273241122771],"start_point":[[6789459806904610761,1623125309784127684],[16287649713110748258,3123395482103162919],[16456150086799119359,2668496811386192321],[1652964032977338610,7209807874503344461],[3656277643115996070,16723991032614525258]],"end_point":[[3656277643115996070,1623125309784127684],[6789459806904610761,7209807874503344461],[16456150086799119359,16723991032614525258],[16287649713110748258,2668496811386192321],[1652964032977338610,3123395482103162919]],"handle_primary":[[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]],[6789459806904610761,[-213.92589585661983,-68.82675604113183]],[3656277643115996070,[0.0,0.0]],[1652964032977338610,[-81.48609837852206,84.6759456460087]]],"handle_end":[[1652964032977338610,[56.00000000000023,11.0]],[16456150086799119359,[0.0,0.0]],[6789459806904610761,[187.33333333333343,-194.6666666666667]],[16287649713110748258,[0.0,0.0]],[3656277643115996070,[0.0,0.0]]],"stroke":[[6789459806904610761,0],[16456150086799119359,0],[16287649713110748258,0],[1652964032977338610,0],[3656277643115996070,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":16287649713110748258},{"ty":"Primary","segment":16456150086799119359}],[{"ty":"End","segment":6789459806904610761},{"ty":"Primary","segment":1652964032977338610}]],"remove_g1_continuous":[[{"ty":"End","segment":1652964032977338610},{"ty":"Primary","segment":1848051273241122771}],[{"ty":"End","segment":3656277643115996070},{"ty":"Primary","segment":6789459806904610761}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5877930116725120460,{"inputs":[{"Node":{"node_id":4470272391975492611,"output_index":0,"lambda":false}},{"Node":{"node_id":1258994191538244490,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14516211820212764316,{"inputs":[{"Node":{"node_id":2124231869409556689,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,416.7]},"exposed":false}},{"Value":{"tagged_value":{"F64":31.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[3997031659711823213,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0,"lambda":false}},{"Node":{"node_id":7962101329808960965,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3471746866096043087,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7480253252288032958,{"inputs":[{"Node":{"node_id":7104261880154687267,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3079923906392020295,{"inputs":[{"Node":{"node_id":17056531964793634106,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}],[4809200889774783438,{"inputs":[{"Node":{"node_id":3109716240255919254,"output_index":0,"lambda":false}},{"Node":{"node_id":14139129879376457893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16304636129468583592,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4648964341912884959,10156053545530752213,16569120368910754547],"remove":[],"delta":[[4648964341912884959,[665.0000000000001,768.0]],[10156053545530752213,[1094.162353515625,594.2965698242188]],[16569120368910754547,[1361.0,768.0]]]},"segments":{"add":[9030015329489789075,2197140374690997530,3433930674303663828],"remove":[],"start_point":[[3433930674303663828,16569120368910754547],[9030015329489789075,4648964341912884959],[2197140374690997530,10156053545530752213]],"end_point":[[9030015329489789075,10156053545530752213],[3433930674303663828,4648964341912884959],[2197140374690997530,16569120368910754547]],"handle_primary":[[2197140374690997530,[79.20069951994813,30.807024746222492]],[9030015329489789075,[32.66666666666663,-95.99999999999989]],[3433930674303663828,[0.0,0.0]]],"handle_end":[[3433930674303663828,[0.0,0.0]],[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[9030015329489789075,[-238.88331323750492,-92.9194336284096]]],"stroke":[[2197140374690997530,0],[9030015329489789075,0],[3433930674303663828,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":2197140374690997530},{"ty":"Primary","segment":3433930674303663828}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2871608309888343463,{"inputs":[{"Node":{"node_id":12494428953087324640,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[5488285068107445023,{"inputs":[{"Node":{"node_id":7667878689218439065,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3050731459444225191,{"inputs":[{"Node":{"node_id":682567808439406093,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[16306737306999003555,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6082833770141706533,7903705226822768120,17147466439590042359,13341364271767916194],"remove":[],"delta":[[6082833770141706533,[504.0987654320987,184.6255144032922]],[7903705226822768120,[497.3827160493826,248.88888888888889]],[17147466439590042359,[526.0109927536641,282.1042175292969]],[13341364271767916194,[262.22222222222223,364.1481481481481]]]},"segments":{"add":[14649965831690031908,801877719748058643,9659144961849433642,2255088856072565305],"remove":[],"start_point":[[2255088856072565305,13341364271767916194],[14649965831690031908,6082833770141706533],[9659144961849433642,17147466439590042359],[801877719748058643,7903705226822768120]],"end_point":[[9659144961849433642,13341364271767916194],[2255088856072565305,6082833770141706533],[801877719748058643,17147466439590042359],[14649965831690031908,7903705226822768120]],"handle_primary":[[801877719748058643,[13.173601585124231,23.615912208504938]],[9659144961849433642,[0.0,0.0]],[2255088856072565305,[0.0,0.0]],[14649965831690031908,[0.0,0.0]]],"handle_end":[[9659144961849433642,[195.55555555555569,-16.14814814814804]],[801877719748058643,[0.0,0.0]],[2255088856072565305,[-112.09876543209862,43.81893004115227]],[14649965831690031908,[-17.920501046401128,-32.12553353079403]]],"stroke":[[801877719748058643,0],[9659144961849433642,0],[14649965831690031908,0],[2255088856072565305,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":14649965831690031908},{"ty":"Primary","segment":801877719748058643}],[{"ty":"End","segment":801877719748058643},{"ty":"Primary","segment":9659144961849433642}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8297015715799006244,{"inputs":[{"Node":{"node_id":17569892869974995307,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,407.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":24.2},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12867379765049504290,{"inputs":[{"Node":{"node_id":6445954214067437701,"output_index":0,"lambda":false}},{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17740496701763775226,{"inputs":[{"Node":{"node_id":13027689870767713939,"output_index":0,"lambda":false}},{"Node":{"node_id":16609137733952262762,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14808063168960305551,{"inputs":[{"Node":{"node_id":14496934933990319842,"output_index":0,"lambda":false}},{"Node":{"node_id":3471746866096043087,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12494428953087324640,{"inputs":[{"Node":{"node_id":8511737864852441844,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[15817956847588799375,{"inputs":[{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2287485748649359627,{"inputs":[{"Node":{"node_id":804622576568168609,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13646498613066619660,{"inputs":[{"Node":{"node_id":12741076678082295759,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1809704172129195322,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[2124231869409556689,{"inputs":[{"Node":{"node_id":15877481873925059044,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}],[876963243827503916,{"inputs":[{"Node":{"node_id":7651693425519490419,"output_index":0,"lambda":false}},{"Node":{"node_id":17223836790030950966,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13838011362258067867,{"inputs":[{"Node":{"node_id":4631655038168471552,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CentroidNode"}},"visible":true,"skip_deduplication":false}],[7376049709233607419,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16958489363675356032,7347160684180114694,4322398537034510509,3438797896265725901,16005438712872589849,1674257131044231065,10491326691824745018,9374180853656949931,13358295350421759755,15245407364463454564],"remove":[],"delta":[[1674257131044231065,[829.4320987654323,121.67901234567904]],[3438797896265725901,[795.4567901234569,94.41975308641976]],[13358295350421759755,[778.4691358024693,177.1851851851852]],[15245407364463454564,[773.530864197531,141.4320987654321]],[16958489363675356032,[658.172839506173,169.08641975308643]],[4322398537034510509,[776.888888888889,117.53086419753087]],[9374180853656949931,[784.0000000000002,176.98765432098767]],[10491326691824745018,[811.851851851852,148.54320987654322]],[16005438712872589849,[817.1851851851852,94.61728395061728]],[7347160684180114694,[772.1481481481483,138.66666666666669]]]},"segments":{"add":[11663644781855838202,198953627342130434,8327087349631976772,13015157349146777770,8528911024810728168,3235570761188242773,16847383896493391194,16846650637386857857,3784798568712268630,12873317883441611394],"remove":[],"start_point":[[16847383896493391194,10491326691824745018],[8528911024810728168,16005438712872589849],[3235570761188242773,1674257131044231065],[11663644781855838202,16958489363675356032],[8327087349631976772,4322398537034510509],[16846650637386857857,9374180853656949931],[12873317883441611394,15245407364463454564],[3784798568712268630,13358295350421759755],[13015157349146777770,3438797896265725901],[198953627342130434,7347160684180114694]],"end_point":[[13015157349146777770,16005438712872589849],[3235570761188242773,10491326691824745018],[8327087349631976772,3438797896265725901],[12873317883441611394,16958489363675356032],[198953627342130434,4322398537034510509],[16846650637386857857,13358295350421759755],[8528911024810728168,1674257131044231065],[3784798568712268630,15245407364463454564],[16847383896493391194,9374180853656949931],[11663644781855838202,7347160684180114694]],"handle_primary":[[12873317883441611394,[-19.75308641975323,2.172839506172835]],[16846650637386857857,[0.0,0.0]],[3235570761188242773,[0.1975308641974607,7.703703703703709]],[198953627342130434,[0.0,0.3950617283950635]],[13015157349146777770,[0.0,0.0]],[11663644781855838202,[0.0,0.0]],[8528911024810728168,[5.530864197530946,5.925925925925924]],[3784798568712268630,[-2.962962962963161,-10.864197530864232]],[8327087349631976772,[-0.19753086419757435,-13.82716049382715]],[16847383896493391194,[-17.185185185185105,13.234567901234584]]],"handle_end":[[11663644781855838202,[-74.27160493827171,29.03703703703698]],[8327087349631976772,[0.0,0.0]],[12873317883441611394,[33.382716049382566,14.222222222222172]],[16846650637386857857,[0.0,0.0]],[3235570761188242773,[17.185185185185105,-13.234567901234584]],[8528911024810728168,[-0.1975308641974607,-7.703703703703709]],[13015157349146777770,[-5.530864197530946,-5.925925925925924]],[3784798568712268630,[2.9629629629629335,5.135802469135797]],[198953627342130434,[0.19753086419757435,13.82716049382715]],[16847383896493391194,[0.0,0.0]]],"stroke":[[12873317883441611394,0],[16846650637386857857,0],[8327087349631976772,0],[198953627342130434,0],[11663644781855838202,0],[8528911024810728168,0],[3784798568712268630,0],[13015157349146777770,0],[16847383896493391194,0],[3235570761188242773,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3235570761188242773},{"ty":"Primary","segment":16847383896493391194}],[{"ty":"End","segment":8528911024810728168},{"ty":"Primary","segment":3235570761188242773}],[{"ty":"End","segment":16847383896493391194},{"ty":"Primary","segment":16846650637386857857}],[{"ty":"End","segment":198953627342130434},{"ty":"Primary","segment":8327087349631976772}],[{"ty":"End","segment":8327087349631976772},{"ty":"Primary","segment":13015157349146777770}],[{"ty":"End","segment":13015157349146777770},{"ty":"Primary","segment":8528911024810728168}]],"remove_g1_continuous":[[{"ty":"End","segment":3784798568712268630},{"ty":"Primary","segment":12873317883441611394}],[{"ty":"End","segment":16846650637386857857},{"ty":"Primary","segment":3784798568712268630}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7977952035097419157,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::EllipseNode"}},"visible":true,"skip_deduplication":false}],[7667878689218439065,{"inputs":[{"Node":{"node_id":18271512507682813443,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14030142873804552388,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[11163144542703672167,7233902871991446034,9403888920678312544,5714042674660607880,9912917483675332510],"remove":[],"delta":[[5714042674660607880,[1536.0,0.0]],[7233902871991446034,[908.0,134.0]],[9912917483675332510,[1536.0,254.00000000000009]],[9403888920678312544,[1271.0,199.0]],[11163144542703672167,[763.0,0.0]]]},"segments":{"add":[7099980686025805826,11879054056208937348,7804540624589615499,3118709054343469746,12085471811343146506],"remove":[8174738144062904321],"start_point":[[11879054056208937348,7233902871991446034],[12085471811343146506,9912917483675332510],[3118709054343469746,9403888920678312544],[7099980686025805826,11163144542703672167],[7804540624589615499,5714042674660607880]],"end_point":[[11879054056208937348,9403888920678312544],[7804540624589615499,11163144542703672167],[7099980686025805826,7233902871991446034],[3118709054343469746,9912917483675332510],[12085471811343146506,5714042674660607880]],"handle_primary":[[7099980686025805826,[0.0,0.0]],[11879054056208937348,[68.41365603453937,54.51084151791355]],[7804540624589615499,[0.0,0.0]],[12085471811343146506,[0.0,0.0]],[3118709054343469746,[191.0,-106.0]]],"handle_end":[[7804540624589615499,[0.0,0.0]],[12085471811343146506,[0.0,0.0]],[7099980686025805826,[-68.41365603453914,-54.51084151791349]],[3118709054343469746,[0.0,0.0]],[11879054056208937348,[-121.83694366711715,67.61631428646292]]],"stroke":[[7804540624589615499,0],[11879054056208937348,0],[7099980686025805826,0],[3118709054343469746,0],[12085471811343146506,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":7099980686025805826},{"ty":"Primary","segment":11879054056208937348}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":8174738144062904321}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":3118709054343469746}]],"remove_g1_continuous":[[{"ty":"End","segment":3118709054343469746},{"ty":"Primary","segment":12085471811343146506}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[17351444026127625357,{"persistent_metadata":{"reference":"Merge","display_name":"Face Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17735408893002232096,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12353675714904258944,{"persistent_metadata":{"reference":"Merge","display_name":"Nose Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18068340617333437755,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14141479077115894852,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7376049709233607419,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17753909951719808506,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1627123781166851142,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Corner Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3997031659711823213,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13616602029989984195,{"persistent_metadata":{"reference":"Flatten Path","display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphic Group Input","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4807760870555738383,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Main Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12709602171929957216,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4560146526699152877,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12741076678082295759,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,118]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6194305264313730032,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18095952297474762348,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5014806436727666175,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17740294143355019755,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12185047359007423618,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17131529656312051452,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8297015715799006244,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5534800796196967885,{"persistent_metadata":{"reference":"Centroid","display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,109]}}},"network_metadata":null}}],[7755499790391969923,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13646498613066619660,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,118]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14030142873804552388,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,66]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13795432594059356320,{"persistent_metadata":{"reference":"Flatten Path","display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphic Group Input","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7201841978411396053,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13446205009526451196,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17271572793812678706,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14684142559936015947,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1508440849951861669,{"persistent_metadata":{"reference":"Merge","display_name":"Face Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3750439930725791025,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3471746866096043087,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1009114585722052052,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,57]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8863346544623578893,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,90]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6503655938154160104,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,44]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4631655038168471552,{"persistent_metadata":{"reference":"Bounding Box","display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,103]}}},"network_metadata":null}}],[1001728975241745659,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5888633415105234509,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10995640810984321903,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Bottom","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1097494158696050491,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,99]}}},"network_metadata":null}}],[15692102598187739001,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,57]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15301503532602557206,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10080296672372912698,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12276520439585231336,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9338394475379815879,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6616450276140292763,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12770183061753030023,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16306737306999003555,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14496934933990319842,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11301831865756336526,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11210964267417873667,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17056531964793634106,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13739729101529293427,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9135110142507605216,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7480253252288032958,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7252918969430566594,{"persistent_metadata":{"reference":"Multiply","display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,107]}}},"network_metadata":null}}],[7104088139635280554,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17397123104674848450,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16304636129468583592,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,135]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7962101329808960965,{"persistent_metadata":{"reference":"Multiply","display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,94]}}},"network_metadata":null}}],[14808063168960305551,{"persistent_metadata":{"reference":"Merge","display_name":"Face Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8426490990601560741,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17603523494627491590,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Top","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7667878689218439065,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18081743490344004315,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[876963243827503916,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12494428953087324640,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14516211820212764316,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18188505856445531484,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8269257328703012432,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4771789845668099116,{"persistent_metadata":{"reference":"Merge","display_name":"Cheek Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14690269209726153565,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7018444885869143173,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11201759760883367635,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,64]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3079923906392020295,{"persistent_metadata":{"reference":"To Group","display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5486211022469996717,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,75]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5856350938151339368,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11196821089257149774,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14228923746783465609,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,135]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4328376070224119511,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8511737864852441844,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16609137733952262762,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4470272391975492611,{"persistent_metadata":{"reference":"Merge","display_name":"Rose Sliver Silhouette","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18271512507682813443,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15354358358546908017,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15877481873925059044,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8887924609778270360,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18003287685830153881,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,72]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12234961922142600898,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5449860184735415958,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,124]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14698962747138962125,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4421418468606442725,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17036604842139972912,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":4}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10063704933309776584,{"persistent_metadata":{"reference":"Multiply","display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,101]}}},"network_metadata":null}}],[13353438235848911576,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16177422101884031678,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8359580532088731394,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11373527190663101881,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17952673493105230490,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,133]}}},"network_metadata":null}}],[6728362629909402903,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17696051535511578981,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-41,47]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1809704172129195322,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,106]}}},"network_metadata":null}}],[15817956847588799375,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16759836951269190891,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8566844905246185636,{"persistent_metadata":{"reference":"Merge","display_name":"Mouth Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2025899804080897524,{"persistent_metadata":{"reference":"Merge","display_name":"Face White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15900830679378240619,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3109716240255919254,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eyebrow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5877930116725120460,{"persistent_metadata":{"reference":"Merge","display_name":"Rear Eyelash","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6852799892628327372,{"persistent_metadata":{"reference":"Merge","display_name":"Head Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11264395591110193456,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,93]}}},"network_metadata":null}}],[2287485748649359627,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4301099429811409147,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1662641269094032596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2124231869409556689,{"persistent_metadata":{"reference":"To Group","display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11095670964487764044,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11429506195623419966,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10265035897167064154,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7977952035097419157,{"persistent_metadata":{"reference":"Ellipse","display_name":"Ellipse","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius Y","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17299978721726771610,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,106]}}},"network_metadata":null}}],[5556372312033787775,{"persistent_metadata":{"reference":"Bounding Box","display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,96]}}},"network_metadata":null}}],[7104261880154687267,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17740496701763775226,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[57390435731316553,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4102754869474520966,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13027689870767713939,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18053728639616073084,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16322546010403524636,{"persistent_metadata":{"reference":"Centroid","display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,96]}}},"network_metadata":null}}],[6484183251661832039,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,93]}}},"network_metadata":null}}],[2723198387862533596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17569892869974995307,{"persistent_metadata":{"reference":"To Group","display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12145355397916841389,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3410481056630111806,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,99]}}},"network_metadata":null}}],[13838011362258067867,{"persistent_metadata":{"reference":"Centroid","display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,103]}}},"network_metadata":null}}],[7029437790788498388,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,106]}}},"network_metadata":null}}],[682567808439406093,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13588160462734303101,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1258994191538244490,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[140396870212231820,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8460565235419043665,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5488285068107445023,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3214181946162459584,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[990192925663920333,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,99]}}},"network_metadata":null}}],[6445954214067437701,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13203761224559198689,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9808637865669223270,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[294265135510952894,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,93]}}},"network_metadata":null}}],[15433707377961038695,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10286817149456341619,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18351415092709164412,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2880630606834119505,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17223836790030950966,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17285637344898461972,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,81]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139765080256493579,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,138]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16671141883125519098,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13916027199283115943,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16780039553038473906,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2834866505092039323,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14950060858756810933,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,60]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10760002922115563021,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4809200889774783438,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5954536408321808728,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9563008199132558110,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14139129879376457893,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2185437945364824599,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17562801632450633291,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6726954210929537972,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7651693425519490419,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13340751444307201866,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2871608309888343463,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4261249487994076490,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14257963317028524134,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[804622576568168609,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12922148192688274227,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[392274448837115448,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13670206802546093234,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18031616785650843168,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,133]}}},"network_metadata":null}}],[3608604157153838227,{"persistent_metadata":{"reference":"Bounding Box","display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,109]}}},"network_metadata":null}}],[17495267820524300686,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12867379765049504290,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7855094781869605606,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[-312.5,-36.5],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,678.0,544.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15930698052919171086,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Group of Paths","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1491840484128555837,{"persistent_metadata":{"reference":"Merge","display_name":"Face Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16785043320296790229,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3050731459444225191,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9071802450034150503,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6787585796949551500,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[866.5700198973645,-2549.4579096366515],"tilt":0.0,"zoom":0.6666666666666666,"flip":false},"node_graph_to_viewport":[0.6666666666666666,0.0,0.0,0.6666666666666666,1568.0,-1119.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[3410481056630111806],[1097494158696050491],[3410481056630111806],[11684705487012407227],[],[294265135510952894],[],[],[],[13340751444307201866],[3765280235392282097],[3765280235392282097],[],[13795432594059356320],[],[2871608309888343463],[2871608309888343463,12494428953087324640],[3765280235392282097,12494428953087324640,2871608309888343463],[8511737864852441844,2871608309888343463,12494428953087324640,3765280235392282097],[],[13795432594059356320],[],[12494428953087324640,2871608309888343463],[2871608309888343463,3765280235392282097,12494428953087324640],[12494428953087324640,2871608309888343463,3765280235392282097,8511737864852441844],[],[3765280235392282097],[],[],[13616602029989984195],[],[],[],[16780039553038473906],[7104088139635280554],[],[],[7104088139635280554],[],[7104088139635280554],[],[],[16785043320296790229],[6503655938154160104],[17696051535511578981],[6503655938154160104],[17696051535511578981],[9071802450034150503],[],[17696051535511578981],[6503655938154160104],[],[18031616785650843168],[17952673493105230490],[],[4328376070224119511],[18031616785650843168,3750439930725791025,13446205009526451196,7201841978411396053,17735408893002232096,11196821089257149774,13027689870767713939,17952673493105230490,14228923746783465609,4328376070224119511],[13027689870767713939,16609137733952262762,12276520439585231336,13795432594059356320,7201841978411396053,17740496701763775226,13340751444307201866,5888633415105234509,17735408893002232096,9135110142507605216,3750439930725791025,11196821089257149774,17397123104674848450,13446205009526451196,4328376070224119511,14228923746783465609,1662641269094032596,18031616785650843168,17952673493105230490],[5888633415105234509,17740496701763775226,14228923746783465609,12276520439585231336,18031616785650843168,16306737306999003555,6852799892628327372,17952673493105230490,3750439930725791025,16671141883125519098,13446205009526451196,11196821089257149774,1662641269094032596,9135110142507605216,17397123104674848450,3214181946162459584,13027689870767713939,16609137733952262762,7201841978411396053,13795432594059356320,17735408893002232096,2871608309888343463,4328376070224119511,2025899804080897524,13340751444307201866],[17952673493105230490,13027689870767713939,13646498613066619660,14139765080256493579,3214181946162459584,13795432594059356320,1662641269094032596,16671141883125519098,17740496701763775226,16306737306999003555,17735408893002232096,14228923746783465609,4328376070224119511,12276520439585231336,9135110142507605216,11196821089257149774,2025899804080897524,17397123104674848450,5888633415105234509,7201841978411396053,16609137733952262762,2871608309888343463,16304636129468583592,13446205009526451196,17131529656312051452,8566844905246185636,5449860184735415958,3750439930725791025,18031616785650843168,12494428953087324640,12741076678082295759,6852799892628327372,13340751444307201866],[3750439930725791025,5888633415105234509,18031616785650843168,12494428953087324640,13340751444307201866,16306737306999003555,17952673493105230490,17397123104674848450,13795432594059356320,12741076678082295759,7201841978411396053,9135110142507605216,3214181946162459584,2871608309888343463,6852799892628327372,13646498613066619660,17740496701763775226,17131529656312051452,16671141883125519098,13446205009526451196,12276520439585231336,14139765080256493579,14228923746783465609,5449860184735415958,4328376070224119511,16609137733952262762,17735408893002232096,16304636129468583592,8566844905246185636,1662641269094032596,2025899804080897524,11196821089257149774,13027689870767713939,8511737864852441844],[13340751444307201866,5888633415105234509,14139765080256493579,8566844905246185636,13795432594059356320,16609137733952262762,5449860184735415958,13027689870767713939,6852799892628327372,3750439930725791025,8511737864852441844,11196821089257149774,12494428953087324640,17131529656312051452,16306737306999003555,2834866505092039323,17735408893002232096,13646498613066619660,18031616785650843168,12276520439585231336,17740496701763775226,3214181946162459584,12741076678082295759,16671141883125519098,9135110142507605216,14228923746783465609,2871608309888343463,16304636129468583592,2025899804080897524,17397123104674848450,17952673493105230490,1662641269094032596,7201841978411396053,13446205009526451196,4328376070224119511],[9135110142507605216,12276520439585231336,2871608309888343463,1508440849951861669,2025899804080897524,7201841978411396053,11196821089257149774,17740496701763775226,13446205009526451196,6852799892628327372,3214181946162459584,1662641269094032596,4328376070224119511,12741076678082295759,13340751444307201866,13795432594059356320,16671141883125519098,14139765080256493579,5888633415105234509,17735408893002232096,18031616785650843168,17131529656312051452,13027689870767713939,8566844905246185636,17952673493105230490,2834866505092039323,5449860184735415958,16304636129468583592,16609137733952262762,16306737306999003555,17397123104674848450,13646498613066619660,14228923746783465609,3750439930725791025,12494428953087324640,8511737864852441844],[17397123104674848450,13340751444307201866,12494428953087324640,13446205009526451196,3214181946162459584,17131529656312051452,16609137733952262762,16306737306999003555,12276520439585231336,2871608309888343463,4328376070224119511,16304636129468583592,17740496701763775226,7201841978411396053,2834866505092039323,9135110142507605216,8511737864852441844,5888633415105234509,13795432594059356320,17952673493105230490,7480253252288032958,11196821089257149774,5449860184735415958,14228923746783465609,3750439930725791025,13027689870767713939,17735408893002232096,1508440849951861669,8566844905246185636,18031616785650843168,13646498613066619660,14139765080256493579,7104261880154687267,2025899804080897524,12741076678082295759,1662641269094032596,6852799892628327372,16671141883125519098],[17952673493105230490,7104261880154687267,18031616785650843168,8566844905246185636,17735408893002232096,7201841978411396053,12741076678082295759,5449860184735415958,16609137733952262762,1662641269094032596,3214181946162459584,11196821089257149774,1508440849951861669,13340751444307201866,13446205009526451196,8511737864852441844,9135110142507605216,6852799892628327372,3750439930725791025,13795432594059356320,4328376070224119511,17131529656312051452,16304636129468583592,16306737306999003555,17740496701763775226,12494428953087324640,17397123104674848450,16671141883125519098,5888633415105234509,12276520439585231336,2834866505092039323,7480253252288032958,18095952297474762348,13646498613066619660,2871608309888343463,2025899804080897524,14228923746783465609,14139765080256493579,13027689870767713939],[1491840484128555837,7104261880154687267,17397123104674848450,8511737864852441844,13446205009526451196,13795432594059356320,14228923746783465609,7480253252288032958,2025899804080897524,17735408893002232096,16306737306999003555,17740496701763775226,12741076678082295759,13646498613066619660,4328376070224119511,12276520439585231336,18031616785650843168,3750439930725791025,3214181946162459584,2871608309888343463,5888633415105234509,16304636129468583592,13340751444307201866,1662641269094032596,11196821089257149774,5449860184735415958,16671141883125519098,13027689870767713939,17952673493105230490,6852799892628327372,17131529656312051452,14139765080256493579,1508440849951861669,18095952297474762348,8566844905246185636,12494428953087324640,16609137733952262762,2834866505092039323,9135110142507605216,7201841978411396053],[13027689870767713939,8511737864852441844,2871608309888343463,3214181946162459584,14228923746783465609,9808637865669223270,1508440849951861669,12494428953087324640,7201841978411396053,16671141883125519098,13340751444307201866,140396870212231820,1491840484128555837,13446205009526451196,14139765080256493579,5888633415105234509,2834866505092039323,7480253252288032958,17397123104674848450,17740496701763775226,1662641269094032596,18095952297474762348,16306737306999003555,16304636129468583592,17735408893002232096,12276520439585231336,16609137733952262762,4328376070224119511,13795432594059356320,7104261880154687267,5449860184735415958,17131529656312051452,13646498613066619660,6852799892628327372,3750439930725791025,2025899804080897524,9135110142507605216,5954536408321808728,11196821089257149774,12741076678082295759,8566844905246185636,17952673493105230490,18031616785650843168],[7252918969430566594,15877481873925059044,4261249487994076490,5534800796196967885,17036604842139972912],[5534800796196967885,11210964267417873667,4261249487994076490,17036604842139972912,2124231869409556689,7252918969430566594,14516211820212764316,15877481873925059044],[17036604842139972912,4261249487994076490,11210964267417873667,3608604157153838227,15877481873925059044,5534800796196967885,2124231869409556689,14516211820212764316,7252918969430566594],[14516211820212764316,4261249487994076490,11210964267417873667,7252918969430566594,15877481873925059044,17036604842139972912,5534800796196967885,3608604157153838227,2124231869409556689,17299978721726771610],[7252918969430566594,11210964267417873667,15877481873925059044,3608604157153838227,4261249487994076490,2124231869409556689,17299978721726771610,7029437790788498388,5534800796196967885,14516211820212764316,17036604842139972912],[4261249487994076490,17036604842139972912,5534800796196967885,17299978721726771610,7252918969430566594,3608604157153838227,14516211820212764316,11210964267417873667,1809704172129195322,2124231869409556689,15877481873925059044,7029437790788498388],[57390435731316553,13838011362258067867,17056531964793634106,4631655038168471552,13588160462734303101,10063704933309776584],[3410481056630111806,13838011362258067867,990192925663920333,57390435731316553,4631655038168471552,8460565235419043665,10063704933309776584,3079923906392020295,13588160462734303101,4301099429811409147,17056531964793634106],[57390435731316553,1097494158696050491,3410481056630111806,990192925663920333,8460565235419043665,13588160462734303101,13838011362258067867,17056531964793634106,4631655038168471552,3079923906392020295,4301099429811409147,10063704933309776584],[13588160462734303101],[4301099429811409147,8460565235419043665,13588160462734303101,57390435731316553],[3079923906392020295,17056531964793634106,4301099429811409147,8460565235419043665,57390435731316553,13588160462734303101],[57390435731316553,13588160462734303101,4301099429811409147,10063704933309776584,3079923906392020295,8460565235419043665,17056531964793634106],[4301099429811409147,990192925663920333,10063704933309776584,57390435731316553,17056531964793634106,3079923906392020295,8460565235419043665,13588160462734303101],[3410481056630111806,57390435731316553,990192925663920333,13588160462734303101,10063704933309776584,8460565235419043665,3079923906392020295,4301099429811409147,17056531964793634106],[3410481056630111806,13588160462734303101,57390435731316553,3079923906392020295,17056531964793634106,10063704933309776584,4301099429811409147,1097494158696050491,990192925663920333,8460565235419043665],[17056531964793634106,4631655038168471552,10063704933309776584,3410481056630111806,8460565235419043665,3079923906392020295,990192925663920333,1097494158696050491,13838011362258067867,13588160462734303101,4301099429811409147,57390435731316553],[11210964267417873667,4261249487994076490,14516211820212764316,17036604842139972912],[14516211820212764316,7252918969430566594,4261249487994076490,15877481873925059044,17036604842139972912,2124231869409556689,11210964267417873667],[7252918969430566594,17299978721726771610,15877481873925059044,4261249487994076490,17036604842139972912,11210964267417873667,14516211820212764316,2124231869409556689],[4261249487994076490,15877481873925059044,14516211820212764316,7252918969430566594,17299978721726771610,11210964267417873667,17036604842139972912,7029437790788498388,2124231869409556689],[15877481873925059044,7252918969430566594,4261249487994076490,17036604842139972912,17299978721726771610,1809704172129195322,7029437790788498388,2124231869409556689,11210964267417873667,14516211820212764316],[2124231869409556689,5534800796196967885,7029437790788498388,7252918969430566594,14516211820212764316,4261249487994076490,11210964267417873667,15877481873925059044,17299978721726771610,3608604157153838227,1809704172129195322,17036604842139972912],[17299978721726771610,4261249487994076490,1809704172129195322,7029437790788498388,14516211820212764316,11210964267417873667,15877481873925059044,17036604842139972912,7252918969430566594,2124231869409556689],[14516211820212764316,15877481873925059044,17299978721726771610,7252918969430566594,17036604842139972912,1809704172129195322,5534800796196967885,7029437790788498388,4261249487994076490,11210964267417873667,2124231869409556689,3608604157153838227],[4328376070224119511],[13340751444307201866,6852799892628327372,14228923746783465609,2871608309888343463,11196821089257149774,9135110142507605216,17740496701763775226,12276520439585231336,2025899804080897524,3750439930725791025,1662641269094032596,5888633415105234509,4328376070224119511,17735408893002232096,7201841978411396053,17397123104674848450,13795432594059356320,18031616785650843168,16609137733952262762,13027689870767713939,17952673493105230490,3214181946162459584,16671141883125519098,16306737306999003555,13446205009526451196],[3750439930725791025,12741076678082295759,7201841978411396053,7480253252288032958,13446205009526451196,3214181946162459584,13340751444307201866,13646498613066619660,14139765080256493579,6852799892628327372,16306737306999003555,4328376070224119511,8566844905246185636,7104261880154687267,12494428953087324640,5449860184735415958,1662641269094032596,17740496701763775226,17952673493105230490,16304636129468583592,2025899804080897524,9135110142507605216,2871608309888343463,18031616785650843168,2834866505092039323,13027689870767713939,13795432594059356320,12276520439585231336,11196821089257149774,17397123104674848450,16609137733952262762,17131529656312051452,14228923746783465609,16671141883125519098,5888633415105234509,8511737864852441844,17735408893002232096,1508440849951861669],[17131529656312051452,16306737306999003555,12276520439585231336,17735408893002232096,18095952297474762348,7201841978411396053,17740496701763775226,14139765080256493579,13795432594059356320,8511737864852441844,4328376070224119511,6852799892628327372,5449860184735415958,140396870212231820,14228923746783465609,13446205009526451196,11196821089257149774,9808637865669223270,1508440849951861669,13027689870767713939,1491840484128555837,5954536408321808728,17397123104674848450,9135110142507605216,2871608309888343463,18031616785650843168,2834866505092039323,3214181946162459584,3750439930725791025,1662641269094032596,13646498613066619660,16304636129468583592,8566844905246185636,7480253252288032958,5888633415105234509,2025899804080897524,12741076678082295759,16671141883125519098,12494428953087324640,17952673493105230490,16609137733952262762,7104261880154687267,13340751444307201866],[17036604842139972912],[13588160462734303101],[18081743490344004315],[]],"selection_redo_history":[]}}},"collapsed":[],"name":"painted-dreams.graphite","commit_hash":"3a591dac6a53454813c8df6ceed5b44b91d1e816","document_ptz":{"pan":[-768.2748744089959,-384.56142660725646],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":392274448837115448,"output_index":0}}],"nodes":[[13353438235848911576,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6379137305818664393,18442321214082298093,18118267825025549699,6351696498298648253,17863574903157697896,4691860614575868200,301778328144628917,10625296323957562985,533731991408535384,13357220652574593654,15992617814592812350],"remove":[],"delta":[[15992617814592812350,[621.0370370370368,0.0]],[18118267825025549699,[642.0740740740741,0.0]],[18442321214082298093,[565.6296296296297,122.96296296296298]],[301778328144628917,[493.5149940383244,200.29629629629628]],[17863574903157697896,[606.8148151308641,95.19407372365433]],[6379137305818664393,[625.4814814814813,0.0]],[4691860614575868200,[528.2962962962963,283.8518518518518]],[533731991408535384,[501.6296296296296,175.40740740740742]],[10625296323957562985,[473.4814814814815,272.5925925925926]],[13357220652574593654,[574.2222222222222,108.44444444444449]],[6351696498298648253,[646.8148148148149,0.0]]]},"segments":{"add":[13662059715350867364,3384102572540409881,12035095010819582754,10146665273368938971,318560030360358929,8462655819889292900,3303411878775644985,8661113083384527971,2035327810332855521,11346538709718766144,3710133387837274291],"remove":[],"start_point":[[10146665273368938971,6351696498298648253],[12035095010819582754,18118267825025549699],[3710133387837274291,15992617814592812350],[13662059715350867364,6379137305818664393],[3303411878775644985,301778328144628917],[3384102572540409881,18442321214082298093],[2035327810332855521,533731991408535384],[11346538709718766144,13357220652574593654],[8462655819889292900,4691860614575868200],[8661113083384527971,10625296323957562985],[318560030360358929,17863574903157697896]],"end_point":[[3710133387837274291,6379137305818664393],[2035327810332855521,13357220652574593654],[318560030360358929,4691860614575868200],[3384102572540409881,18118267825025549699],[8462655819889292900,301778328144628917],[8661113083384527971,533731991408535384],[12035095010819582754,6351696498298648253],[13662059715350867364,18442321214082298093],[11346538709718766144,15992617814592812350],[3303411878775644985,10625296323957562985],[10146665273368938971,17863574903157697896]],"handle_primary":[[3303411878775644985,[0.0,0.0]],[13662059715350867364,[0.0,0.0]],[3710133387837274291,[0.0,0.0]],[2035327810332855521,[42.96296296296293,-41.7777777777778]],[11346538709718766144,[9.925839724176626,-9.951533978271286]],[12035095010819582754,[0.0,0.0]],[318560030360358929,[-46.95465552079859,46.40007297527743]],[10146665273368938971,[0.0,0.0]],[3384102572540409881,[0.0,0.0]],[8661113083384527971,[0.2962962962963047,0.2962962962963047]],[8462655819889292900,[0.0,0.0]]],"handle_end":[[8462655819889292900,[-21.74426522093495,47.99999999999997]],[318560030360358929,[-97.48148148148152,-81.18518518518522]],[3710133387837274291,[0.0,0.0]],[11346538709718766144,[1.1377781018271662,63.71555518874077]],[13662059715350867364,[68.68148181185177,-54.8859262904691]],[3384102572540409881,[0.5807410754567854,77.36888852918523]],[3303411878775644985,[-6.2222222222222285,-40.59259259259261]],[10146665273368938971,[48.16592595101224,-47.597037061827145]],[12035095010819582754,[0.0,0.0]],[8661113083384527971,[-42.34888386913234,41.180638796880466]],[2035327810332855521,[-8.299214014278164,8.32069754812484]]],"stroke":[[3303411878775644985,0],[10146665273368938971,0],[11346538709718766144,0],[13662059715350867364,0],[3710133387837274291,0],[8462655819889292900,0],[318560030360358929,0],[2035327810332855521,0],[12035095010819582754,0],[3384102572540409881,0],[8661113083384527971,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8661113083384527971},{"ty":"Primary","segment":2035327810332855521}],[{"ty":"End","segment":12035095010819582754},{"ty":"Primary","segment":10146665273368938971}],[{"ty":"Primary","segment":11346538709718766144},{"ty":"End","segment":2035327810332855521}],[{"ty":"End","segment":10146665273368938971},{"ty":"Primary","segment":318560030360358929}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16671141883125519098,{"inputs":[{"Node":{"node_id":16306737306999003555,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6445954214067437701,{"inputs":[{"Node":{"node_id":13670206802546093234,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[140396870212231820,{"inputs":[{"Node":{"node_id":18095952297474762348,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5449860184735415958,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[17520941196305861319,6029995238423674441,16590926169549948521,12817219955590128894,4723170318056755559,12317789037775437786,17339925811006567497,4659274885664969740,1541401134848201833,17321098837874422287,11084016020553554647,9729762716079513741,13279221198527484331,7727030009292816503,15701538241214188894],"remove":[],"delta":[[15701538241214188894,[0.0,0.0]],[17321098837874422287,[802.6666666666667,656.4444444444445]],[11084016020553554647,[655.0,636.0]],[7727030009292816503,[0.0,768.0]],[13279221198527484331,[564.0,768.0]],[9729762716079513741,[585.0,666.0]],[4723170318056755559,[923.0,349.0]],[6029995238423674441,[898.0,46.0]],[1541401134848201833,[886.0,572.0]],[17520941196305861319,[889.0,0.0]],[17339925811006567497,[898.0,468.0]],[12317789037775437786,[902.0,394.0]],[16590926169549948521,[869.0,147.0]],[4659274885664969740,[896.0,523.0]],[12817219955590128894,[933.0,273.0]]]},"segments":{"add":[862900208337901235,4806484166818510930,11569179934425192262,9808624553037921371,9730229894941201870,1248401493076165062,8832757535144158913,15056691877609602335,8919277736361106420,16631919016540861133,9314952320711038398,10137845066833192587,14740183693208469558,3307452201570141575,3876401232874291775],"remove":[],"start_point":[[862900208337901235,17520941196305861319],[3307452201570141575,7727030009292816503],[16631919016540861133,17321098837874422287],[9314952320711038398,11084016020553554647],[8919277736361106420,1541401134848201833],[4806484166818510930,6029995238423674441],[14740183693208469558,13279221198527484331],[15056691877609602335,4659274885664969740],[9730229894941201870,4723170318056755559],[9808624553037921371,12817219955590128894],[3876401232874291775,15701538241214188894],[10137845066833192587,9729762716079513741],[8832757535144158913,17339925811006567497],[11569179934425192262,16590926169549948521],[1248401493076165062,12317789037775437786]],"end_point":[[15056691877609602335,1541401134848201833],[11569179934425192262,12817219955590128894],[16631919016540861133,11084016020553554647],[3307452201570141575,15701538241214188894],[9808624553037921371,4723170318056755559],[14740183693208469558,7727030009292816503],[1248401493076165062,17339925811006567497],[8832757535144158913,4659274885664969740],[4806484166818510930,16590926169549948521],[10137845066833192587,13279221198527484331],[862900208337901235,6029995238423674441],[9730229894941201870,12317789037775437786],[3876401232874291775,17520941196305861319],[8919277736361106420,17321098837874422287],[9314952320711038398,9729762716079513741]],"handle_primary":[[10137845066833192587,[-19.0,43.0]],[3876401232874291775,[0.0,0.0]],[14740183693208469558,[0.0,0.0]],[8832757535144158913,[14.888888888888914,4.8888888888888005]],[8919277736361106420,[10.458809984597837,40.44073194044492]],[15056691877609602335,[0.0,0.0]],[4806484166818510930,[11.595886737767424,32.210796493798]],[862900208337901235,[0.0,0.0]],[3307452201570141575,[0.0,0.0]],[1248401493076165062,[21.0,27.0]],[16631919016540861133,[-63.996421719362885,-1.2074796550824587]],[11569179934425192262,[-4.0,51.0]],[9808624553037921371,[18.0,36.0]],[9314952320711038398,[-34.0,-7.0]],[9730229894941201870,[-24.00371914417652,11.366922485048674]]],"handle_end":[[14740183693208469558,[0.0,0.0]],[10137845066833192587,[0.0,0.0]],[1248401493076165062,[30.59259259259261,-36.59259259259255]],[8832757535144158913,[33.33333333333326,-9.666666666666742]],[862900208337901235,[-9.000000000000114,-25.0]],[9730229894941201870,[-21.0,-27.0]],[4806484166818510930,[3.365858386031487,-42.91469442190146]],[9314952320711038398,[19.0,-43.0]],[11569179934425192262,[-18.0,-36.0]],[8919277736361106420,[70.66666666666652,1.333333333333485]],[9808624553037921371,[28.703703703703695,-13.592592592592496]],[3876401232874291775,[0.0,0.0]],[15056691877609602335,[-10.0,-38.66666666666663]],[3307452201570141575,[0.0,0.0]],[16631919016540861133,[34.0,7.0]]],"stroke":[[3876401232874291775,0],[862900208337901235,0],[16631919016540861133,0],[8919277736361106420,0],[9730229894941201870,0],[1248401493076165062,0],[4806484166818510930,0],[9808624553037921371,0],[3307452201570141575,0],[11569179934425192262,0],[14740183693208469558,0],[15056691877609602335,0],[8832757535144158913,0],[10137845066833192587,0],[9314952320711038398,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9314952320711038398},{"ty":"Primary","segment":10137845066833192587}],[{"ty":"End","segment":9808624553037921371},{"ty":"Primary","segment":9730229894941201870}],[{"ty":"End","segment":862900208337901235},{"ty":"Primary","segment":4806484166818510930}],[{"ty":"End","segment":15056691877609602335},{"ty":"Primary","segment":8919277736361106420}],[{"ty":"End","segment":14740183693208469558},{"ty":"Primary","segment":3307452201570141575}],[{"ty":"End","segment":3307452201570141575},{"ty":"Primary","segment":3876401232874291775}],[{"ty":"End","segment":8919277736361106420},{"ty":"Primary","segment":16631919016540861133}],[{"ty":"End","segment":9730229894941201870},{"ty":"Primary","segment":1248401493076165062}],[{"ty":"End","segment":10137845066833192587},{"ty":"Primary","segment":14740183693208469558}],[{"ty":"End","segment":11569179934425192262},{"ty":"Primary","segment":9808624553037921371}],[{"ty":"End","segment":4806484166818510930},{"ty":"Primary","segment":11569179934425192262}],[{"ty":"End","segment":16631919016540861133},{"ty":"Primary","segment":9314952320711038398}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8832757535144158913},{"ty":"End","segment":1248401493076165062}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12709602171929957216,{"inputs":[{"Node":{"node_id":17753909951719808506,"output_index":0}},{"Node":{"node_id":12922148192688274227,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16609137733952262762,{"inputs":[{"Node":{"node_id":17397123104674848450,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7855094781869605606,{"inputs":[{"Node":{"node_id":14141479077115894852,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractBack"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8460565235419043665,{"inputs":[{"Node":{"node_id":3079923906392020295,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,412.1]},"exposed":false}},{"Value":{"tagged_value":{"F64":27.6},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[6194305264313730032,{"inputs":[{"Node":{"node_id":4560146526699152877,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14950060858756810933,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[9346093213164033195,3249248431686392864,9577388580635291078],"remove":[],"delta":[[3249248431686392864,[1536.0,95.0]],[9577388580635291078,[1536.0,0.0]],[9346093213164033195,[1211.0,0.0]]]},"segments":{"add":[9585086796709645600,13980191878100735848,1147165232046305110],"remove":[],"start_point":[[13980191878100735848,3249248431686392864],[9585086796709645600,9346093213164033195],[1147165232046305110,9577388580635291078]],"end_point":[[13980191878100735848,9577388580635291078],[1147165232046305110,9346093213164033195],[9585086796709645600,3249248431686392864]],"handle_primary":[[9585086796709645600,[0.0,0.0]],[13980191878100735848,[4.547473508864641e-13,2.8421709430404014e-14]],[1147165232046305110,[0.0,0.0]]],"handle_end":[[9585086796709645600,[-281.0,-17.00000000000003]],[13980191878100735848,[0.0,0.0]],[1147165232046305110,[0.0,0.0]]],"stroke":[[1147165232046305110,0],[9585086796709645600,0],[13980191878100735848,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13980191878100735848},{"ty":"Primary","segment":1147165232046305110}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14698962747138962125,{"inputs":[{"Node":{"node_id":17562801632450633291,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18031616785650843168,{"inputs":[{"Node":{"node_id":17952673493105230490,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[11196821089257149774,{"inputs":[{"Node":{"node_id":5888633415105234509,"output_index":0}},{"Node":{"node_id":18031616785650843168,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8359580532088731394,{"inputs":[{"Node":{"node_id":6726954210929537972,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8269257328703012432,{"inputs":[{"Node":{"node_id":4102754869474520966,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13203761224559198689,{"inputs":[{"Node":{"node_id":4809200889774783438,"output_index":0}},{"Node":{"node_id":14690269209726153565,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13670206802546093234,{"inputs":[{"Node":{"node_id":17285637344898461972,"output_index":0}},{"Node":{"node_id":7855094781869605606,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7201841978411396053,{"inputs":[{"Node":{"node_id":4328376070224119511,"output_index":0}},{"Node":{"node_id":17735408893002232096,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11429506195623419966,{"inputs":[{"Node":{"node_id":11301831865756336526,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9071802450034150503,{"inputs":[{"Node":{"node_id":9338394475379815879,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10063704933309776584,{"inputs":[{"Node":{"node_id":13838011362258067867,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false}],[3608604157153838227,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false}],[12185047359007423618,{"inputs":[{"Node":{"node_id":10080296672372912698,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7018444885869143173,{"inputs":[{"Node":{"node_id":12234961922142600898,"output_index":0}},{"Node":{"node_id":8426490990601560741,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1001728975241745659,{"inputs":[{"Node":{"node_id":12770183061753030023,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[392274448837115448,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6787585796949551500,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1536.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17562801632450633291,{"inputs":[{"Node":{"node_id":10286817149456341619,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3750439930725791025,{"inputs":[{"Node":{"node_id":12276520439585231336,"output_index":0}},{"Node":{"node_id":14228923746783465609,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[682567808439406093,{"inputs":[{"Node":{"node_id":7755499790391969923,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":15},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[17740294143355019755,{"inputs":[{"Node":{"node_id":15301503532602557206,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16759836951269190891,{"inputs":[{"Node":{"node_id":11429506195623419966,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17495267820524300686,{"inputs":[{"Node":{"node_id":13616602029989984195,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1248.4973005620557,-153.1867628889006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.2972951295167027},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0000000000000002,1.0000000000000002]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.5511151231257815e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12234961922142600898,{"inputs":[{"Node":{"node_id":1627123781166851142,"output_index":0}},{"Node":{"node_id":18351415092709164412,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11095670964487764044,{"inputs":[{"Node":{"node_id":17603523494627491590,"output_index":0}},{"Node":{"node_id":8359580532088731394,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11301831865756336526,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3251241957527197760,11100418327549747778,8048619563638005414,1078998931754662073],"remove":[],"delta":[[3251241957527197760,[875.8001811251517,185.6784024477276]],[8048619563638005414,[944.0577392578124,302.0703430175781]],[1078998931754662073,[942.0246913580248,264.2962962962963]],[11100418327549747778,[910.880658436214,243.0946502057613]]]},"segments":{"add":[6165219920202055745,10795897848378052161,3439025775805007707,12551435438068218604],"remove":[],"start_point":[[12551435438068218604,1078998931754662073],[6165219920202055745,3251241957527197760],[3439025775805007707,8048619563638005414],[10795897848378052161,11100418327549747778]],"end_point":[[10795897848378052161,8048619563638005414],[3439025775805007707,1078998931754662073],[6165219920202055745,11100418327549747778],[12551435438068218604,3251241957527197760]],"handle_primary":[[6165219920202055745,[0.0,0.0]],[12551435438068218604,[-14.61728395061732,-27.456790123456813]],[3439025775805007707,[-2.629814161991817e-6,5.151861046215345e-6]],[10795897848378052161,[11.46027223334628,13.82427457744465]]],"handle_end":[[10795897848378052161,[-4.732636377154108,-19.33783272951229]],[3439025775805007707,[14.61728395061732,27.456790123456813]],[12551435438068218604,[23.33217876876199,5.204454965879364]],[6165219920202055745,[-29.36625514403283,-35.42386831275718]]],"stroke":[[12551435438068218604,0],[3439025775805007707,0],[10795897848378052161,0],[6165219920202055745,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6165219920202055745},{"ty":"Primary","segment":10795897848378052161}],[{"ty":"End","segment":3439025775805007707},{"ty":"Primary","segment":12551435438068218604}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15301503532602557206,{"inputs":[{"Node":{"node_id":6728362629909402903,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6787585796949551500,{"inputs":[{"Node":{"node_id":11095670964487764044,"output_index":0}},{"Node":{"node_id":16177422101884031678,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18003287685830153881,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4475009837548700636,4481635366652149569,1608608093193158603,4765910415851982345],"remove":[1647009925892902058],"delta":[[4765910415851982345,[283.33331298828125,354.6666564941406]],[4475009837548700636,[525.7325506063205,282.1042056224195]],[4481635366652149569,[684.8888888888889,395.55555555555554]],[1608608093193158603,[609.7777777777777,620.0]]]},"segments":{"add":[3045825504718908919,8024777209266880257,3983292299330016176,11103925991989272298],"remove":[13489289770112164650],"start_point":[[8024777209266880257,4481635366652149569],[3983292299330016176,1608608093193158603],[11103925991989272298,4765910415851982345],[3045825504718908919,4475009837548700636]],"end_point":[[8024777209266880257,1608608093193158603],[3045825504718908919,4481635366652149569],[11103925991989272298,4475009837548700636],[3983292299330016176,4765910415851982345]],"handle_primary":[[8024777209266880257,[11.111111111111086,62.22222222222217]],[3045825504718908919,[62.22222222222217,43.111111111111086]],[11103925991989272298,[0.0,0.0]],[3983292299330016176,[0.0,0.0]]],"handle_end":[[3045825504718908919,[-11.111111111111086,-62.22222222222217]],[8024777209266880257,[34.66666666666674,-85.33333333333337]],[3983292299330016176,[0.0,0.0]],[11103925991989272298,[-113.5844024581724,39.08097956276566]]],"stroke":[[3983292299330016176,0],[11103925991989272298,0],[8024777209266880257,0],[3045825504718908919,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3983292299330016176},{"ty":"Primary","segment":11103925991989272298}],[{"ty":"End","segment":3045825504718908919},{"ty":"Primary","segment":8024777209266880257}]],"remove_g1_continuous":[[{"ty":"End","segment":13489289770112164650},{"ty":"Primary","segment":3045825504718908919}],[{"ty":"End","segment":11103925991989272298},{"ty":"Primary","segment":3045825504718908919}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12770183061753030023,{"inputs":[{"Node":{"node_id":17495267820524300686,"output_index":0}},{"Node":{"node_id":1009114585722052052,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17299978721726771610,{"inputs":[{"Node":{"node_id":7029437790788498388,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[459.4,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.6},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[9135110142507605216,{"inputs":[{"Node":{"node_id":11196821089257149774,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7104261880154687267,{"inputs":[{"Node":{"node_id":2834866505092039323,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18271512507682813443,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10872099980755217048,13049263474526562389,2409359561719399794,9175973472325454282,14263506369487797530,5496457317579994340,7125168137854779179,9658821733796680583,425878374398720476,5252668597335249558],"remove":[],"delta":[[14263506369487797530,[886.5185185185185,178.66666666666669]],[13049263474526562389,[903.1111111111112,55.70370370370371]],[7125168137854779179,[912.2962962962964,205.6296296296296]],[2409359561719399794,[892.7407407407408,111.70370370370372]],[5496457317579994340,[929.3607681755832,198.40877914951983]],[10872099980755217048,[889.0,0.0]],[9175973472325454282,[881.4814814814815,152.5925925925926]],[425878374398720476,[898.633744855967,207.99999999999997]],[9658821733796680583,[920.5925925925926,208.0]],[5252668597335249558,[888.2516734908237,208.88931872324497]]]},"segments":{"add":[16241193756011776206,13961346931609713434,6443321953815072406,13223251807271379465,6545223889678917273,9745298522639115232,8058164935346100149,9187894839116405225,5210886161307886529,11050813873332011119],"remove":[],"start_point":[[9187894839116405225,9658821733796680583],[11050813873332011119,5252668597335249558],[8058164935346100149,7125168137854779179],[13961346931609713434,13049263474526562389],[6443321953815072406,2409359561719399794],[6545223889678917273,14263506369487797530],[13223251807271379465,9175973472325454282],[16241193756011776206,10872099980755217048],[5210886161307886529,425878374398720476],[9745298522639115232,5496457317579994340]],"end_point":[[6443321953815072406,9175973472325454282],[6545223889678917273,5496457317579994340],[9187894839116405225,425878374398720476],[16241193756011776206,13049263474526562389],[5210886161307886529,5252668597335249558],[13961346931609713434,2409359561719399794],[9745298522639115232,7125168137854779179],[13223251807271379465,14263506369487797530],[11050813873332011119,10872099980755217048],[8058164935346100149,9658821733796680583]],"handle_primary":[[9187894839116405225,[-8.263374485596842,1.880201188843188]],[5210886161307886529,[-1.1368683772161605e-13,-2.8421709430404014e-14]],[16241193756011776206,[0.0,0.0]],[11050813873332011119,[-5.947146741852521,-2.1403475298293415]],[13223251807271379465,[3.2812071330587287,8.329218106995853]],[6443321953815072406,[-9.144953020396894,24.145964868041293]],[6545223889678917273,[0.0,0.0]],[8058164935346100149,[0.0,0.0]],[9745298522639115232,[0.0,0.0]],[13961346931609713434,[6.522611384544012,17.67970980547415]]],"handle_end":[[6545223889678917273,[-25.3424782807499,-1.3461362597164737]],[8058164935346100149,[-5.925925925925867,-2.370370370370381]],[13223251807271379465,[0.7901234567900701,-9.492455418381354]],[5210886161307886529,[5.947146741852521,2.1403475298293415]],[13961346931609713434,[10.984910836762538,-29.00411522633746]],[9745298522639115232,[7.703703703703695,-2.074074074074076]],[11050813873332011119,[-86.26684502769479,250.37037037037035]],[16241193756011776206,[-7.506172839506348,-20.345679012345684]],[6443321953815072406,[-3.3276401397055917,-8.447086508484054]],[9187894839116405225,[4.974851394604343,2.0557841792410443]]],"stroke":[[13961346931609713434,0],[11050813873332011119,0],[6545223889678917273,0],[5210886161307886529,0],[8058164935346100149,0],[9745298522639115232,0],[9187894839116405225,0],[6443321953815072406,0],[13223251807271379465,0],[16241193756011776206,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":5210886161307886529},{"ty":"Primary","segment":11050813873332011119}],[{"ty":"End","segment":16241193756011776206},{"ty":"Primary","segment":13961346931609713434}],[{"ty":"End","segment":6443321953815072406},{"ty":"Primary","segment":13223251807271379465}],[{"ty":"End","segment":13961346931609713434},{"ty":"Primary","segment":6443321953815072406}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9187894839116405225},{"ty":"End","segment":8058164935346100149}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8511737864852441844,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[17696051535511578981,{"inputs":[{"Node":{"node_id":16780039553038473906,"output_index":0}},{"Node":{"node_id":9071802450034150503,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10286817149456341619,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10786213048155734586,12599396287665855262,6164201091766276213,6781153531246981076,15695128662656633322,8241402276734357681,10333377922713208038,3749627916562964805,2535476870476707501],"remove":[],"delta":[[8241402276734357681,[853.3333333333336,529.1851851851854]],[2535476870476707501,[887.5061728395062,568.6913580246915]],[6781153531246981076,[872.6913580246915,513.7777777777779]],[12599396287665855262,[902.5185185185188,498.56790123456807]],[3749627916562964805,[866.172839506173,558.2222222222224]],[10333377922713208038,[843.4567901234569,550.1234567901236]],[10786213048155734586,[917.7283950617284,502.91358024691374]],[15695128662656633322,[825.6790123456792,509.4320987654323]],[6164201091766276213,[902.9135802469136,506.8641975308643]]]},"segments":{"add":[15700595221504820396,6369399239389505343,17761347836385237495,3021925106447084698,14489254209548096966,3461110970422306113,14847678502054094837,14515109677644612103,264894972572137143],"remove":[],"start_point":[[6369399239389505343,12599396287665855262],[264894972572137143,2535476870476707501],[14515109677644612103,3749627916562964805],[17761347836385237495,6164201091766276213],[3461110970422306113,8241402276734357681],[14847678502054094837,10333377922713208038],[14489254209548096966,15695128662656633322],[15700595221504820396,10786213048155734586],[3021925106447084698,6781153531246981076]],"end_point":[[264894972572137143,10786213048155734586],[15700595221504820396,12599396287665855262],[14515109677644612103,2535476870476707501],[14847678502054094837,3749627916562964805],[3461110970422306113,10333377922713208038],[6369399239389505343,6164201091766276213],[17761347836385237495,6781153531246981076],[14489254209548096966,8241402276734357681],[3021925106447084698,15695128662656633322]],"handle_primary":[[14515109677644612103,[8.888888888888914,0.0]],[14489254209548096966,[-0.3950434518873181,1.0617032941893854]],[17761347836385237495,[0.0,0.0]],[15700595221504820396,[0.0,0.0]],[14847678502054094837,[0.7901234567900701,2.765432098765473]],[264894972572137143,[0.0,0.0]],[3461110970422306113,[0.38915905346209456,1.493515242756871]],[6369399239389505343,[-7.1111111111111995,-5.530864197530889]],[3021925106447084698,[-16.59259259259261,2.370370370370324]]],"handle_end":[[14489254209548096966,[-0.5712718875797691,-2.192428171126153]],[14515109677644612103,[0.0,0.0]],[3021925106447084698,[0.5488119028742631,-1.474965354794051]],[3461110970422306113,[-0.7901234567900701,-2.765432098765473]],[14847678502054094837,[-8.888888888888914,0.0]],[264894972572137143,[3.753086419753003,37.1358024691358]],[17761347836385237495,[16.59259259259261,-2.370370370370324]],[15700595221504820396,[7.1111111111111995,5.530864197530889]],[6369399239389505343,[0.0,0.0]]],"stroke":[[14847678502054094837,0],[15700595221504820396,0],[3021925106447084698,0],[264894972572137143,0],[17761347836385237495,0],[3461110970422306113,0],[14489254209548096966,0],[14515109677644612103,0],[6369399239389505343,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":14515109677644612103},{"ty":"Primary","segment":264894972572137143}],[{"ty":"End","segment":14489254209548096966},{"ty":"Primary","segment":3461110970422306113}],[{"ty":"End","segment":6369399239389505343},{"ty":"Primary","segment":17761347836385237495}],[{"ty":"End","segment":14847678502054094837},{"ty":"Primary","segment":14515109677644612103}],[{"ty":"End","segment":17761347836385237495},{"ty":"Primary","segment":3021925106447084698}],[{"ty":"End","segment":15700595221504820396},{"ty":"Primary","segment":6369399239389505343}],[{"ty":"End","segment":3461110970422306113},{"ty":"Primary","segment":14847678502054094837}],[{"ty":"End","segment":3021925106447084698},{"ty":"Primary","segment":14489254209548096966}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6726954210929537972,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[177515045030371783,4609870404630548899,1458337690478625792,16230687409600568539,8055802412900565217,12390708657704154619,12909592102393222573,6873550371723398444,13416153271806375161,2492294980235986276,12448133448335459077,7624137673235413199],"remove":[],"delta":[[7624137673235413199,[617.8765432098766,2.465190328815662e-32]],[177515045030371783,[604.2883706752018,0.0]],[16230687409600568539,[491.55555555555554,311.55555555555566]],[1458337690478625792,[473.1851851851851,213.62962962962965]],[12390708657704154619,[596.6748971193416,72.42798353909465]],[8055802412900565217,[480.4444444444445,219.7777777777778]],[12448133448335459077,[610.3703703703706,2.4308653429145085e-63]],[2492294980235986276,[604.4434936307387,42.970116997735616]],[12909592102393222573,[607.8024691358027,0.0]],[4609870404630548899,[589.432098765432,64.79012345679011]],[13416153271806375161,[531.8518518518517,131.2592592592593]],[6873550371723398444,[538.6666666666667,136.0]]]},"segments":{"add":[12529947318087068663,5578827639764758986,1705877195608053135,2463526518527501592,9361245670457788924,921651403153242564,9825559201153691780,15749222431214672690,14294722277069184337,4341232355541306629,3818841110886669992],"remove":[17799038492181728804,11060716078587457450,5057709998225566481,17843645051722826880,16939098306153440303],"start_point":[[1705877195608053135,16230687409600568539],[5578827639764758986,1458337690478625792],[14294722277069184337,12448133448335459077],[9361245670457788924,6873550371723398444],[9825559201153691780,13416153271806375161],[2463526518527501592,8055802412900565217],[921651403153242564,4609870404630548899],[3818841110886669992,7624137673235413199],[12529947318087068663,177515045030371783],[15749222431214672690,2492294980235986276],[4341232355541306629,12390708657704154619]],"end_point":[[4341232355541306629,7624137673235413199],[921651403153242564,13416153271806375161],[9361245670457788924,12390708657704154619],[15749222431214672690,12909592102393222573],[12529947318087068663,4609870404630548899],[2463526518527501592,6873550371723398444],[14294722277069184337,2492294980235986276],[9825559201153691780,1458337690478625792],[1705877195608053135,8055802412900565217],[3818841110886669992,12448133448335459077],[5578827639764758986,16230687409600568539]],"handle_primary":[[2463526518527501592,[9.74414620103056,-24.528368023283747]],[3818841110886669992,[0.0,0.0]],[1705877195608053135,[0.0,0.0]],[14294722277069184337,[-0.2633744855968416,28.576131687242796]],[9825559201153691780,[-30.00610951685011,28.39287782239575]],[9361245670457788924,[22.844654233974516,-21.876660410500975]],[4341232355541306629,[19.753086419753117,-26.73251028806584]],[15749222431214672690,[3.877242131088792,-22.333682252383095]],[921651403153242564,[-7.513106110924076,12.956274823940417]],[12529947318087068663,[0.0,0.0]],[5578827639764758986,[-19.25925925925924,60.44444444444443]]],"handle_end":[[2463526518527501592,[-34.96296296296305,33.481481481481495]],[15749222431214672690,[0.0,0.0]],[14294722277069184337,[0.0,0.0]],[5578827639764758986,[0.0,0.0]],[921651403153242564,[27.555555555555657,-26.07407407407412]],[1705877195608053135,[-19.33333333333331,48.66666666666666]],[12529947318087068663,[12.90534979423876,-22.255144032921805]],[4341232355541306629,[0.0,0.0]],[9361245670457788924,[-16.14969885498249,21.855925783742933]],[3818841110886669992,[0.0,0.0]],[9825559201153691780,[6.194184133897295,-19.440208666385132]]],"stroke":[[5578827639764758986,0],[9361245670457788924,0],[14294722277069184337,0],[12529947318087068663,0],[2463526518527501592,0],[4341232355541306629,0],[9825559201153691780,0],[15749222431214672690,0],[3818841110886669992,0],[921651403153242564,0],[1705877195608053135,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":5578827639764758986},{"ty":"End","segment":9825559201153691780}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":17843645051722826880}],[{"ty":"End","segment":17843645051722826880},{"ty":"Primary","segment":15749222431214672690}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":17799038492181728804}],[{"ty":"End","segment":921651403153242564},{"ty":"Primary","segment":9825559201153691780}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":921651403153242564}],[{"ty":"Primary","segment":16939098306153440303},{"ty":"End","segment":9361245670457788924}],[{"ty":"End","segment":11060716078587457450},{"ty":"Primary","segment":5578827639764758986}],[{"ty":"End","segment":17799038492181728804},{"ty":"Primary","segment":16939098306153440303}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":4341232355541306629}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":5057709998225566481}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":2463526518527501592}],[{"ty":"End","segment":2463526518527501592},{"ty":"Primary","segment":9361245670457788924}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":11060716078587457450}]],"remove_g1_continuous":[[{"ty":"End","segment":5057709998225566481},{"ty":"Primary","segment":14294722277069184337}],[{"ty":"End","segment":4341232355541306629},{"ty":"Primary","segment":3818841110886669992}],[{"ty":"Primary","segment":14294722277069184337},{"ty":"End","segment":3818841110886669992}],[{"ty":"Primary","segment":15749222431214672690},{"ty":"End","segment":14294722277069184337}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17603523494627491590,{"inputs":[{"Node":{"node_id":10995640810984321903,"output_index":0}},{"Node":{"node_id":17740294143355019755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13616602029989984195,{"inputs":[{"Node":{"node_id":3050731459444225191,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FlattenPathNode"}},"visible":true,"skip_deduplication":false}],[4301099429811409147,{"inputs":[{"Node":{"node_id":57390435731316553,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[81.3755165062,-154.9064700048801]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.4164633072520061},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3109716240255919254,{"inputs":[{"Node":{"node_id":5877930116725120460,"output_index":0}},{"Node":{"node_id":18053728639616073084,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2723198387862533596,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0}},{"Node":{"node_id":11201759760883367635,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18351415092709164412,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6484183251661832039,{"inputs":[{"Node":{"node_id":294265135510952894,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[474.2,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.2},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12922148192688274227,{"inputs":[{"Node":{"node_id":18188505856445531484,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7755499790391969923,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[6503655938154160104,{"inputs":[{"Node":{"node_id":17696051535511578981,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16780039553038473906,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7104088139635280554,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1508440849951861669,{"inputs":[{"Node":{"node_id":8566844905246185636,"output_index":0}},{"Node":{"node_id":7480253252288032958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5856350938151339368,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5138872293174440313,14935583009751134816,9014079831396927156,7008812441195504980,9603704700847490044,7238075805746621699,2355002738045707979,5021902985892894619,17629528758352690600,5995306636877552],"remove":[10768931421586254879],"delta":[[5138872293174440313,[922.9629629629628,422.22222222222223]],[14935583009751134816,[914.9629629629628,418.3703703703703]],[17629528758352690600,[892.148148148148,480.2962962962963]],[9014079831396927156,[908.4444444444443,429.9259259259259]],[7008812441195504980,[888.8888888888887,421.3333333333333]],[5995306636877552,[912.8888888888888,479.7037037037037]],[9603704700847490044,[821.037037037037,464.2962962962963]],[7238075805746621699,[798.6831275720165,497.9094650205762]],[2355002738045707979,[826.2057613168724,485.0041152263375]],[5021902985892894619,[857.679012345679,478.2880658436215]]]},"segments":{"add":[7250062683967197158,14131440324578863745,4499620435559196394,14571502160667941876,7203043366367198812,239843798079287870,7655921914272804429,12687760936062936386,7117413478945421556,9071432674597727163],"remove":[3746587001535987651],"start_point":[[9071432674597727163,7238075805746621699],[7250062683967197158,5138872293174440313],[12687760936062936386,17629528758352690600],[4499620435559196394,9014079831396927156],[239843798079287870,2355002738045707979],[7117413478945421556,5995306636877552],[7203043366367198812,9603704700847490044],[14131440324578863745,14935583009751134816],[14571502160667941876,7008812441195504980],[7655921914272804429,5021902985892894619]],"end_point":[[4499620435559196394,7008812441195504980],[9071432674597727163,2355002738045707979],[7117413478945421556,5138872293174440313],[7655921914272804429,17629528758352690600],[7250062683967197158,14935583009751134816],[12687760936062936386,5995306636877552],[14131440324578863745,9014079831396927156],[7203043366367198812,7238075805746621699],[14571502160667941876,9603704700847490044],[239843798079287870,5021902985892894619]],"handle_primary":[[4499620435559196394,[-0.2962962962963047,-0.2962962962963047]],[12687760936062936386,[10.666666666666742,3.555555555555543]],[14571502160667941876,[-0.5925925925926094,0.0]],[7117413478945421556,[0.0,0.0]],[7250062683967197158,[0.0,0.0]],[9071432674597727163,[4.345679012345499,-3.555555555555543]],[7655921914272804429,[18.172839506172863,-1.9753086419753456]],[7203043366367198812,[0.0,0.2962962962963047]],[14131440324578863745,[0.0,0.0]],[239843798079287870,[9.61316872427983,-1.843621399176982]]],"handle_end":[[14571502160667941876,[24.395061728395035,-0.36213991769540144]],[9071432674597727163,[-9.913826570592164,1.9012818080587977]],[4499620435559196394,[8.59259259259261,5.629629629629619]],[7250062683967197158,[0.0,0.0]],[7655921914272804429,[-10.666666666666742,-3.555555555555543]],[12687760936062936386,[0.0,0.0]],[14131440324578863745,[2.962962962963047,-3.259259259259238]],[239843798079287870,[-21.502976534539364,2.3372800581021456]],[7117413478945421556,[15.703703703703695,33.48148148148147]],[7203043366367198812,[-1.1851851851852189,-25.18518518518516]]],"stroke":[[7655921914272804429,0],[14131440324578863745,0],[12687760936062936386,0],[7203043366367198812,0],[9071432674597727163,0],[4499620435559196394,0],[239843798079287870,0],[14571502160667941876,0],[7250062683967197158,0],[7117413478945421556,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":239843798079287870},{"ty":"End","segment":9071432674597727163}],[{"ty":"End","segment":12687760936062936386},{"ty":"Primary","segment":7117413478945421556}],[{"ty":"End","segment":7250062683967197158},{"ty":"Primary","segment":14131440324578863745}],[{"ty":"End","segment":7655921914272804429},{"ty":"Primary","segment":12687760936062936386}],[{"ty":"End","segment":239843798079287870},{"ty":"Primary","segment":7655921914272804429}]],"remove_g1_continuous":[[{"ty":"End","segment":3746587001535987651},{"ty":"Primary","segment":239843798079287870}],[{"ty":"End","segment":9071432674597727163},{"ty":"Primary","segment":3746587001535987651}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14257963317028524134,{"inputs":[{"Node":{"node_id":1001728975241745659,"output_index":0}},{"Node":{"node_id":6503655938154160104,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1491840484128555837,{"inputs":[{"Node":{"node_id":1508440849951861669,"output_index":0}},{"Node":{"node_id":9808637865669223270,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5888633415105234509,{"inputs":[{"Node":{"node_id":3750439930725791025,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1258994191538244490,{"inputs":[{"Node":{"node_id":5488285068107445023,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5486211022469996717,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[266134622800431246,12075466065090700811,7115673652122600762,9852238672814254137],"remove":[134095410253559933],"delta":[[266134622800431246,[525.7325506063205,282.1042056224195]],[12075466065090700811,[877.0370370370372,136.5925925925926]],[9852238672814254137,[879.7947439326053,110.54094004739208]],[7115673652122600762,[646.5386352539062,343.99395751953125]]]},"segments":{"add":[17255728395700231433,3166693019207180063,10242199012993595528,2159953159628520134],"remove":[13980530488817762548,10196443086284452827,3769008694104161528],"start_point":[[17255728395700231433,12075466065090700811],[2159953159628520134,9852238672814254137],[10242199012993595528,266134622800431246],[3166693019207180063,7115673652122600762]],"end_point":[[10242199012993595528,9852238672814254137],[3166693019207180063,266134622800431246],[17255728395700231433,7115673652122600762],[2159953159628520134,12075466065090700811]],"handle_primary":[[17255728395700231433,[0.0010773420832492775,-0.01370555995902123]],[10242199012993595528,[137.37856050479058,-43.88198340019727]],[3166693019207180063,[-126.67994767097883,-51.72627287889763]],[2159953159628520134,[0.0,0.0]]],"handle_end":[[10242199012993595528,[-15.794743932605344,36.71831921186718]],[2159953159628520134,[0.0,0.0]],[3166693019207180063,[0.0,0.0]],[17255728395700231433,[165.46136474609386,67.5615980360243]]],"stroke":[[2159953159628520134,0],[17255728395700231433,0],[10242199012993595528,0],[3166693019207180063,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3166693019207180063},{"ty":"End","segment":17255728395700231433}]],"remove_g1_continuous":[[{"ty":"End","segment":3166693019207180063},{"ty":"Primary","segment":13980530488817762548}],[{"ty":"End","segment":10242199012993595528},{"ty":"Primary","segment":2159953159628520134}],[{"ty":"Primary","segment":3769008694104161528},{"ty":"End","segment":10196443086284452827}],[{"ty":"Primary","segment":10242199012993595528},{"ty":"End","segment":3166693019207180063}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139129879376457893,{"inputs":[{"Node":{"node_id":11373527190663101881,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5954536408321808728,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8323145223085840944,87630150944518163,8212340198835025146,6057321578372831916,16788403743390653241,16686047298905200065,15635903913637220842,8652457572576966876,3124531241960914803,18307826411292029066,9969822516610975381,16995054111951247369,16808246968731723098],"remove":[],"delta":[[16788403743390653241,[467.99999999999994,487.3333333333333]],[8652457572576966876,[514.4523315429688,146.72100830078125]],[16808246968731723098,[891.5555555555554,768.0]],[16686047298905200065,[283.3333333333333,354.66666666666663]],[3124531241960914803,[589.9588477366256,64.65843621399176]],[15635903913637220842,[468.4799499511719,219.78570556640625]],[8323145223085840944,[891.5555555555554,569.3827160493826]],[9969822516610975381,[0.0,0.0]],[87630150944518163,[879.1111111111111,595.8518518518517]],[6057321578372831916,[708.148148148148,616.2962962962962]],[8212340198835025146,[830.8148148148148,633.7777777777776]],[18307826411292029066,[601.1756940654021,0.0]],[16995054111951247369,[0.0,768.0]]]},"segments":{"add":[14879480148926424885,5227512358023446442,17410347049685436697,9544743211426701912,14715945740984195653,515539069333222772,9242150930423817167,8823161072525575433,15885450050057549950,1662692131856898001,178608879920007638,12162371359208565273,16224358815792062223],"remove":[],"start_point":[[16224358815792062223,16808246968731723098],[5227512358023446442,87630150944518163],[12162371359208565273,16995054111951247369],[15885450050057549950,3124531241960914803],[14879480148926424885,8323145223085840944],[515539069333222772,16686047298905200065],[17410347049685436697,8212340198835025146],[14715945740984195653,16788403743390653241],[9544743211426701912,6057321578372831916],[178608879920007638,9969822516610975381],[1662692131856898001,18307826411292029066],[8823161072525575433,8652457572576966876],[9242150930423817167,15635903913637220842]],"end_point":[[16224358815792062223,8323145223085840944],[14879480148926424885,87630150944518163],[5227512358023446442,8212340198835025146],[9544743211426701912,16788403743390653241],[12162371359208565273,16808246968731723098],[15885450050057549950,18307826411292029066],[17410347049685436697,6057321578372831916],[8823161072525575433,3124531241960914803],[515539069333222772,15635903913637220842],[1662692131856898001,9969822516610975381],[178608879920007638,16995054111951247369],[14715945740984195653,16686047298905200065],[9242150930423817167,8652457572576966876]],"handle_primary":[[9544743211426701912,[-57.48148148148141,-21.629629629629676]],[17410347049685436697,[-26.37037037037044,2.3703703703704377]],[15885450050057549950,[11.193415637860312,-27.25925925925926]],[8823161072525575433,[11.259252477575274,-22.666663275824646]],[12162371359208565273,[0.0,0.0]],[5227512358023446442,[-4.444444444444457,18.074074074074133]],[14715945740984195653,[-92.66666666666656,-80.66666666666669]],[178608879920007638,[0.0,0.0]],[1662692131856898001,[0.0,0.0]],[9242150930423817167,[27.25925925925918,-22.518518518518533]],[16224358815792062223,[0.0,0.0]],[14879480148926424885,[0.0,0.0]],[515539069333222772,[48.66666666666663,-23.999999999999943]]],"handle_end":[[515539069333222772,[-95.07216232621772,78.5378732260062]],[9544743211426701912,[92.66666666666656,80.66666666666669]],[17410347049685436697,[57.48148148148141,21.629629629629676]],[5227512358023446442,[26.37037037037044,-2.3703703703704377]],[12162371359208565273,[0.0,0.0]],[1662692131856898001,[0.0,0.0]],[9242150930423817167,[-9.36826657882972,18.859808361471693]],[15885450050057549950,[0.0,0.0]],[8823161072525575433,[-12.439135136214697,30.29295262583988]],[14715945740984195653,[0.0,0.0]],[178608879920007638,[0.0,0.0]],[16224358815792062223,[0.0,0.0]],[14879480148926424885,[4.444444444444457,-18.074074074074133]]],"stroke":[[16224358815792062223,0],[9242150930423817167,0],[17410347049685436697,0],[14879480148926424885,0],[15885450050057549950,0],[8823161072525575433,0],[5227512358023446442,0],[178608879920007638,0],[9544743211426701912,0],[515539069333222772,0],[12162371359208565273,0],[1662692131856898001,0],[14715945740984195653,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":15885450050057549950},{"ty":"Primary","segment":1662692131856898001}],[{"ty":"End","segment":17410347049685436697},{"ty":"Primary","segment":9544743211426701912}],[{"ty":"End","segment":178608879920007638},{"ty":"Primary","segment":12162371359208565273}],[{"ty":"End","segment":8823161072525575433},{"ty":"Primary","segment":15885450050057549950}],[{"ty":"End","segment":1662692131856898001},{"ty":"Primary","segment":178608879920007638}],[{"ty":"End","segment":12162371359208565273},{"ty":"Primary","segment":16224358815792062223}],[{"ty":"End","segment":9544743211426701912},{"ty":"Primary","segment":14715945740984195653}],[{"ty":"End","segment":5227512358023446442},{"ty":"Primary","segment":17410347049685436697}],[{"ty":"End","segment":14879480148926424885},{"ty":"Primary","segment":5227512358023446442}],[{"ty":"End","segment":9242150930423817167},{"ty":"Primary","segment":8823161072525575433}],[{"ty":"End","segment":515539069333222772},{"ty":"Primary","segment":9242150930423817167}]],"remove_g1_continuous":[[{"ty":"End","segment":14715945740984195653},{"ty":"Primary","segment":515539069333222772}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18053728639616073084,{"inputs":[{"Node":{"node_id":6616450276140292763,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17569892869974995307,{"inputs":[{"Node":{"node_id":3997031659711823213,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[5534800796196967885,{"inputs":[{"Node":{"node_id":3608604157153838227,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CentroidNode"}},"visible":true,"skip_deduplication":false}],[7029437790788498388,{"inputs":[{"Node":{"node_id":1809704172129195322,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17351444026127625357,{"inputs":[{"Node":{"node_id":14808063168960305551,"output_index":0}},{"Node":{"node_id":13916027199283115943,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17735408893002232096,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17285637344898461972,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16608607268690234590,17457877227823502997,13436129231170586617,5992570223148766873],"remove":[],"delta":[[13436129231170586617,[481.3333333333333,768.0]],[5992570223148766873,[-2.273736754432321e-13,768.0]],[17457877227823502997,[273.0,476.0]],[16608607268690234590,[0.0,340.0]]]},"segments":{"add":[13284808974014161135,5472571334856691465,8776124420595946733,4274372337254864190],"remove":[],"start_point":[[13284808974014161135,16608607268690234590],[4274372337254864190,5992570223148766873],[8776124420595946733,13436129231170586617],[5472571334856691465,17457877227823502997]],"end_point":[[13284808974014161135,17457877227823502997],[4274372337254864190,16608607268690234590],[8776124420595946733,5992570223148766873],[5472571334856691465,13436129231170586617]],"handle_primary":[[5472571334856691465,[146.0,-13.0]],[13284808974014161135,[161.73791370620617,43.57576470888159]],[4274372337254864190,[0.0,0.0]],[8776124420595946733,[0.0,0.0]]],"handle_end":[[8776124420595946733,[0.0,0.0]],[5472571334856691465,[0.4078646547782227,-253.307727480567]],[13284808974014161135,[-165.43581782916667,14.730586519035386]],[4274372337254864190,[0.0,0.0]]],"stroke":[[8776124420595946733,0],[5472571334856691465,0],[13284808974014161135,0],[4274372337254864190,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13284808974014161135},{"ty":"Primary","segment":5472571334856691465}],[{"ty":"End","segment":8776124420595946733},{"ty":"Primary","segment":4274372337254864190}]],"remove_g1_continuous":[[{"ty":"Primary","segment":13284808974014161135},{"ty":"End","segment":4274372337254864190}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15900830679378240619,{"inputs":[{"Node":{"node_id":2287485748649359627,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1662641269094032596,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6728362629909402903,{"inputs":[{"Node":{"node_id":5856350938151339368,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12276520439585231336,{"inputs":[{"Node":{"node_id":13795432594059356320,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[997.5029638869316,545.7213923090854]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10995640810984321903,{"inputs":[{"Node":{"node_id":12353675714904258944,"output_index":0}},{"Node":{"node_id":10265035897167064154,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15354358358546908017,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4328376070224119511,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13446205009526451196,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1009114585722052052,{"inputs":[{"Node":{"node_id":15692102598187739001,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7252918969430566594,{"inputs":[{"Node":{"node_id":5534800796196967885,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false}],[14684142559936015947,{"inputs":[{"Node":{"node_id":15930698052919171086,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4771789845668099116,{"inputs":[{"Node":{"node_id":17351444026127625357,"output_index":0}},{"Node":{"node_id":14684142559936015947,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14690269209726153565,{"inputs":[{"Node":{"node_id":7376049709233607419,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18188505856445531484,{"inputs":[{"Node":{"node_id":8887924609778270360,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3410481056630111806,{"inputs":[{"Node":{"node_id":1097494158696050491,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2834866505092039323,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5014806436727666175,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0}},{"Node":{"node_id":8863346544623578893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139765080256493579,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3507505346656189771,2904729023031858224,854708012647259796,4175610638601362388,7821224334582795476,2195807584570698921],"remove":[1009888023123207923,16332448509429125699],"delta":[[2195807584570698921,[993.0,767.9999999999999]],[4175610638601362388,[957.0,324.0]],[854708012647259796,[740.0,298.0]],[7821224334582795476,[1093.0,600.0]],[2904729023031858224,[491.3420376907663,506.7530051313737]],[3507505346656189771,[552.0,768.0000000000001]]]},"segments":{"add":[4553965744616493549,13993263006398686359,6577640955869157325,17304574948462342226,8570276641842028192,17183285389582020412],"remove":[546565283439891712,5710832026764395735],"start_point":[[17304574948462342226,4175610638601362388],[13993263006398686359,2904729023031858224],[4553965744616493549,3507505346656189771],[17183285389582020412,7821224334582795476],[8570276641842028192,2195807584570698921],[6577640955869157325,854708012647259796]],"end_point":[[6577640955869157325,4175610638601362388],[17304574948462342226,7821224334582795476],[17183285389582020412,2195807584570698921],[8570276641842028192,3507505346656189771],[13993263006398686359,854708012647259796],[4553965744616493549,2904729023031858224]],"handle_primary":[[4553965744616493549,[0.0,0.0]],[17183285389582020412,[-24.08196064282073,82.4624712920831]],[13993263006398686359,[0.0,-84.7537417270637]],[8570276641842028192,[0.0,0.0]],[6577640955869157325,[102.0,-45.0]],[17304574948462342226,[50.35246044959922,33.38607084805801]]],"handle_end":[[13993263006398686359,[-102.0,45.0]],[4553965744616493549,[0.0,135.2464055295568]],[17304574948462342226,[33.0,-113.0]],[17183285389582020412,[0.0,0.0]],[8570276641842028192,[0.0,0.0]],[6577640955869157325,[-50.35246044959922,-33.38607084805801]]],"stroke":[[17304574948462342226,0],[6577640955869157325,0],[17183285389582020412,0],[13993263006398686359,0],[4553965744616493549,0],[8570276641842028192,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13993263006398686359},{"ty":"Primary","segment":6577640955869157325}],[{"ty":"End","segment":17304574948462342226},{"ty":"Primary","segment":17183285389582020412}],[{"ty":"End","segment":6577640955869157325},{"ty":"Primary","segment":17304574948462342226}],[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":17183285389582020412}],[{"ty":"End","segment":4553965744616493549},{"ty":"Primary","segment":13993263006398686359}]],"remove_g1_continuous":[[{"ty":"End","segment":17183285389582020412},{"ty":"Primary","segment":546565283439891712}],[{"ty":"End","segment":5710832026764395735},{"ty":"Primary","segment":8570276641842028192}],[{"ty":"End","segment":546565283439891712},{"ty":"Primary","segment":5710832026764395735}],[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":546565283439891712}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10080296672372912698,{"inputs":[{"Node":{"node_id":12867379765049504290,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12353675714904258944,{"inputs":[{"Node":{"node_id":13203761224559198689,"output_index":0}},{"Node":{"node_id":17271572793812678706,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17271572793812678706,{"inputs":[{"Node":{"node_id":15900830679378240619,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14228923746783465609,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[2003133867055127539,13758328146055368475],"remove":[],"delta":[[16569120368910754547,[-43.0,0.0]],[4648964341912884959,[324.66666666666646,0.0]],[13758328146055368475,[1299.3064572949788,786.3993743175897]],[2003133867055127539,[1011.111083984375,786.3993530273438]]]},"segments":{"add":[8214025514312603513,7334532063810723038,13431612844608018700],"remove":[3433930674303663828,6602880736207868665],"start_point":[[8214025514312603513,2003133867055127539],[7334532063810723038,16569120368910754547],[13431612844608018700,13758328146055368475]],"end_point":[[13431612844608018700,2003133867055127539],[8214025514312603513,4648964341912884959],[7334532063810723038,13758328146055368475]],"handle_primary":[[13431612844608018700,null],[8214025514312603513,null],[9030015329489789075,[69.08057198853999,-80.19415805947563]],[7334532063810723038,null]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[8214025514312603513,null],[9030015329489789075,[0.0,0.0]],[13431612844608018700,null],[7334532063810723038,null]],"stroke":[[13431612844608018700,0],[7334532063810723038,0],[8214025514312603513,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}],[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11210964267417873667,{"inputs":[{"Node":{"node_id":4261249487994076490,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[91.7203910728,-99.9607940061]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.40698564029617024},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1097494158696050491,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":15.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[8887924609778270360,{"inputs":[{"Node":{"node_id":5014806436727666175,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17036604842139972912,{"inputs":[{"Node":{"node_id":1491840484128555837,"output_index":0}},{"Node":{"node_id":11210964267417873667,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12145355397916841389,{"inputs":[{"Node":{"node_id":16759836951269190891,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4470272391975492611,{"inputs":[{"Node":{"node_id":7018444885869143173,"output_index":0}},{"Node":{"node_id":12145355397916841389,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7962101329808960965,{"inputs":[{"Node":{"node_id":16322546010403524636,"output_index":0}},{"Value":{"tagged_value":{"F64":-1.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::MultiplyNode"}},"visible":true,"skip_deduplication":false}],[5556372312033787775,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false}],[294265135510952894,{"inputs":[{"Node":{"node_id":11264395591110193456,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2025899804080897524,{"inputs":[{"Node":{"node_id":17740496701763775226,"output_index":0}},{"Node":{"node_id":3214181946162459584,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[990192925663920333,{"inputs":[{"Node":{"node_id":3410481056630111806,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[466.8,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.9},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[11264395591110193456,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[13027689870767713939,{"inputs":[{"Node":{"node_id":7201841978411396053,"output_index":0}},{"Node":{"node_id":13340751444307201866,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9338394475379815879,{"inputs":[{"Node":{"node_id":7977952035097419157,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[1327.0278641242007,11.102707365920756]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.23820276778328575},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[230.36030209674013,67.6958526826066]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.855605378252775e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14496934933990319842,{"inputs":[{"Node":{"node_id":12709602171929957216,"output_index":0}},{"Node":{"node_id":12185047359007423618,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13739729101529293427,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0}},{"Node":{"node_id":14139765080256493579,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3214181946162459584,{"inputs":[{"Node":{"node_id":5449860184735415958,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16322546010403524636,{"inputs":[{"Node":{"node_id":5556372312033787775,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CentroidNode"}},"visible":true,"skip_deduplication":false}],[804622576568168609,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[13654185056786459919,6952183320761642858,2802617302192982616,7639287212006638253,15117515618866904690,15750781936547583892,7025422618543191491,3831533579307185652,16937470333767479918,10412162547161259027,5269777039739103358],"remove":[],"delta":[[13654185056786459919,[946.1728395061732,330.8641975308642]],[10412162547161259027,[887.3333333333333,376.0]],[15117515618866904690,[819.1111111111109,354.44444444444434]],[7639287212006638253,[862.8888888888888,349.3333333333333]],[16937470333767479918,[876.6666666666665,359.55555555555554]],[2802617302192982616,[911.7777777777776,334.88888888888886]],[6952183320761642858,[933.9259259259262,324.3456790123457]],[7025422618543191491,[911.5555555555554,345.3333333333333]],[15750781936547583892,[840.6666666666665,368.66666666666663]],[5269777039739103358,[902.2222222222222,394.66666666666663]],[3831533579307185652,[880.4444444444443,357.3333333333333]]]},"segments":{"add":[10498175376126066982,10426255560432238561,11214998966879437330,1241631398419524272,15286139376878919277,15838384105575178137,12854270992100552972,379744301215040936,4069217348643062888,10438163357339042361,9330486019469919863],"remove":[],"start_point":[[379744301215040936,3831533579307185652],[11214998966879437330,2802617302192982616],[10498175376126066982,13654185056786459919],[4069217348643062888,16937470333767479918],[12854270992100552972,7025422618543191491],[10438163357339042361,10412162547161259027],[9330486019469919863,5269777039739103358],[15286139376878919277,15117515618866904690],[15838384105575178137,15750781936547583892],[10426255560432238561,6952183320761642858],[1241631398419524272,7639287212006638253]],"end_point":[[12854270992100552972,3831533579307185652],[10498175376126066982,6952183320761642858],[9330486019469919863,13654185056786459919],[10438163357339042361,5269777039739103358],[1241631398419524272,15117515618866904690],[10426255560432238561,2802617302192982616],[4069217348643062888,10412162547161259027],[11214998966879437330,7639287212006638253],[15286139376878919277,15750781936547583892],[379744301215040936,16937470333767479918],[15838384105575178137,7025422618543191491]],"handle_primary":[[15838384105575178137,[22.222222222222285,5.555555555555543]],[10438163357339042361,[1.3333333333332575,10.888888888888856]],[9330486019469919863,[5.555555555555429,-0.2222222222221717]],[10498175376126066982,[0.0,0.0]],[12854270992100552972,[-0.4444444444443434,0.0]],[11214998966879437330,[-16.666666666666515,-3.777777777777771]],[4069217348643062888,[0.0,0.0]],[15286139376878919277,[-0.5188510642573192,0.6084707935380038]],[379744301215040936,[-0.2222222222221717,0.0]],[10426255560432238561,[-0.39506172839503506,-0.19753086419757435]],[1241631398419524272,[-17.111111111111086,12.888888888888856]]],"handle_end":[[15838384105575178137,[-20.0,2.0]],[10426255560432238561,[16.666666666666515,3.777777777777771]],[9330486019469919863,[0.0,0.0]],[4069217348643062888,[-1.3333333333332575,-10.888888888888856]],[1241631398419524272,[0.5951379226228255,-0.6979344728938486]],[11214998966879437330,[17.111111111111086,-12.888888888888856]],[10498175376126066982,[4.9382716049382225,0.19753086419757435]],[10438163357339042361,[-5.555555555555429,0.2222222222221717]],[15286139376878919277,[-22.222222222222285,-5.555555555555543]],[379744301215040936,[0.0,0.0]],[12854270992100552972,[33.77777777777783,2.2222222222222285]]],"stroke":[[10498175376126066982,0],[15286139376878919277,0],[11214998966879437330,0],[379744301215040936,0],[4069217348643062888,0],[9330486019469919863,0],[10426255560432238561,0],[10438163357339042361,0],[15838384105575178137,0],[12854270992100552972,0],[1241631398419524272,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10426255560432238561},{"ty":"Primary","segment":11214998966879437330}],[{"ty":"End","segment":379744301215040936},{"ty":"Primary","segment":4069217348643062888}],[{"ty":"End","segment":10438163357339042361},{"ty":"Primary","segment":9330486019469919863}],[{"ty":"End","segment":1241631398419524272},{"ty":"Primary","segment":15286139376878919277}],[{"ty":"End","segment":15286139376878919277},{"ty":"Primary","segment":15838384105575178137}],[{"ty":"End","segment":4069217348643062888},{"ty":"Primary","segment":10438163357339042361}],[{"ty":"End","segment":11214998966879437330},{"ty":"Primary","segment":1241631398419524272}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17753909951719808506,{"inputs":[{"Node":{"node_id":2185437945364824599,"output_index":0}},{"Node":{"node_id":9563008199132558110,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8566844905246185636,{"inputs":[{"Node":{"node_id":6852799892628327372,"output_index":0}},{"Node":{"node_id":17131529656312051452,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18095952297474762348,{"inputs":[{"Node":{"node_id":5954536408321808728,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4261249487994076490,{"inputs":[{"Node":{"node_id":14516211820212764316,"output_index":0}},{"Node":{"node_id":5534800796196967885,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8426490990601560741,{"inputs":[{"Node":{"node_id":10760002922115563021,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13795432594059356320,{"inputs":[{"Node":{"node_id":2871608309888343463,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FlattenPathNode"}},"visible":true,"skip_deduplication":false}],[7651693425519490419,{"inputs":[{"Node":{"node_id":4771789845668099116,"output_index":0}},{"Node":{"node_id":15817956847588799375,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6616450276140292763,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[14760110820354327749,9465415708990918986,13517856880347849115,12398030966924498647,2930103517622848405,9496337687212684441],"remove":[],"delta":[[12398030966924498647,[823.4074074074074,97.4814814814815]],[14760110820354327749,[614.8148148148148,129.1851851851852]],[9496337687212684441,[732.148148148148,57.18518518518518]],[9465415708990918986,[706.3703703703703,86.51851851851853]],[13517856880347849115,[777.1851851851851,92.44444444444446]],[2930103517622848405,[819.2592592592591,69.33333333333334]]]},"segments":{"add":[18226408581696793441,16628058317667581864,3809009367670994230,13496648265229692336,10686631697241750410,11696351847604335156],"remove":[],"start_point":[[3809009367670994230,13517856880347849115],[16628058317667581864,9465415708990918986],[13496648265229692336,12398030966924498647],[10686631697241750410,2930103517622848405],[11696351847604335156,9496337687212684441],[18226408581696793441,14760110820354327749]],"end_point":[[18226408581696793441,9465415708990918986],[3809009367670994230,12398030966924498647],[16628058317667581864,13517856880347849115],[13496648265229692336,2930103517622848405],[11696351847604335156,14760110820354327749],[10686631697241750410,9496337687212684441]],"handle_primary":[[3809009367670994230,[21.33333333333337,4.740740740740733]],[16628058317667581864,[41.185185185185105,-9.7777777777778]],[18226408581696793441,[0.0,0.0]],[13496648265229692336,[14.222222222222172,-0.8888888888888857]],[11696351847604335156,[-29.333333333333258,11.55555555555555]],[10686631697241750410,[-13.037037037036953,-4.444444444444457]]],"handle_end":[[10686631697241750410,[29.333333333333258,-11.55555555555555]],[18226408581696793441,[-41.185185185185105,9.7777777777778]],[16628058317667581864,[-21.33333333333337,-4.740740740740733]],[13496648265229692336,[13.037037037036953,4.444444444444457]],[3809009367670994230,[-14.222222222222172,0.8888888888888857]],[11696351847604335156,[54.81481481481478,-42.37037037037035]]],"stroke":[[16628058317667581864,0],[11696351847604335156,0],[3809009367670994230,0],[10686631697241750410,0],[13496648265229692336,0],[18226408581696793441,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10686631697241750410},{"ty":"Primary","segment":11696351847604335156}],[{"ty":"End","segment":3809009367670994230},{"ty":"Primary","segment":13496648265229692336}],[{"ty":"End","segment":16628058317667581864},{"ty":"Primary","segment":3809009367670994230}],[{"ty":"End","segment":18226408581696793441},{"ty":"Primary","segment":16628058317667581864}],[{"ty":"End","segment":13496648265229692336},{"ty":"Primary","segment":10686631697241750410}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4560146526699152877,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0}},{"Node":{"node_id":13646498613066619660,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[57390435731316553,{"inputs":[{"Node":{"node_id":8460565235419043665,"output_index":0}},{"Node":{"node_id":13838011362258067867,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16785043320296790229,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[9808637865669223270,{"inputs":[{"Node":{"node_id":140396870212231820,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16177422101884031678,{"inputs":[{"Node":{"node_id":13353438235848911576,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11201759760883367635,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5173348374891662425,12314285668680405002,7388288026322342161,12796056970187696453],"remove":[],"delta":[[7388288026322342161,[1277.0,319.0]],[5173348374891662425,[969.0,0.0]],[12314285668680405002,[1085.0,181.0]],[12796056970187696453,[1418.0,0.0]]]},"segments":{"add":[10860608091363771974,9177623211202289793,18091265337503274797,9065140293539496953],"remove":[],"start_point":[[9177623211202289793,12314285668680405002],[10860608091363771974,5173348374891662425],[18091265337503274797,7388288026322342161],[9065140293539496953,12796056970187696453]],"end_point":[[18091265337503274797,12796056970187696453],[9065140293539496953,5173348374891662425],[9177623211202289793,7388288026322342161],[10860608091363771974,12314285668680405002]],"handle_primary":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-33.0,137.0]],[18091265337503274797,[178.0,-35.0]],[10860608091363771974,[0.0,0.0]]],"handle_end":[[10860608091363771974,[25.066898104916696,-104.0656072840481]],[9065140293539496953,[0.0,0.0]],[18091265337503274797,[168.99998492988766,81.0]],[9177623211202289793,[-77.81941867085992,15.301571086966838]]],"stroke":[[9177623211202289793,0],[10860608091363771974,0],[18091265337503274797,0],[9065140293539496953,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10860608091363771974},{"ty":"Primary","segment":9177623211202289793}],[{"ty":"End","segment":9177623211202289793},{"ty":"Primary","segment":18091265337503274797}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10760002922115563021,{"inputs":[{"Node":{"node_id":14257963317028524134,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13588160462734303101,{"inputs":[{"Node":{"node_id":17036604842139972912,"output_index":0}},{"Node":{"node_id":4301099429811409147,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11373527190663101881,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12058665768506126331,6802441093413090533,4854280308383915721,17729943149159368459,7436032950540776377,2189722519288419244,15817054697695831753,15744271344233846756,13877679667762731651,13567509413382199058,5664077098702810122,14178520291283306679,15575201098426093294],"remove":[],"delta":[[4854280308383915721,[813.9259259259259,200.2962962962963]],[5664077098702810122,[686.5185185185185,191.1111111111111]],[15817054697695831753,[806.716049382716,206.22222222222223]],[15744271344233846756,[785.7777777777777,205.62962962962965]],[2189722519288419244,[796.0493827160494,202.2716049382716]],[7436032950540776377,[815.4074074074074,203.25925925925927]],[6802441093413090533,[783.4074074074074,172.74074074074073]],[13567509413382199058,[702.6831275720166,195.95061728395063]],[15575201098426093294,[636.7407407407406,173.33333333333331]],[17729943149159368459,[801.1851851851852,199.90123456790124]],[13877679667762731651,[743.4074074074074,234.66666666666669]],[12058665768506126331,[693.7283950617283,174.35390946502056]],[14178520291283306679,[668.4444444444443,183.1111111111111]]]},"segments":{"add":[2336956120616260883,1639796012074210121,3918280827204321712,13932755083907220179,14941832641240060361,94092576912261794,18299135553255571870,3109091330258982137,11037018395008586448,16261506098907231989,8279051592565434787,2367379450383978497,5102625335252315850],"remove":[],"start_point":[[16261506098907231989,13567509413382199058],[94092576912261794,2189722519288419244],[11037018395008586448,13877679667762731651],[3109091330258982137,15744271344233846756],[1639796012074210121,6802441093413090533],[3918280827204321712,4854280308383915721],[13932755083907220179,17729943149159368459],[14941832641240060361,7436032950540776377],[2367379450383978497,14178520291283306679],[5102625335252315850,15575201098426093294],[2336956120616260883,12058665768506126331],[18299135553255571870,15817054697695831753],[8279051592565434787,5664077098702810122]],"end_point":[[18299135553255571870,15744271344233846756],[8279051592565434787,14178520291283306679],[13932755083907220179,7436032950540776377],[94092576912261794,15817054697695831753],[3109091330258982137,13877679667762731651],[5102625335252315850,12058665768506126331],[11037018395008586448,13567509413382199058],[14941832641240060361,2189722519288419244],[2336956120616260883,6802441093413090533],[16261506098907231989,5664077098702810122],[3918280827204321712,17729943149159368459],[2367379450383978497,15575201098426093294],[1639796012074210121,4854280308383915721]],"handle_primary":[[16261506098907231989,[0.0,0.0]],[11037018395008586448,[0.0,0.0]],[2336956120616260883,[0.0,0.0]],[3109091330258982137,[0.0,0.0]],[2367379450383978497,[-5.037037037036953,-1.7777777777777717]],[14941832641240060361,[0.0,0.0]],[3918280827204321712,[0.0,0.0]],[18299135553255571870,[0.0,0.0]],[94092576912261794,[0.0,0.0]],[1639796012074210121,[0.0,0.0]],[13932755083907220179,[0.0,0.0]],[5102625335252315850,[0.0,0.0]],[8279051592565434787,[-16.75720164609038,-2.1399176954732297]]],"handle_end":[[11037018395008586448,[13.168724279835374,22.12345679012344]],[14941832641240060361,[7.1111111111111995,1.7777777777778]],[2367379450383978497,[12.740740740740648,5.037037037037038]],[94092576912261794,[0.0,0.0]],[1639796012074210121,[-19.259259259259352,-3.259259259259238]],[8279051592565434787,[5.037037037036953,1.7777777777777717]],[13932755083907220179,[0.0,0.0]],[18299135553255571870,[10.07407407407402,2.7654320987654444]],[16261506098907231989,[12.1395654462896,1.5502392023748983]],[5102625335252315850,[-27.12757201646093,2.633744855967052]],[3109091330258982137,[18.962962962963047,2.074074074074048]],[2336956120616260883,[-65.77777777777783,13.333333333333314]],[3918280827204321712,[0.0,0.0]]],"stroke":[[11037018395008586448,0],[2367379450383978497,0],[2336956120616260883,0],[16261506098907231989,0],[1639796012074210121,0],[94092576912261794,0],[14941832641240060361,0],[8279051592565434787,0],[18299135553255571870,0],[13932755083907220179,0],[3109091330258982137,0],[3918280827204321712,0],[5102625335252315850,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":94092576912261794},{"ty":"Primary","segment":18299135553255571870}],[{"ty":"End","segment":16261506098907231989},{"ty":"Primary","segment":8279051592565434787}],[{"ty":"End","segment":13932755083907220179},{"ty":"Primary","segment":14941832641240060361}],[{"ty":"End","segment":3918280827204321712},{"ty":"Primary","segment":13932755083907220179}],[{"ty":"End","segment":8279051592565434787},{"ty":"Primary","segment":2367379450383978497}]],"remove_g1_continuous":[[{"ty":"Primary","segment":16261506098907231989},{"ty":"End","segment":11037018395008586448}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9563008199132558110,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18081743490344004315,{"inputs":[{"Node":{"node_id":13588160462734303101,"output_index":0}},{"Node":{"node_id":18068340617333437755,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6852799892628327372,{"inputs":[{"Node":{"node_id":2025899804080897524,"output_index":0}},{"Node":{"node_id":16671141883125519098,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17952673493105230490,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8863346544623578893,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5480246971175127548,949359986970918930,6461719056721357962,6265491311473200676],"remove":[947514826240006203],"delta":[[949359986970918930,[0.0,608.0]],[5480246971175127548,[364.0,767.9999999999999]],[6461719056721357962,[173.33333333333331,506.66666666666674]],[6265491311473200676,[-2.273736754432321e-13,768.0000000000001]]]},"segments":{"add":[8951068186878308228,9717584104793611782,15710828508798332384,12480300844056666979],"remove":[15926511461198813522,11231973846952426191,6561081452252813685],"start_point":[[15710828508798332384,5480246971175127548],[9717584104793611782,949359986970918930],[8951068186878308228,6461719056721357962],[12480300844056666979,6265491311473200676]],"end_point":[[8951068186878308228,5480246971175127548],[15710828508798332384,6265491311473200676],[12480300844056666979,949359986970918930],[9717584104793611782,6461719056721357962]],"handle_primary":[[15710828508798332384,null],[8951068186878308228,[121.00000000000006,-37.99999999999994]],[12480300844056666979,null],[9717584104793611782,[0.0,0.0]]],"handle_end":[[9717584104793611782,[-63.1770926995265,19.84073985604961]],[8951068186878308228,[-92.0,-81.99999999999989]],[15710828508798332384,null],[12480300844056666979,null]],"stroke":[[15710828508798332384,0],[9717584104793611782,0],[8951068186878308228,0],[12480300844056666979,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6561081452252813685},{"ty":"Primary","segment":9717584104793611782}],[{"ty":"Primary","segment":8951068186878308228},{"ty":"End","segment":9717584104793611782}],[{"ty":"Primary","segment":9717584104793611782},{"ty":"End","segment":12480300844056666979}]],"remove_g1_continuous":[[{"ty":"End","segment":15926511461198813522},{"ty":"Primary","segment":8951068186878308228}],[{"ty":"Primary","segment":11231973846952426191},{"ty":"End","segment":9717584104793611782}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15692102598187739001,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0}},{"Node":{"node_id":11201759760883367635,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4421418468606442725,{"inputs":[{"Node":{"node_id":8863346544623578893,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4807760870555738383,{"inputs":[{"Node":{"node_id":876963243827503916,"output_index":0}},{"Node":{"node_id":8269257328703012432,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4102754869474520966,{"inputs":[{"Node":{"node_id":2723198387862533596,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2880630606834119505,{"inputs":[{"Node":{"node_id":8297015715799006244,"output_index":0}},{"Node":{"node_id":16322546010403524636,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10265035897167064154,{"inputs":[{"Node":{"node_id":14698962747138962125,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17131529656312051452,{"inputs":[{"Node":{"node_id":13646498613066619660,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7104088139635280554,{"inputs":[{"Node":{"node_id":16785043320296790229,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[18068340617333437755,{"inputs":[{"Node":{"node_id":2880630606834119505,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[73.0306419396,-200.8521460039]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.42594097420784194},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2185437945364824599,{"inputs":[{"Node":{"node_id":18081743490344004315,"output_index":0}},{"Node":{"node_id":4421418468606442725,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1627123781166851142,{"inputs":[{"Node":{"node_id":4807760870555738383,"output_index":0}},{"Node":{"node_id":15354358358546908017,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14141479077115894852,{"inputs":[{"Node":{"node_id":15433707377961038695,"output_index":0}},{"Node":{"node_id":17285637344898461972,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17397123104674848450,{"inputs":[{"Node":{"node_id":1662641269094032596,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15877481873925059044,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0}},{"Node":{"node_id":7252918969430566594,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13340751444307201866,{"inputs":[{"Node":{"node_id":9135110142507605216,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12741076678082295759,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13916027199283115943,{"inputs":[{"Node":{"node_id":6194305264313730032,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15930698052919171086,{"inputs":[{"Node":{"node_id":13739729101529293427,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4631655038168471552,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::BoundingBoxNode"}},"visible":true,"skip_deduplication":false}],[17223836790030950966,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17056531964793634106,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0}},{"Node":{"node_id":10063704933309776584,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13446205009526451196,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15433707377961038695,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16723991032614525258,1623125309784127684,7209807874503344461,3123395482103162919,2668496811386192321],"remove":[12344391980636687302],"delta":[[2668496811386192321,[0.0,768.0]],[1623125309784127684,[643.9258958566198,633.6997633965701]],[3123395482103162919,[-2.273736754432321e-13,689.0]],[16723991032614525258,[553.0000000000001,768.0]],[7209807874503344461,[188.0,694.6666666666669]]]},"segments":{"add":[3656277643115996070,6789459806904610761,16287649713110748258,16456150086799119359,1652964032977338610],"remove":[1848051273241122771],"start_point":[[16287649713110748258,3123395482103162919],[3656277643115996070,16723991032614525258],[6789459806904610761,1623125309784127684],[1652964032977338610,7209807874503344461],[16456150086799119359,2668496811386192321]],"end_point":[[1652964032977338610,3123395482103162919],[3656277643115996070,1623125309784127684],[6789459806904610761,7209807874503344461],[16456150086799119359,16723991032614525258],[16287649713110748258,2668496811386192321]],"handle_primary":[[3656277643115996070,[0.0,0.0]],[1652964032977338610,[-81.48609837852206,84.6759456460087]],[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]],[6789459806904610761,[-213.92589585661983,-68.82675604113183]]],"handle_end":[[16287649713110748258,[0.0,0.0]],[6789459806904610761,[187.33333333333343,-194.6666666666667]],[16456150086799119359,[0.0,0.0]],[1652964032977338610,[56.00000000000023,11.0]],[3656277643115996070,[0.0,0.0]]],"stroke":[[16456150086799119359,0],[3656277643115996070,0],[6789459806904610761,0],[16287649713110748258,0],[1652964032977338610,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":16287649713110748258},{"ty":"Primary","segment":16456150086799119359}],[{"ty":"End","segment":6789459806904610761},{"ty":"Primary","segment":1652964032977338610}]],"remove_g1_continuous":[[{"ty":"End","segment":1652964032977338610},{"ty":"Primary","segment":1848051273241122771}],[{"ty":"End","segment":3656277643115996070},{"ty":"Primary","segment":6789459806904610761}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5877930116725120460,{"inputs":[{"Node":{"node_id":4470272391975492611,"output_index":0}},{"Node":{"node_id":1258994191538244490,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14516211820212764316,{"inputs":[{"Node":{"node_id":2124231869409556689,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,416.7]},"exposed":false}},{"Value":{"tagged_value":{"F64":31.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[3997031659711823213,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0}},{"Node":{"node_id":7962101329808960965,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3471746866096043087,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7480253252288032958,{"inputs":[{"Node":{"node_id":7104261880154687267,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3079923906392020295,{"inputs":[{"Node":{"node_id":17056531964793634106,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4809200889774783438,{"inputs":[{"Node":{"node_id":3109716240255919254,"output_index":0}},{"Node":{"node_id":14139129879376457893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16304636129468583592,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4648964341912884959,10156053545530752213,16569120368910754547],"remove":[],"delta":[[4648964341912884959,[665.0000000000001,768.0]],[16569120368910754547,[1361.0,768.0]],[10156053545530752213,[1094.162353515625,594.2965698242188]]]},"segments":{"add":[9030015329489789075,2197140374690997530,3433930674303663828],"remove":[],"start_point":[[2197140374690997530,10156053545530752213],[3433930674303663828,16569120368910754547],[9030015329489789075,4648964341912884959]],"end_point":[[2197140374690997530,16569120368910754547],[3433930674303663828,4648964341912884959],[9030015329489789075,10156053545530752213]],"handle_primary":[[2197140374690997530,[79.20069951994813,30.807024746222492]],[3433930674303663828,[0.0,0.0]],[9030015329489789075,[32.66666666666663,-95.99999999999989]]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[9030015329489789075,[-238.88331323750492,-92.9194336284096]],[3433930674303663828,[0.0,0.0]]],"stroke":[[9030015329489789075,0],[3433930674303663828,0],[2197140374690997530,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":2197140374690997530},{"ty":"Primary","segment":3433930674303663828}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2871608309888343463,{"inputs":[{"Node":{"node_id":12494428953087324640,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[5488285068107445023,{"inputs":[{"Node":{"node_id":7667878689218439065,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3050731459444225191,{"inputs":[{"Node":{"node_id":682567808439406093,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[16306737306999003555,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6082833770141706533,7903705226822768120,17147466439590042359,13341364271767916194],"remove":[],"delta":[[6082833770141706533,[504.0987654320987,184.6255144032922]],[7903705226822768120,[497.3827160493826,248.88888888888889]],[13341364271767916194,[262.22222222222223,364.1481481481481]],[17147466439590042359,[526.0109927536641,282.1042175292969]]]},"segments":{"add":[14649965831690031908,801877719748058643,9659144961849433642,2255088856072565305],"remove":[],"start_point":[[9659144961849433642,17147466439590042359],[14649965831690031908,6082833770141706533],[2255088856072565305,13341364271767916194],[801877719748058643,7903705226822768120]],"end_point":[[801877719748058643,17147466439590042359],[2255088856072565305,6082833770141706533],[9659144961849433642,13341364271767916194],[14649965831690031908,7903705226822768120]],"handle_primary":[[801877719748058643,[13.173601585124231,23.615912208504938]],[9659144961849433642,[0.0,0.0]],[14649965831690031908,[0.0,0.0]],[2255088856072565305,[0.0,0.0]]],"handle_end":[[801877719748058643,[0.0,0.0]],[9659144961849433642,[195.55555555555569,-16.14814814814804]],[14649965831690031908,[-17.920501046401128,-32.12553353079403]],[2255088856072565305,[-112.09876543209862,43.81893004115227]]],"stroke":[[801877719748058643,0],[14649965831690031908,0],[9659144961849433642,0],[2255088856072565305,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":801877719748058643},{"ty":"Primary","segment":9659144961849433642}],[{"ty":"End","segment":14649965831690031908},{"ty":"Primary","segment":801877719748058643}]],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8297015715799006244,{"inputs":[{"Node":{"node_id":17569892869974995307,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,407.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":24.2},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12867379765049504290,{"inputs":[{"Node":{"node_id":6445954214067437701,"output_index":0}},{"Node":{"node_id":8863346544623578893,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17740496701763775226,{"inputs":[{"Node":{"node_id":13027689870767713939,"output_index":0}},{"Node":{"node_id":16609137733952262762,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14808063168960305551,{"inputs":[{"Node":{"node_id":14496934933990319842,"output_index":0}},{"Node":{"node_id":3471746866096043087,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12494428953087324640,{"inputs":[{"Node":{"node_id":8511737864852441844,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[15817956847588799375,{"inputs":[{"Node":{"node_id":11201759760883367635,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2287485748649359627,{"inputs":[{"Node":{"node_id":804622576568168609,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13646498613066619660,{"inputs":[{"Node":{"node_id":12741076678082295759,"output_index":0}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null}},"import_index":1}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_path_bool::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1809704172129195322,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[2124231869409556689,{"inputs":[{"Node":{"node_id":15877481873925059044,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[876963243827503916,{"inputs":[{"Node":{"node_id":7651693425519490419,"output_index":0}},{"Node":{"node_id":17223836790030950966,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13838011362258067867,{"inputs":[{"Node":{"node_id":4631655038168471552,"output_index":0}},{"Value":{"tagged_value":{"CentroidType":"Area"},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CentroidNode"}},"visible":true,"skip_deduplication":false}],[7376049709233607419,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16958489363675356032,7347160684180114694,4322398537034510509,3438797896265725901,16005438712872589849,1674257131044231065,10491326691824745018,9374180853656949931,13358295350421759755,15245407364463454564],"remove":[],"delta":[[4322398537034510509,[776.888888888889,117.53086419753087]],[9374180853656949931,[784.0000000000002,176.98765432098767]],[13358295350421759755,[778.4691358024693,177.1851851851852]],[7347160684180114694,[772.1481481481483,138.66666666666669]],[1674257131044231065,[829.4320987654323,121.67901234567904]],[3438797896265725901,[795.4567901234569,94.41975308641976]],[16005438712872589849,[817.1851851851852,94.61728395061728]],[10491326691824745018,[811.851851851852,148.54320987654322]],[15245407364463454564,[773.530864197531,141.4320987654321]],[16958489363675356032,[658.172839506173,169.08641975308643]]]},"segments":{"add":[11663644781855838202,198953627342130434,8327087349631976772,13015157349146777770,8528911024810728168,3235570761188242773,16847383896493391194,16846650637386857857,3784798568712268630,12873317883441611394],"remove":[],"start_point":[[3784798568712268630,13358295350421759755],[11663644781855838202,16958489363675356032],[8327087349631976772,4322398537034510509],[16847383896493391194,10491326691824745018],[12873317883441611394,15245407364463454564],[198953627342130434,7347160684180114694],[8528911024810728168,16005438712872589849],[3235570761188242773,1674257131044231065],[13015157349146777770,3438797896265725901],[16846650637386857857,9374180853656949931]],"end_point":[[198953627342130434,4322398537034510509],[16847383896493391194,9374180853656949931],[16846650637386857857,13358295350421759755],[12873317883441611394,16958489363675356032],[3784798568712268630,15245407364463454564],[8327087349631976772,3438797896265725901],[8528911024810728168,1674257131044231065],[3235570761188242773,10491326691824745018],[11663644781855838202,7347160684180114694],[13015157349146777770,16005438712872589849]],"handle_primary":[[16846650637386857857,[0.0,0.0]],[16847383896493391194,[-17.185185185185105,13.234567901234584]],[8327087349631976772,[-0.19753086419757435,-13.82716049382715]],[13015157349146777770,[0.0,0.0]],[12873317883441611394,[-19.75308641975323,2.172839506172835]],[3784798568712268630,[-2.962962962963161,-10.864197530864232]],[3235570761188242773,[0.1975308641974607,7.703703703703709]],[11663644781855838202,[0.0,0.0]],[8528911024810728168,[5.530864197530946,5.925925925925924]],[198953627342130434,[0.0,0.3950617283950635]]],"handle_end":[[16846650637386857857,[0.0,0.0]],[8528911024810728168,[-0.1975308641974607,-7.703703703703709]],[3784798568712268630,[2.9629629629629335,5.135802469135797]],[8327087349631976772,[0.0,0.0]],[3235570761188242773,[17.185185185185105,-13.234567901234584]],[12873317883441611394,[33.382716049382566,14.222222222222172]],[198953627342130434,[0.19753086419757435,13.82716049382715]],[16847383896493391194,[0.0,0.0]],[13015157349146777770,[-5.530864197530946,-5.925925925925924]],[11663644781855838202,[-74.27160493827171,29.03703703703698]]],"stroke":[[3784798568712268630,0],[3235570761188242773,0],[8528911024810728168,0],[13015157349146777770,0],[8327087349631976772,0],[16847383896493391194,0],[198953627342130434,0],[12873317883441611394,0],[11663644781855838202,0],[16846650637386857857,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":16847383896493391194},{"ty":"Primary","segment":16846650637386857857}],[{"ty":"End","segment":13015157349146777770},{"ty":"Primary","segment":8528911024810728168}],[{"ty":"End","segment":8528911024810728168},{"ty":"Primary","segment":3235570761188242773}],[{"ty":"End","segment":3235570761188242773},{"ty":"Primary","segment":16847383896493391194}],[{"ty":"End","segment":8327087349631976772},{"ty":"Primary","segment":13015157349146777770}],[{"ty":"End","segment":198953627342130434},{"ty":"Primary","segment":8327087349631976772}]],"remove_g1_continuous":[[{"ty":"End","segment":3784798568712268630},{"ty":"Primary","segment":12873317883441611394}],[{"ty":"End","segment":16846650637386857857},{"ty":"Primary","segment":3784798568712268630}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7977952035097419157,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::EllipseNode"}},"visible":true,"skip_deduplication":false}],[7667878689218439065,{"inputs":[{"Node":{"node_id":18271512507682813443,"output_index":0}},{"Node":{"node_id":5449860184735415958,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14030142873804552388,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[11163144542703672167,7233902871991446034,9403888920678312544,5714042674660607880,9912917483675332510],"remove":[],"delta":[[9912917483675332510,[1536.0,254.00000000000009]],[5714042674660607880,[1536.0,0.0]],[11163144542703672167,[763.0,0.0]],[7233902871991446034,[908.0,134.0]],[9403888920678312544,[1271.0,199.0]]]},"segments":{"add":[7099980686025805826,11879054056208937348,7804540624589615499,3118709054343469746,12085471811343146506],"remove":[8174738144062904321],"start_point":[[3118709054343469746,9403888920678312544],[7804540624589615499,5714042674660607880],[12085471811343146506,9912917483675332510],[7099980686025805826,11163144542703672167],[11879054056208937348,7233902871991446034]],"end_point":[[3118709054343469746,9912917483675332510],[12085471811343146506,5714042674660607880],[11879054056208937348,9403888920678312544],[7099980686025805826,7233902871991446034],[7804540624589615499,11163144542703672167]],"handle_primary":[[11879054056208937348,[68.41365603453937,54.51084151791355]],[7804540624589615499,[0.0,0.0]],[3118709054343469746,[191.0,-106.0]],[12085471811343146506,[0.0,0.0]],[7099980686025805826,[0.0,0.0]]],"handle_end":[[11879054056208937348,[-121.83694366711715,67.61631428646292]],[3118709054343469746,[0.0,0.0]],[12085471811343146506,[0.0,0.0]],[7804540624589615499,[0.0,0.0]],[7099980686025805826,[-68.41365603453914,-54.51084151791349]]],"stroke":[[7099980686025805826,0],[11879054056208937348,0],[12085471811343146506,0],[7804540624589615499,0],[3118709054343469746,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":8174738144062904321}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":3118709054343469746}],[{"ty":"End","segment":7099980686025805826},{"ty":"Primary","segment":11879054056208937348}]],"remove_g1_continuous":[[{"ty":"End","segment":3118709054343469746},{"ty":"Primary","segment":12085471811343146506}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[6503655938154160104,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,44]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12185047359007423618,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3471746866096043087,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17753909951719808506,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17735408893002232096,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1809704172129195322,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,106]}}},"network_metadata":null}}],[13588160462734303101,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4328376070224119511,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8887924609778270360,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3109716240255919254,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eyebrow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7376049709233607419,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11095670964487764044,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13838011362258067867,{"persistent_metadata":{"reference":"Centroid","display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,103]}}},"network_metadata":null}}],[15817956847588799375,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14141479077115894852,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3214181946162459584,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10995640810984321903,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Bottom","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17603523494627491590,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Top","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8269257328703012432,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11201759760883367635,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,64]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7104088139635280554,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[990192925663920333,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,99]}}},"network_metadata":null}}],[11429506195623419966,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17569892869974995307,{"persistent_metadata":{"reference":"To Graphic","display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18081743490344004315,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5486211022469996717,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,75]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3750439930725791025,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10265035897167064154,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16177422101884031678,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16322546010403524636,{"persistent_metadata":{"reference":"Centroid","display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,96]}}},"network_metadata":null}}],[18351415092709164412,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7962101329808960965,{"persistent_metadata":{"reference":"Multiply","display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,94]}}},"network_metadata":null}}],[15354358358546908017,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18271512507682813443,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14496934933990319842,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16780039553038473906,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5449860184735415958,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,124]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17223836790030950966,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3997031659711823213,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1258994191538244490,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2834866505092039323,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8359580532088731394,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4470272391975492611,{"persistent_metadata":{"reference":"Merge","display_name":"Rose Sliver Silhouette","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17351444026127625357,{"persistent_metadata":{"reference":"Merge","display_name":"Face Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17696051535511578981,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-41,47]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15301503532602557206,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10760002922115563021,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12741076678082295759,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,118]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3410481056630111806,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,99]}}},"network_metadata":null}}],[1097494158696050491,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,99]}}},"network_metadata":null}}],[14698962747138962125,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18031616785650843168,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"Solidify Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,133]}}},"network_metadata":null}}],[9338394475379815879,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6787585796949551500,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7029437790788498388,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,106]}}},"network_metadata":null}}],[7855094781869605606,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4771789845668099116,{"persistent_metadata":{"reference":"Merge","display_name":"Cheek Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7104261880154687267,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16671141883125519098,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5888633415105234509,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5856350938151339368,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3608604157153838227,{"persistent_metadata":{"reference":"Bounding Box","display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,109]}}},"network_metadata":null}}],[14690269209726153565,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12709602171929957216,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14030142873804552388,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,66]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4421418468606442725,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13616602029989984195,{"persistent_metadata":{"reference":"Flatten Path","display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18053728639616073084,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12234961922142600898,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17036604842139972912,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":4}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7977952035097419157,{"persistent_metadata":{"reference":"Ellipse","display_name":"Ellipse","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius Y","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14808063168960305551,{"persistent_metadata":{"reference":"Merge","display_name":"Face Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5534800796196967885,{"persistent_metadata":{"reference":"Centroid","display_name":"Centroid","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Centroid Type","input_description":""}}],"output_names":["DVec2"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,109]}}},"network_metadata":null}}],[12353675714904258944,{"persistent_metadata":{"reference":"Merge","display_name":"Nose Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[804622576568168609,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2124231869409556689,{"persistent_metadata":{"reference":"To Graphic","display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17740294143355019755,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9135110142507605216,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16306737306999003555,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139765080256493579,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,138]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17740496701763775226,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12494428953087324640,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5488285068107445023,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5556372312033787775,{"persistent_metadata":{"reference":"Bounding Box","display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,96]}}},"network_metadata":null}}],[17285637344898461972,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,81]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14684142559936015947,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2025899804080897524,{"persistent_metadata":{"reference":"Merge","display_name":"Face White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1627123781166851142,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Corner Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18068340617333437755,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17056531964793634106,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13353438235848911576,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11264395591110193456,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-78,93]}}},"network_metadata":null}}],[11301831865756336526,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1009114585722052052,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,57]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17299978721726771610,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,106]}}},"network_metadata":null}}],[11210964267417873667,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","unit":" px","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139129879376457893,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5014806436727666175,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18003287685830153881,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,72]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10286817149456341619,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16304636129468583592,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,135]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7252918969430566594,{"persistent_metadata":{"reference":"Multiply","display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,107]}}},"network_metadata":null}}],[4631655038168471552,{"persistent_metadata":{"reference":"Bounding Box","display_name":"Bounding Box","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,103]}}},"network_metadata":null}}],[9563008199132558110,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17495267820524300686,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","unit":"x","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8863346544623578893,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,90]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6484183251661832039,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,93]}}},"network_metadata":null}}],[8566844905246185636,{"persistent_metadata":{"reference":"Merge","display_name":"Mouth Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13646498613066619660,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,118]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2880630606834119505,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6616450276140292763,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1662641269094032596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8426490990601560741,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3079923906392020295,{"persistent_metadata":{"reference":"To Graphic","display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17271572793812678706,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6726954210929537972,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14950060858756810933,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,60]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13739729101529293427,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14257963317028524134,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18095952297474762348,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10080296672372912698,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1001728975241745659,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13027689870767713939,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2723198387862533596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15692102598187739001,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,57]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18188505856445531484,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8511737864852441844,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9071802450034150503,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1508440849951861669,{"persistent_metadata":{"reference":"Merge","display_name":"Face Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[682567808439406093,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3050731459444225191,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4301099429811409147,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10063704933309776584,{"persistent_metadata":{"reference":"Multiply","display_name":"Multiply","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplier","input_description":"The left-hand side of the multiplication operation.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Multiplicand","input_description":"The right-hand side of the multiplication operation.\n"}}],"output_names":["f64"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,101]}}},"network_metadata":null}}],[6194305264313730032,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11373527190663101881,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8460565235419043665,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[876963243827503916,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Red","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4102754869474520966,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15433707377961038695,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12145355397916841389,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12276520439585231336,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13670206802546093234,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13916027199283115943,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13446205009526451196,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15930698052919171086,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16785043320296790229,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7755499790391969923,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14228923746783465609,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,135]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8297015715799006244,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16759836951269190891,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9808637865669223270,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[392274448837115448,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"y":"Y","unit":" px","x":"X"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","y":"H","x":"W"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5877930116725120460,{"persistent_metadata":{"reference":"Merge","display_name":"Rear Eyelash","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16609137733952262762,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13203761224559198689,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17131529656312051452,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15877481873925059044,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","x":"W","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6852799892628327372,{"persistent_metadata":{"reference":"Merge","display_name":"Head Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14516211820212764316,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7651693425519490419,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Blue","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2185437945364824599,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left White","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1491840484128555837,{"persistent_metadata":{"reference":"Merge","display_name":"Face Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17562801632450633291,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12922148192688274227,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[57390435731316553,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4560146526699152877,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4807760870555738383,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Main Orange","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7667878689218439065,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13795432594059356320,{"persistent_metadata":{"reference":"Flatten Path","display_name":"Flatten Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17952673493105230490,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,133]}}},"network_metadata":null}}],[15900830679378240619,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7201841978411396053,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12867379765049504290,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4809200889774783438,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5954536408321808728,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[140396870212231820,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6445954214067437701,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2287485748649359627,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7018444885869143173,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black - Dots","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12770183061753030023,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6728362629909402903,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7480253252288032958,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11196821089257149774,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[294265135510952894,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,93]}}},"network_metadata":null}}],[4261249487994076490,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13340751444307201866,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2871608309888343463,{"persistent_metadata":{"reference":"Repeat","display_name":"Repeat","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Direction","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Angle","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instances","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17397123104674848450,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Operation","input_description":"TODO"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[866.5700198973645,-2549.4579096366515],"tilt":0.0,"zoom":0.6666666666666666,"flip":false},"node_graph_to_viewport":[0.6666666666666666,0.0,0.0,0.6666666666666666,1568.0,-1119.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[3410481056630111806],[1097494158696050491],[3410481056630111806],[11684705487012407227],[],[294265135510952894],[],[],[],[13340751444307201866],[3765280235392282097],[3765280235392282097],[],[13795432594059356320],[],[2871608309888343463],[2871608309888343463,12494428953087324640],[3765280235392282097,12494428953087324640,2871608309888343463],[8511737864852441844,2871608309888343463,12494428953087324640,3765280235392282097],[],[13795432594059356320],[],[12494428953087324640,2871608309888343463],[2871608309888343463,3765280235392282097,12494428953087324640],[12494428953087324640,2871608309888343463,3765280235392282097,8511737864852441844],[],[3765280235392282097],[],[],[13616602029989984195],[],[],[],[16780039553038473906],[7104088139635280554],[],[],[7104088139635280554],[],[7104088139635280554],[],[],[16785043320296790229],[6503655938154160104],[17696051535511578981],[6503655938154160104],[17696051535511578981],[9071802450034150503],[],[17696051535511578981],[6503655938154160104],[],[18031616785650843168],[17952673493105230490],[],[4328376070224119511],[18031616785650843168,3750439930725791025,13446205009526451196,7201841978411396053,17735408893002232096,11196821089257149774,13027689870767713939,17952673493105230490,14228923746783465609,4328376070224119511],[13027689870767713939,16609137733952262762,12276520439585231336,13795432594059356320,7201841978411396053,17740496701763775226,13340751444307201866,5888633415105234509,17735408893002232096,9135110142507605216,3750439930725791025,11196821089257149774,17397123104674848450,13446205009526451196,4328376070224119511,14228923746783465609,1662641269094032596,18031616785650843168,17952673493105230490],[5888633415105234509,17740496701763775226,14228923746783465609,12276520439585231336,18031616785650843168,16306737306999003555,6852799892628327372,17952673493105230490,3750439930725791025,16671141883125519098,13446205009526451196,11196821089257149774,1662641269094032596,9135110142507605216,17397123104674848450,3214181946162459584,13027689870767713939,16609137733952262762,7201841978411396053,13795432594059356320,17735408893002232096,2871608309888343463,4328376070224119511,2025899804080897524,13340751444307201866],[17952673493105230490,13027689870767713939,13646498613066619660,14139765080256493579,3214181946162459584,13795432594059356320,1662641269094032596,16671141883125519098,17740496701763775226,16306737306999003555,17735408893002232096,14228923746783465609,4328376070224119511,12276520439585231336,9135110142507605216,11196821089257149774,2025899804080897524,17397123104674848450,5888633415105234509,7201841978411396053,16609137733952262762,2871608309888343463,16304636129468583592,13446205009526451196,17131529656312051452,8566844905246185636,5449860184735415958,3750439930725791025,18031616785650843168,12494428953087324640,12741076678082295759,6852799892628327372,13340751444307201866],[3750439930725791025,5888633415105234509,18031616785650843168,12494428953087324640,13340751444307201866,16306737306999003555,17952673493105230490,17397123104674848450,13795432594059356320,12741076678082295759,7201841978411396053,9135110142507605216,3214181946162459584,2871608309888343463,6852799892628327372,13646498613066619660,17740496701763775226,17131529656312051452,16671141883125519098,13446205009526451196,12276520439585231336,14139765080256493579,14228923746783465609,5449860184735415958,4328376070224119511,16609137733952262762,17735408893002232096,16304636129468583592,8566844905246185636,1662641269094032596,2025899804080897524,11196821089257149774,13027689870767713939,8511737864852441844],[13340751444307201866,5888633415105234509,14139765080256493579,8566844905246185636,13795432594059356320,16609137733952262762,5449860184735415958,13027689870767713939,6852799892628327372,3750439930725791025,8511737864852441844,11196821089257149774,12494428953087324640,17131529656312051452,16306737306999003555,2834866505092039323,17735408893002232096,13646498613066619660,18031616785650843168,12276520439585231336,17740496701763775226,3214181946162459584,12741076678082295759,16671141883125519098,9135110142507605216,14228923746783465609,2871608309888343463,16304636129468583592,2025899804080897524,17397123104674848450,17952673493105230490,1662641269094032596,7201841978411396053,13446205009526451196,4328376070224119511],[9135110142507605216,12276520439585231336,2871608309888343463,1508440849951861669,2025899804080897524,7201841978411396053,11196821089257149774,17740496701763775226,13446205009526451196,6852799892628327372,3214181946162459584,1662641269094032596,4328376070224119511,12741076678082295759,13340751444307201866,13795432594059356320,16671141883125519098,14139765080256493579,5888633415105234509,17735408893002232096,18031616785650843168,17131529656312051452,13027689870767713939,8566844905246185636,17952673493105230490,2834866505092039323,5449860184735415958,16304636129468583592,16609137733952262762,16306737306999003555,17397123104674848450,13646498613066619660,14228923746783465609,3750439930725791025,12494428953087324640,8511737864852441844],[17397123104674848450,13340751444307201866,12494428953087324640,13446205009526451196,3214181946162459584,17131529656312051452,16609137733952262762,16306737306999003555,12276520439585231336,2871608309888343463,4328376070224119511,16304636129468583592,17740496701763775226,7201841978411396053,2834866505092039323,9135110142507605216,8511737864852441844,5888633415105234509,13795432594059356320,17952673493105230490,7480253252288032958,11196821089257149774,5449860184735415958,14228923746783465609,3750439930725791025,13027689870767713939,17735408893002232096,1508440849951861669,8566844905246185636,18031616785650843168,13646498613066619660,14139765080256493579,7104261880154687267,2025899804080897524,12741076678082295759,1662641269094032596,6852799892628327372,16671141883125519098],[17952673493105230490,7104261880154687267,18031616785650843168,8566844905246185636,17735408893002232096,7201841978411396053,12741076678082295759,5449860184735415958,16609137733952262762,1662641269094032596,3214181946162459584,11196821089257149774,1508440849951861669,13340751444307201866,13446205009526451196,8511737864852441844,9135110142507605216,6852799892628327372,3750439930725791025,13795432594059356320,4328376070224119511,17131529656312051452,16304636129468583592,16306737306999003555,17740496701763775226,12494428953087324640,17397123104674848450,16671141883125519098,5888633415105234509,12276520439585231336,2834866505092039323,7480253252288032958,18095952297474762348,13646498613066619660,2871608309888343463,2025899804080897524,14228923746783465609,14139765080256493579,13027689870767713939],[1491840484128555837,7104261880154687267,17397123104674848450,8511737864852441844,13446205009526451196,13795432594059356320,14228923746783465609,7480253252288032958,2025899804080897524,17735408893002232096,16306737306999003555,17740496701763775226,12741076678082295759,13646498613066619660,4328376070224119511,12276520439585231336,18031616785650843168,3750439930725791025,3214181946162459584,2871608309888343463,5888633415105234509,16304636129468583592,13340751444307201866,1662641269094032596,11196821089257149774,5449860184735415958,16671141883125519098,13027689870767713939,17952673493105230490,6852799892628327372,17131529656312051452,14139765080256493579,1508440849951861669,18095952297474762348,8566844905246185636,12494428953087324640,16609137733952262762,2834866505092039323,9135110142507605216,7201841978411396053],[13027689870767713939,8511737864852441844,2871608309888343463,3214181946162459584,14228923746783465609,9808637865669223270,1508440849951861669,12494428953087324640,7201841978411396053,16671141883125519098,13340751444307201866,140396870212231820,1491840484128555837,13446205009526451196,14139765080256493579,5888633415105234509,2834866505092039323,7480253252288032958,17397123104674848450,17740496701763775226,1662641269094032596,18095952297474762348,16306737306999003555,16304636129468583592,17735408893002232096,12276520439585231336,16609137733952262762,4328376070224119511,13795432594059356320,7104261880154687267,5449860184735415958,17131529656312051452,13646498613066619660,6852799892628327372,3750439930725791025,2025899804080897524,9135110142507605216,5954536408321808728,11196821089257149774,12741076678082295759,8566844905246185636,17952673493105230490,18031616785650843168],[7252918969430566594,15877481873925059044,4261249487994076490,5534800796196967885,17036604842139972912],[5534800796196967885,11210964267417873667,4261249487994076490,17036604842139972912,2124231869409556689,7252918969430566594,14516211820212764316,15877481873925059044],[17036604842139972912,4261249487994076490,11210964267417873667,3608604157153838227,15877481873925059044,5534800796196967885,2124231869409556689,14516211820212764316,7252918969430566594],[14516211820212764316,4261249487994076490,11210964267417873667,7252918969430566594,15877481873925059044,17036604842139972912,5534800796196967885,3608604157153838227,2124231869409556689,17299978721726771610],[7252918969430566594,11210964267417873667,15877481873925059044,3608604157153838227,4261249487994076490,2124231869409556689,17299978721726771610,7029437790788498388,5534800796196967885,14516211820212764316,17036604842139972912],[4261249487994076490,17036604842139972912,5534800796196967885,17299978721726771610,7252918969430566594,3608604157153838227,14516211820212764316,11210964267417873667,1809704172129195322,2124231869409556689,15877481873925059044,7029437790788498388],[57390435731316553,13838011362258067867,17056531964793634106,4631655038168471552,13588160462734303101,10063704933309776584],[3410481056630111806,13838011362258067867,990192925663920333,57390435731316553,4631655038168471552,8460565235419043665,10063704933309776584,3079923906392020295,13588160462734303101,4301099429811409147,17056531964793634106],[57390435731316553,1097494158696050491,3410481056630111806,990192925663920333,8460565235419043665,13588160462734303101,13838011362258067867,17056531964793634106,4631655038168471552,3079923906392020295,4301099429811409147,10063704933309776584],[13588160462734303101],[4301099429811409147,8460565235419043665,13588160462734303101,57390435731316553],[3079923906392020295,17056531964793634106,4301099429811409147,8460565235419043665,57390435731316553,13588160462734303101],[57390435731316553,13588160462734303101,4301099429811409147,10063704933309776584,3079923906392020295,8460565235419043665,17056531964793634106],[4301099429811409147,990192925663920333,10063704933309776584,57390435731316553,17056531964793634106,3079923906392020295,8460565235419043665,13588160462734303101],[3410481056630111806,57390435731316553,990192925663920333,13588160462734303101,10063704933309776584,8460565235419043665,3079923906392020295,4301099429811409147,17056531964793634106],[3410481056630111806,13588160462734303101,57390435731316553,3079923906392020295,17056531964793634106,10063704933309776584,4301099429811409147,1097494158696050491,990192925663920333,8460565235419043665],[17056531964793634106,4631655038168471552,10063704933309776584,3410481056630111806,8460565235419043665,3079923906392020295,990192925663920333,1097494158696050491,13838011362258067867,13588160462734303101,4301099429811409147,57390435731316553],[11210964267417873667,4261249487994076490,14516211820212764316,17036604842139972912],[14516211820212764316,7252918969430566594,4261249487994076490,15877481873925059044,17036604842139972912,2124231869409556689,11210964267417873667],[7252918969430566594,17299978721726771610,15877481873925059044,4261249487994076490,17036604842139972912,11210964267417873667,14516211820212764316,2124231869409556689],[4261249487994076490,15877481873925059044,14516211820212764316,7252918969430566594,17299978721726771610,11210964267417873667,17036604842139972912,7029437790788498388,2124231869409556689],[15877481873925059044,7252918969430566594,4261249487994076490,17036604842139972912,17299978721726771610,1809704172129195322,7029437790788498388,2124231869409556689,11210964267417873667,14516211820212764316],[2124231869409556689,5534800796196967885,7029437790788498388,7252918969430566594,14516211820212764316,4261249487994076490,11210964267417873667,15877481873925059044,17299978721726771610,3608604157153838227,1809704172129195322,17036604842139972912],[17299978721726771610,4261249487994076490,1809704172129195322,7029437790788498388,14516211820212764316,11210964267417873667,15877481873925059044,17036604842139972912,7252918969430566594,2124231869409556689],[14516211820212764316,15877481873925059044,17299978721726771610,7252918969430566594,17036604842139972912,1809704172129195322,5534800796196967885,7029437790788498388,4261249487994076490,11210964267417873667,2124231869409556689,3608604157153838227],[4328376070224119511],[13340751444307201866,6852799892628327372,14228923746783465609,2871608309888343463,11196821089257149774,9135110142507605216,17740496701763775226,12276520439585231336,2025899804080897524,3750439930725791025,1662641269094032596,5888633415105234509,4328376070224119511,17735408893002232096,7201841978411396053,17397123104674848450,13795432594059356320,18031616785650843168,16609137733952262762,13027689870767713939,17952673493105230490,3214181946162459584,16671141883125519098,16306737306999003555,13446205009526451196],[3750439930725791025,12741076678082295759,7201841978411396053,7480253252288032958,13446205009526451196,3214181946162459584,13340751444307201866,13646498613066619660,14139765080256493579,6852799892628327372,16306737306999003555,4328376070224119511,8566844905246185636,7104261880154687267,12494428953087324640,5449860184735415958,1662641269094032596,17740496701763775226,17952673493105230490,16304636129468583592,2025899804080897524,9135110142507605216,2871608309888343463,18031616785650843168,2834866505092039323,13027689870767713939,13795432594059356320,12276520439585231336,11196821089257149774,17397123104674848450,16609137733952262762,17131529656312051452,14228923746783465609,16671141883125519098,5888633415105234509,8511737864852441844,17735408893002232096,1508440849951861669],[17131529656312051452,16306737306999003555,12276520439585231336,17735408893002232096,18095952297474762348,7201841978411396053,17740496701763775226,14139765080256493579,13795432594059356320,8511737864852441844,4328376070224119511,6852799892628327372,5449860184735415958,140396870212231820,14228923746783465609,13446205009526451196,11196821089257149774,9808637865669223270,1508440849951861669,13027689870767713939,1491840484128555837,5954536408321808728,17397123104674848450,9135110142507605216,2871608309888343463,18031616785650843168,2834866505092039323,3214181946162459584,3750439930725791025,1662641269094032596,13646498613066619660,16304636129468583592,8566844905246185636,7480253252288032958,5888633415105234509,2025899804080897524,12741076678082295759,16671141883125519098,12494428953087324640,17952673493105230490,16609137733952262762,7104261880154687267,13340751444307201866],[17036604842139972912],[13588160462734303101],[18081743490344004315],[]],"selection_redo_history":[]}}},"collapsed":[],"commit_hash":"3a591dac6a53454813c8df6ceed5b44b91d1e816","document_ptz":{"pan":[-768.2748744089959,-384.56142660725646],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/parametric-dunescape.graphite b/demo-artwork/parametric-dunescape.graphite index 84b2815ea5..0e9c3114b4 100644 --- a/demo-artwork/parametric-dunescape.graphite +++ b/demo-artwork/parametric-dunescape.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":4445985685181725042,"output_index":0,"lambda":false}}],"nodes":[[17154757625902243313,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.23529412,"green":0.23529412,"blue":0.24313726,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1670.79570439},"exposed":false}},{"Value":{"tagged_value":{"F64":24.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":757876048866560520,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1357621220363171879,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[1357621220363171879,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[757876048866560520,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3683309254695891012,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.68235296,"green":0.5372549,"blue":0.4627451,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1485.34393334},"exposed":false}},{"Value":{"tagged_value":{"F64":225.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[3916070947050514908,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3916070947050514908,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":10720574559271598132,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[10720574559271598132,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13644002059194136823,{"inputs":[{"Node":{"node_id":17437077810654043142,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":5.599999999999968},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[4037968351431607570,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8666667,"green":0.69803923,"blue":0.56078434,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1442.36628417},"exposed":false}},{"Value":{"tagged_value":{"F64":318.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[11874141024063691837,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":11874141024063691837,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7807438675023750219,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7807438675023750219,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13323241418027154136,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.18039216,"green":0.19215687,"blue":0.21960784,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1733.30579952},"exposed":false}},{"Value":{"tagged_value":{"F64":77.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16504069171520924548,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[3434804841107735149,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":3434804841107735149,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[16504069171520924548,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12110920487474373676,{"inputs":[{"Node":{"node_id":12639486733043466090,"output_index":0,"lambda":false}},{"Node":{"node_id":13323241418027154136,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4390668436091073484,{"inputs":[{"Node":{"node_id":13676600738025998635,"output_index":0,"lambda":false}},{"Node":{"node_id":12122314434656187176,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10806978668166337270,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.21176471,"green":0.21568628,"blue":0.23137255,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1579.30304164},"exposed":false}},{"Value":{"tagged_value":{"F64":142.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[9133354469966676056,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3765311973789472189,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9133354469966676056,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[3765311973789472189,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5883606306991910210,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.4862745,"green":0.43137255,"blue":0.39607844,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1524.31304726},"exposed":false}},{"Value":{"tagged_value":{"F64":175.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[16598825029377599083,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16598825029377599083,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[6686718746443793247,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":6686718746443793247,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13132104524813958174,{"inputs":[{"Node":{"node_id":4390668436091073484,"output_index":0,"lambda":false}},{"Node":{"node_id":2163528024003768644,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12416569579970107543,{"inputs":[{"Node":{"node_id":13644002059194136823,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[9069881382900058607,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4037968351431607570,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12639486733043466090,{"inputs":[{"Node":{"node_id":8804763001225416124,"output_index":0,"lambda":false}},{"Node":{"node_id":1801066723091712434,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7128559142392931896,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.15686275,"green":0.16862746,"blue":0.1882353,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1803.43646796},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":10094915787292727725,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[18443039976647938912,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[10094915787292727725,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18443039976647938912,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17327221498641745184,{"inputs":[{"Node":{"node_id":12317719117993811200,"output_index":0,"lambda":false}},{"Node":{"node_id":3683309254695891012,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7711570794020903773,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8784314,"green":0.49019608,"blue":0.36862746,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1513.3360814},"exposed":false}},{"Value":{"tagged_value":{"F64":22.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[3025883099767376126,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3025883099767376126,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[1126802566044359983,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1126802566044359983,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10686861494573327243,{"inputs":[{"Node":{"node_id":11386926595254122633,"output_index":0,"lambda":false}},{"Node":{"node_id":10806978668166337270,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17589660903986237301,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9529412,"green":0.6431373,"blue":0.42352942,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1614.38741737},"exposed":false}},{"Value":{"tagged_value":{"F64":17.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[3289411516263327806,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3289411516263327806,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":12029121808718862100,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[12029121808718862100,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2163528024003768644,{"inputs":[{"Node":{"node_id":12110920487474373676,"output_index":0,"lambda":false}},{"Node":{"node_id":7128559142392931896,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6523786079462141312,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.85882354,"green":0.57254905,"blue":0.43529412,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1491.01593158},"exposed":false}},{"Value":{"tagged_value":{"F64":173.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[7783268010546120518,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16009834030113172488,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7783268010546120518,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[16009834030113172488,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11386926595254122633,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6523786079462141312,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15002088321732485705,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1343.63187023},"exposed":false}},{"Value":{"tagged_value":{"F64":349.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":15212962088799153943,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":8591396027454826376,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[15212962088799153943,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8591396027454826376,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3934928477288442109,{"inputs":[{"Node":{"node_id":239716716021064150,"output_index":0,"lambda":false}},{"Node":{"node_id":17589660903986237301,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16611856724057842399,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.23529412,"green":0.23529412,"blue":0.24313726,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1554.40785539},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[17232801702996970986,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9065988052616974602,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":17232801702996970986,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9065988052616974602,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3726756269632080543,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5254902,"green":0.45882353,"blue":0.41568628,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1465.6573046},"exposed":false}},{"Value":{"tagged_value":{"F64":230.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[5294703684886212416,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7419291594083587754,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":5294703684886212416,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7419291594083587754,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1801066723091712434,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.21176471,"green":0.21568628,"blue":0.23137255,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1744.31393592},"exposed":false}},{"Value":{"tagged_value":{"F64":63.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":14514477720912258595,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18341697272814101120,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[18341697272814101120,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14514477720912258595,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12317719117993811200,{"inputs":[{"Node":{"node_id":9069881382900058607,"output_index":0,"lambda":false}},{"Node":{"node_id":17239043462037837834,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8804763001225416124,{"inputs":[{"Node":{"node_id":3934928477288442109,"output_index":0,"lambda":false}},{"Node":{"node_id":17154757625902243313,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17239043462037837834,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8039216,"green":0.6627451,"blue":0.52156866,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":1447.11050605},"exposed":false}},{"Value":{"tagged_value":{"F64":309.0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0,"lambda":false}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0,"lambda":false}},{"Node":{"node_id":14577956936089455769,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7260397085903590160,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":7260397085903590160,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[15937218612227302315,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::CoordinateValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":15937218612227302315,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2128810469968776913,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":12416569579970107543,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[239716716021064150,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7711570794020903773,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15385259560644295534,{"inputs":[{"Node":{"node_id":17327221498641745184,"output_index":0,"lambda":false}},{"Node":{"node_id":3726756269632080543,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4445985685181725042,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13132104524813958174,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.99607843,"green":0.8745098,"blue":0.7019608,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12122314434656187176,{"inputs":[{"Node":{"node_id":10686861494573327243,"output_index":0,"lambda":false}},{"Node":{"node_id":16611856724057842399,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13676600738025998635,{"inputs":[{"Node":{"node_id":2128810469968776913,"output_index":0,"lambda":false}},{"Node":{"node_id":6097807941755042226,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6097807941755042226,{"inputs":[{"Node":{"node_id":15385259560644295534,"output_index":0,"lambda":false}},{"Node":{"node_id":5883606306991910210,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17437077810654043142,{"inputs":[{"Node":{"node_id":15002088321732485705,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"U32":40},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[2128810469968776913,{"persistent_metadata":{"reference":"Merge","display_name":"Far Mountains","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":16}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[239716716021064150,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12639486733043466090,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17154757625902243313,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1357621220363171879,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[757876048866560520,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[12416569579970107543,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12110920487474373676,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4445985685181725042,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[3,0]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9069881382900058607,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 5","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17589660903986237301,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[12029121808718862100,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[3289411516263327806,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[3726756269632080543,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[7419291594083587754,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[5294703684886212416,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[7128559142392931896,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[10094915787292727725,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18443039976647938912,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.33333333333328596,-0.3333333333333428],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,580.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[10094915787292727725]],"selection_redo_history":[]}}}}],[10806978668166337270,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[9133354469966676056,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3765311973789472189,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[13132104524813958174,{"persistent_metadata":{"reference":"Merge","display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7711570794020903773,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1126802566044359983,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[3025883099767376126,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[12122314434656187176,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,27]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11386926595254122633,{"persistent_metadata":{"reference":"Merge","display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1801066723091712434,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14514477720912258595,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18341697272814101120,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[17.0,-79.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1008.0,502.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[6523786079462141312,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[16009834030113172488,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7783268010546120518,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[13323241418027154136,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[16504069171520924548,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[3434804841107735149,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[26.0,-82.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1017.0,499.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[3934928477288442109,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15002088321732485705,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[8591396027454826376,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[15212962088799153943,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[10686861494573327243,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4390668436091073484,{"persistent_metadata":{"reference":"Merge","display_name":"Midground in Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":18}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3683309254695891012,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[10720574559271598132,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[3916070947050514908,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[17239043462037837834,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[7260397085903590160,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15937218612227302315,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[13676600738025998635,{"persistent_metadata":{"reference":"Merge","display_name":"Background","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17437077810654043142,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6097807941755042226,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,40]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2163528024003768644,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17327221498641745184,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[95.5,23.5],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1086.0,604.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13644002059194136823,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15385259560644295534,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8804763001225416124,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16611856724057842399,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[9065988052616974602,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[17232801702996970986,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[12317719117993811200,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5883606306991910210,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6686718746443793247,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16598825029377599083,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[4037968351431607570,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[7807438675023750219,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Coordinate Value","display_name":"Coordinate Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[11874141024063691837,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[393.8840949272409,-703.048313613491],"tilt":0.0,"zoom":0.7533811475409836,"flip":false},"node_graph_to_viewport":[0.7533811475409836,0.0,0.0,0.7533811475409836,1287.0,51.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[17327221498641745184],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[6097807941755042226,5883606306991910210,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[2128810469968776913],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[15385259560644295534],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[13676600738025998635],[2128810469968776913],[11435147660766496741],[15726496377243608372],[4390668436091073484],[11386926595254122633],[11435147660766496741],[15726496377243608372],[15726496377243608372,11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741,15726496377243608372,4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741,2163528024003768644,7128559142392931896,12110920487474373676,13323241418027154136,12639486733043466090,1801066723091712434,8804763001225416124,17154757625902243313,4390668436091073484,12122314434656187176,16611856724057842399,10686861494573327243,10806978668166337270,11386926595254122633,6523786079462141312,13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[15726496377243608372],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,12122314434656187176,16611856724057842399,10686861494573327243,10806978668166337270,11386926595254122633,6523786079462141312,13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[13132104524813958174],[11435147660766496741],[2163528024003768644],[12110920487474373676],[12639486733043466090],[8804763001225416124],[11435147660766496741],[15726496377243608372],[3934928477288442109],[239716716021064150],[15726496377243608372],[15726496377243608372,11435147660766496741],[239716716021064150],[239716716021064150,7711570794020903773],[239716716021064150,3934928477288442109],[4390668436091073484],[12122314434656187176],[10686861494573327243],[11386926595254122633],[4390668436091073484],[13676600738025998635,2128810469968776913],[13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11386926595254122633],[13676600738025998635],[6097807941755042226],[15385259560644295534],[17327221498641745184],[12317719117993811200],[9069881382900058607],[2128810469968776913],[13132104524813958174],[2128810469968776913],[13132104524813958174],[2163528024003768644],[239716716021064150],[3934928477288442109],[8804763001225416124],[12639486733043466090],[12110920487474373676],[2163528024003768644],[4390668436091073484],[13676600738025998635],[2128810469968776913],[2163528024003768644],[9069881382900058607],[12317719117993811200,9069881382900058607],[17327221498641745184,12317719117993811200,9069881382900058607],[15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[12317719117993811200,15385259560644295534,9069881382900058607,17327221498641745184,6097807941755042226],[17327221498641745184,12317719117993811200,11386926595254122633,6097807941755042226,9069881382900058607,15385259560644295534],[9069881382900058607,6097807941755042226,10686861494573327243,15385259560644295534,11386926595254122633,12317719117993811200,17327221498641745184],[10686861494573327243,15385259560644295534,12122314434656187176,11386926595254122633,9069881382900058607,6097807941755042226,12317719117993811200,17327221498641745184],[12122314434656187176,6097807941755042226,11386926595254122633,12317719117993811200,17327221498641745184,10686861494573327243,239716716021064150,15385259560644295534,9069881382900058607],[9069881382900058607,239716716021064150,6097807941755042226,12122314434656187176,12317719117993811200,10686861494573327243,15385259560644295534,17327221498641745184,11386926595254122633,3934928477288442109],[9069881382900058607,13676600738025998635,3934928477288442109,12122314434656187176,6097807941755042226,15385259560644295534,4390668436091073484,10686861494573327243,17327221498641745184,11386926595254122633,12317719117993811200,239716716021064150],[6097807941755042226,3934928477288442109,4390668436091073484,9069881382900058607,13676600738025998635,11386926595254122633,15385259560644295534,12122314434656187176,8804763001225416124,10686861494573327243,239716716021064150,12317719117993811200,17327221498641745184],[9069881382900058607,12122314434656187176,13676600738025998635,10686861494573327243,12317719117993811200,6097807941755042226,15385259560644295534,239716716021064150,17327221498641745184,11386926595254122633,3934928477288442109,8804763001225416124,12639486733043466090,4390668436091073484],[10686861494573327243,15385259560644295534,17327221498641745184,239716716021064150,8804763001225416124,6097807941755042226,11386926595254122633,12317719117993811200,12122314434656187176,9069881382900058607,3934928477288442109,12639486733043466090],[10686861494573327243,17327221498641745184,12317719117993811200,11386926595254122633,12639486733043466090,12122314434656187176,9069881382900058607,6097807941755042226,12110920487474373676,3934928477288442109,15385259560644295534,8804763001225416124,239716716021064150],[12110920487474373676,10686861494573327243,11386926595254122633,12317719117993811200,8804763001225416124,3934928477288442109,9069881382900058607,15385259560644295534,2163528024003768644,17327221498641745184,239716716021064150,12639486733043466090,12122314434656187176,6097807941755042226],[2128810469968776913],[17327221498641745184],[]],"selection_redo_history":[]}}},"collapsed":[4390668436091073485,13676600738025998636,13132104524813958175],"name":"parametric-dunescape.graphite","commit_hash":"c4e16e1aac642bbcde72f41f86deed79e6e38006","document_ptz":{"pan":[-999.515765085624,-500.18277881031514],"tilt":0.0,"zoom":0.940975,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":4445985685181725042,"output_index":0}}],"nodes":[[17154757625902243313,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.23529412,"green":0.23529412,"blue":0.24313726,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1670.79570439},"exposed":false}},{"Value":{"tagged_value":{"F64":24.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":757876048866560520,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1357621220363171879,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[1357621220363171879,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[757876048866560520,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3683309254695891012,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.68235296,"green":0.5372549,"blue":0.4627451,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1485.34393334},"exposed":false}},{"Value":{"tagged_value":{"F64":225.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[3916070947050514908,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3916070947050514908,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":10720574559271598132,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[10720574559271598132,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13644002059194136823,{"inputs":[{"Node":{"node_id":17437077810654043142,"output_index":0}},{"Value":{"tagged_value":{"F64":5.599999999999968},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[4037968351431607570,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8666667,"green":0.69803923,"blue":0.56078434,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1442.36628417},"exposed":false}},{"Value":{"tagged_value":{"F64":318.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[11874141024063691837,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":11874141024063691837,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7807438675023750219,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7807438675023750219,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13323241418027154136,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.18039216,"green":0.19215687,"blue":0.21960784,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1733.30579952},"exposed":false}},{"Value":{"tagged_value":{"F64":77.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16504069171520924548,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[3434804841107735149,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":3434804841107735149,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[16504069171520924548,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12110920487474373676,{"inputs":[{"Node":{"node_id":12639486733043466090,"output_index":0}},{"Node":{"node_id":13323241418027154136,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4390668436091073484,{"inputs":[{"Node":{"node_id":13676600738025998635,"output_index":0}},{"Node":{"node_id":12122314434656187176,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10806978668166337270,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.21176471,"green":0.21568628,"blue":0.23137255,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1579.30304164},"exposed":false}},{"Value":{"tagged_value":{"F64":142.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[9133354469966676056,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3765311973789472189,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9133354469966676056,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[3765311973789472189,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5883606306991910210,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.4862745,"green":0.43137255,"blue":0.39607844,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1524.31304726},"exposed":false}},{"Value":{"tagged_value":{"F64":175.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[16598825029377599083,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16598825029377599083,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[6686718746443793247,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":6686718746443793247,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13132104524813958174,{"inputs":[{"Node":{"node_id":4390668436091073484,"output_index":0}},{"Node":{"node_id":2163528024003768644,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12416569579970107543,{"inputs":[{"Node":{"node_id":13644002059194136823,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[9069881382900058607,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4037968351431607570,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12639486733043466090,{"inputs":[{"Node":{"node_id":8804763001225416124,"output_index":0}},{"Node":{"node_id":1801066723091712434,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7128559142392931896,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.15686275,"green":0.16862746,"blue":0.1882353,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1803.43646796},"exposed":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":10094915787292727725,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[18443039976647938912,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[10094915787292727725,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18443039976647938912,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17327221498641745184,{"inputs":[{"Node":{"node_id":12317719117993811200,"output_index":0}},{"Node":{"node_id":3683309254695891012,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7711570794020903773,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8784314,"green":0.49019608,"blue":0.36862746,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1513.3360814},"exposed":false}},{"Value":{"tagged_value":{"F64":22.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[3025883099767376126,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3025883099767376126,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[1126802566044359983,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":1126802566044359983,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10686861494573327243,{"inputs":[{"Node":{"node_id":11386926595254122633,"output_index":0}},{"Node":{"node_id":10806978668166337270,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17589660903986237301,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9529412,"green":0.6431373,"blue":0.42352942,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1614.38741737},"exposed":false}},{"Value":{"tagged_value":{"F64":17.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[3289411516263327806,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":3289411516263327806,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":12029121808718862100,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[12029121808718862100,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2163528024003768644,{"inputs":[{"Node":{"node_id":12110920487474373676,"output_index":0}},{"Node":{"node_id":7128559142392931896,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6523786079462141312,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.85882354,"green":0.57254905,"blue":0.43529412,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1491.01593158},"exposed":false}},{"Value":{"tagged_value":{"F64":173.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[7783268010546120518,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":16009834030113172488,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7783268010546120518,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[16009834030113172488,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11386926595254122633,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6523786079462141312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15002088321732485705,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1343.63187023},"exposed":false}},{"Value":{"tagged_value":{"F64":349.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":15212962088799153943,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":8591396027454826376,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[15212962088799153943,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8591396027454826376,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3934928477288442109,{"inputs":[{"Node":{"node_id":239716716021064150,"output_index":0}},{"Node":{"node_id":17589660903986237301,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16611856724057842399,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.23529412,"green":0.23529412,"blue":0.24313726,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1554.40785539},"exposed":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[17232801702996970986,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9065988052616974602,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":17232801702996970986,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":9065988052616974602,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3726756269632080543,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5254902,"green":0.45882353,"blue":0.41568628,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1465.6573046},"exposed":false}},{"Value":{"tagged_value":{"F64":230.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[5294703684886212416,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7419291594083587754,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":5294703684886212416,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":7419291594083587754,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1801066723091712434,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.21176471,"green":0.21568628,"blue":0.23137255,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1744.31393592},"exposed":false}},{"Value":{"tagged_value":{"F64":63.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11731553664207576737,{"inputs":[{"Node":{"node_id":14514477720912258595,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":18341697272814101120,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[18341697272814101120,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14514477720912258595,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12317719117993811200,{"inputs":[{"Node":{"node_id":9069881382900058607,"output_index":0}},{"Node":{"node_id":17239043462037837834,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8804763001225416124,{"inputs":[{"Node":{"node_id":3934928477288442109,"output_index":0}},{"Node":{"node_id":17154757625902243313,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17239043462037837834,{"inputs":[{"Value":{"tagged_value":"None","exposed":true}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8039216,"green":0.6627451,"blue":0.52156866,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":1447.11050605},"exposed":false}},{"Value":{"tagged_value":{"F64":309.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":2288754089236120499,"output_index":0}}],"nodes":[[11731553664207576737,{"inputs":[{"Node":{"node_id":7260397085903590160,"output_index":0}},{"Value":{"tagged_value":{"F64":48.900000000000006},"exposed":false}},{"Node":{"node_id":7828034197076821310,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}],[14158287945315818946,{"inputs":[{"Node":{"node_id":16943732999059587742,"output_index":0}},{"Node":{"node_id":14577956936089455769,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.6181095265062186,3.496297826945966]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.4855225354961647,0.31002285853371414]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7260397085903590160,{"inputs":[{"Node":{"node_id":1791308547102433540,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":800.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2288754089236120499,{"inputs":[{"Node":{"node_id":14158287945315818946,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[15937218612227302315,{"inputs":[{"Node":{"node_id":11731553664207576737,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":172.9},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7828034197076821310,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":3}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::ToU32Node"}},"visible":true,"skip_deduplication":false}],[640915213983348287,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4000.0},"exposed":false}},{"Value":{"tagged_value":{"F64":500.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::RectangleNode"}},"visible":true,"skip_deduplication":false}],[1791308547102433540,{"inputs":[{"Node":{"node_id":640915213983348287,"output_index":0}},{"Network":{"import_type":{"Generic":"T"},"import_index":1}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.827451,"blue":0.65882355,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14577956936089455769,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1050.10498991},"exposed":false}},{"Network":{"import_type":{"Generic":"T"},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_math_nodes::Vec2ValueNode"}},"visible":true,"skip_deduplication":false}],[16943732999059587742,{"inputs":[{"Node":{"node_id":15937218612227302315,"output_index":0}},{"Value":{"tagged_value":{"F64":1.399999999999956},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::JitterPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2128810469968776913,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":12416569579970107543,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[239716716021064150,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7711570794020903773,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15385259560644295534,{"inputs":[{"Node":{"node_id":17327221498641745184,"output_index":0}},{"Node":{"node_id":3726756269632080543,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4445985685181725042,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13132104524813958174,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[2000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.99607843,"green":0.8745098,"blue":0.7019608,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12122314434656187176,{"inputs":[{"Node":{"node_id":10686861494573327243,"output_index":0}},{"Node":{"node_id":16611856724057842399,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13676600738025998635,{"inputs":[{"Node":{"node_id":2128810469968776913,"output_index":0}},{"Node":{"node_id":6097807941755042226,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6097807941755042226,{"inputs":[{"Node":{"node_id":15385259560644295534,"output_index":0}},{"Node":{"node_id":5883606306991910210,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17437077810654043142,{"inputs":[{"Node":{"node_id":15002088321732485705,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"U32":40},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[13132104524813958174,{"persistent_metadata":{"reference":"Merge","display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13644002059194136823,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8804763001225416124,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6523786079462141312,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[16009834030113172488,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"mode":"Increment","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"mode":"Increment","blank_assist":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","min":0.0,"blank_assist":true,"unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[7783268010546120518,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"mode":"Increment","unit":" px","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"mode":"Increment","min":0.0,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[9069881382900058607,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 5","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4390668436091073484,{"persistent_metadata":{"reference":"Merge","display_name":"Midground in Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":18}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17327221498641745184,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2128810469968776913,{"persistent_metadata":{"reference":"Merge","display_name":"Far Mountains","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":16}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3934928477288442109,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[239716716021064150,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12122314434656187176,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,27]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13323241418027154136,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[16504069171520924548,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"unit":" px","mode":"Increment","min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","unit":"x","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[3434804841107735149,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"mode":"Increment","unit":" px","is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"is_integer":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","blank_assist":true,"is_integer":false,"min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[26.0,-82.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1017.0,499.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[2163528024003768644,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,6]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7128559142392931896,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[10094915787292727725,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","blank_assist":true,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","blank_assist":true,"is_integer":false,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[18443039976647938912,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","unit":" px","blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"unit":" px","blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.33333333333328596,-0.3333333333333428],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,580.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[10094915787292727725]],"selection_redo_history":[]}}}}],[12416569579970107543,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12110920487474373676,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11386926595254122633,{"persistent_metadata":{"reference":"Merge","display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3726756269632080543,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[7419291594083587754,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"min":0.0,"unit":" px","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","is_integer":true,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","mode":"Increment","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","blank_assist":true,"min":0.0,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5294703684886212416,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"mode":"Increment","is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","min":2.0,"is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"mode":"Increment","blank_assist":true,"unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"mode":"Increment","unit":" px","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[7711570794020903773,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[1126802566044359983,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","is_integer":false,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"mode":"Increment","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","unit":" px","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[3025883099767376126,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"mode":"Increment","blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[4037968351431607570,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[7807438675023750219,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"min":0.0,"unit":" px","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[11874141024063691837,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"mode":"Increment","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","is_integer":true,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"blank_assist":true,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","is_integer":false,"unit":" px","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[16611856724057842399,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[9065988052616974602,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","unit":" px","blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"mode":"Increment","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","unit":" px","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[17232801702996970986,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"min":0.0,"unit":" px","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","blank_assist":true,"unit":" px","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[17437077810654043142,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"is_integer":false,"unit":" px","min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","is_integer":true,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","mode":"Increment","blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"unit":" px","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13676600738025998635,{"persistent_metadata":{"reference":"Merge","display_name":"Background","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17154757625902243313,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[757876048866560520,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","is_integer":false,"blank_assist":true,"unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","min":0.0,"is_integer":false,"unit":" px","blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","is_integer":false,"blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[1357621220363171879,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"is_integer":false,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"min":2.0,"is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","min":0.0,"is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"min":0.0,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[15385259560644295534,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15002088321732485705,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[8591396027454826376,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"blank_assist":true,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"blank_assist":true,"unit":" px","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15212962088799153943,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"is_integer":true,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","is_integer":false,"blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"mode":"Increment","unit":" px","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[12317719117993811200,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 4","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12639486733043466090,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 3","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1801066723091712434,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[18341697272814101120,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"unit":" px","mode":"Increment","min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"is_integer":true,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"is_integer":false,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14514477720912258595,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","is_integer":false,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","unit":" px","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"mode":"Increment","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[17.0,-79.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1008.0,502.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[3683309254695891012,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3916070947050514908,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","blank_assist":true,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":2.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"is_integer":false,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"is_integer":false,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[10720574559271598132,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","is_integer":false,"blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","is_integer":false,"unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","unit":"x","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[10686861494573327243,{"persistent_metadata":{"reference":"Merge","display_name":"Dune in Shadow 2","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6097807941755042226,{"persistent_metadata":{"reference":"Merge","display_name":"Dune 1","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-14,40]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17239043462037837834,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[15937218612227302315,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"is_integer":false,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":2.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"mode":"Increment","min":0.0,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[7260397085903590160,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"mode":"Increment","unit":" px","min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"unit":" px","blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","blank_assist":true,"min":0.0,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[4445985685181725042,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":true,"x":"X"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":true,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":["Out"],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[3,0]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5883606306991910210,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}],[16598825029377599083,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","blank_assist":true,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","mode":"Increment","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","blank_assist":true,"min":0.0,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[6686718746443793247,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","unit":" px","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","is_integer":true,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"mode":"Increment","unit":" px","min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","unit":" px","is_integer":false,"min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[10806978668166337270,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[9133354469966676056,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"unit":" px","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"mode":"Increment","unit":" px","min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[3765311973789472189,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","blank_assist":true,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":2.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"mode":"Increment","blank_assist":true,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}],[17589660903986237301,{"persistent_metadata":{"reference":null,"display_name":"Dune","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1791308547102433540,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-20,-3]}}},"network_metadata":null}}],[12029121808718862100,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"mode":"Increment","blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11731553664207576737,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-6,-3]}}},"network_metadata":null}}],[16943732999059587742,{"persistent_metadata":{"reference":"Jitter Points","display_name":"Jitter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Amount","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Seed","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-3]}}},"network_metadata":null}}],[7828034197076821310,{"persistent_metadata":{"reference":"To u32","display_name":"To u32","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,1]}}},"network_metadata":null}}],[640915213983348287,{"persistent_metadata":{"reference":"Rectangle","display_name":"Rectangle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Width","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Height","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Individual Corner Radii","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Corner Radius","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clamped","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-27,-3]}}},"network_metadata":null}}],[2288754089236120499,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":["Future>"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[22,-3]}}},"network_metadata":null}}],[3289411516263327806,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","blank_assist":true,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"is_integer":true,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"min":0.0,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","is_integer":false,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-13,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14158287945315818946,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[15,-3]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14577956936089455769,{"persistent_metadata":{"reference":"Vec2 Value","display_name":"Vec2 Value","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"X","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Y","input_description":""}}],"output_names":["Future"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[8,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,991.0,581.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[]],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[393.8840949272409,-703.048313613491],"tilt":0.0,"zoom":0.7533811475409836,"flip":false},"node_graph_to_viewport":[0.7533811475409836,0.0,0.0,0.7533811475409836,1287.0,51.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[17327221498641745184],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[6097807941755042226,5883606306991910210,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[2128810469968776913],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[15385259560644295534],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[6097807941755042226,15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[13676600738025998635],[2128810469968776913],[11435147660766496741],[15726496377243608372],[4390668436091073484],[11386926595254122633],[11435147660766496741],[15726496377243608372],[15726496377243608372,11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741,15726496377243608372,4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[11435147660766496741,2163528024003768644,7128559142392931896,12110920487474373676,13323241418027154136,12639486733043466090,1801066723091712434,8804763001225416124,17154757625902243313,4390668436091073484,12122314434656187176,16611856724057842399,10686861494573327243,10806978668166337270,11386926595254122633,6523786079462141312,13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,11386926595254122633,13676600738025998635,2128810469968776913],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[15726496377243608372],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[4390668436091073484,12122314434656187176,16611856724057842399,10686861494573327243,10806978668166337270,11386926595254122633,6523786079462141312,13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11435147660766496741,2163528024003768644,12110920487474373676,12639486733043466090,8804763001225416124,15726496377243608372],[13132104524813958174],[11435147660766496741],[2163528024003768644],[12110920487474373676],[12639486733043466090],[8804763001225416124],[11435147660766496741],[15726496377243608372],[3934928477288442109],[239716716021064150],[15726496377243608372],[15726496377243608372,11435147660766496741],[239716716021064150],[239716716021064150,7711570794020903773],[239716716021064150,3934928477288442109],[4390668436091073484],[12122314434656187176],[10686861494573327243],[11386926595254122633],[4390668436091073484],[13676600738025998635,2128810469968776913],[13676600738025998635,6097807941755042226,5883606306991910210,15385259560644295534,3726756269632080543,17327221498641745184,3683309254695891012,12317719117993811200,17239043462037837834,9069881382900058607,4037968351431607570,2128810469968776913,12416569579970107543,13644002059194136823,17437077810654043142,15002088321732485705],[11386926595254122633],[13676600738025998635],[6097807941755042226],[15385259560644295534],[17327221498641745184],[12317719117993811200],[9069881382900058607],[2128810469968776913],[13132104524813958174],[2128810469968776913],[13132104524813958174],[2163528024003768644],[239716716021064150],[3934928477288442109],[8804763001225416124],[12639486733043466090],[12110920487474373676],[2163528024003768644],[4390668436091073484],[13676600738025998635],[2128810469968776913],[2163528024003768644],[9069881382900058607],[12317719117993811200,9069881382900058607],[17327221498641745184,12317719117993811200,9069881382900058607],[15385259560644295534,17327221498641745184,12317719117993811200,9069881382900058607],[12317719117993811200,15385259560644295534,9069881382900058607,17327221498641745184,6097807941755042226],[17327221498641745184,12317719117993811200,11386926595254122633,6097807941755042226,9069881382900058607,15385259560644295534],[9069881382900058607,6097807941755042226,10686861494573327243,15385259560644295534,11386926595254122633,12317719117993811200,17327221498641745184],[10686861494573327243,15385259560644295534,12122314434656187176,11386926595254122633,9069881382900058607,6097807941755042226,12317719117993811200,17327221498641745184],[12122314434656187176,6097807941755042226,11386926595254122633,12317719117993811200,17327221498641745184,10686861494573327243,239716716021064150,15385259560644295534,9069881382900058607],[9069881382900058607,239716716021064150,6097807941755042226,12122314434656187176,12317719117993811200,10686861494573327243,15385259560644295534,17327221498641745184,11386926595254122633,3934928477288442109],[9069881382900058607,13676600738025998635,3934928477288442109,12122314434656187176,6097807941755042226,15385259560644295534,4390668436091073484,10686861494573327243,17327221498641745184,11386926595254122633,12317719117993811200,239716716021064150],[6097807941755042226,3934928477288442109,4390668436091073484,9069881382900058607,13676600738025998635,11386926595254122633,15385259560644295534,12122314434656187176,8804763001225416124,10686861494573327243,239716716021064150,12317719117993811200,17327221498641745184],[9069881382900058607,12122314434656187176,13676600738025998635,10686861494573327243,12317719117993811200,6097807941755042226,15385259560644295534,239716716021064150,17327221498641745184,11386926595254122633,3934928477288442109,8804763001225416124,12639486733043466090,4390668436091073484],[10686861494573327243,15385259560644295534,17327221498641745184,239716716021064150,8804763001225416124,6097807941755042226,11386926595254122633,12317719117993811200,12122314434656187176,9069881382900058607,3934928477288442109,12639486733043466090],[10686861494573327243,17327221498641745184,12317719117993811200,11386926595254122633,12639486733043466090,12122314434656187176,9069881382900058607,6097807941755042226,12110920487474373676,3934928477288442109,15385259560644295534,8804763001225416124,239716716021064150],[12110920487474373676,10686861494573327243,11386926595254122633,12317719117993811200,8804763001225416124,3934928477288442109,9069881382900058607,15385259560644295534,2163528024003768644,17327221498641745184,239716716021064150,12639486733043466090,12122314434656187176,6097807941755042226],[2128810469968776913],[17327221498641745184],[]],"selection_redo_history":[]}}},"collapsed":[4390668436091073485,13676600738025998636,13132104524813958175],"commit_hash":"c4e16e1aac642bbcde72f41f86deed79e6e38006","document_ptz":{"pan":[-999.515765085624,-500.18277881031514],"tilt":0.0,"zoom":0.940975,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/procedural-string-lights.graphite b/demo-artwork/procedural-string-lights.graphite index b93d6a73bd..c3aeb7a913 100644 --- a/demo-artwork/procedural-string-lights.graphite +++ b/demo-artwork/procedural-string-lights.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":14972365039974885000,"output_index":0,"lambda":false}}],"nodes":[[183562335973647870,{"inputs":[{"Node":{"node_id":4248875763694880300,"output_index":0,"lambda":false}},{"Node":{"node_id":2181148486404191200,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[665049002420596400,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"delta":[[8,[252.4444444444444,124.88888888888886]],[30,[-9.333333333333371,0.0]],[14,[183.11111111111103,-19.111111111111143]],[28,[39.111111111111086,-58.22222222222226]],[21,[76.0,-202.22222222222223]],[13,[153.77777777777777,-1.3333333333333712]],[19,[90.66666666666664,-129.33333333333334]],[29,[-32.888888888888914,-14.666666666666686]],[26,[22.66666666666663,-81.33333333333337]],[20,[128.4444444444444,-142.22222222222223]],[33,[-78.22222222222223,75.55555555555554]],[22,[71.11111111111109,-201.7777777777778]],[5,[66.22222222222223,152.88888888888886]],[10,[216.4444444444444,72.4444444444444]],[6,[123.99999999999994,148.4444444444444]],[18,[145.77777777777777,-97.7777777777778]],[4,[18.66666666666663,157.77777777777771]],[7,[229.33333333333331,152.4444444444444]],[17,[123.99999999999994,-84.00000000000003]],[34,[-5.333333333333371,99.11111111111109]],[27,[-11.111111111111144,-72.00000000000003]],[31,[-53.33333333333337,13.777777777777771]],[9,[156.4444444444444,97.33333333333331]],[11,[136.88888888888886,39.111111111111086]],[16,[159.5555555555555,-75.55555555555557]],[2,[-67.55555555555554,158.22222222222217]],[23,[19.555555555555543,-139.55555555555557]],[25,[0.8888888888888573,-94.66666666666669]],[15,[111.11111111111114,-60.888888888888914]],[32,[9.333333333333314,38.66666666666663]],[12,[199.5555555555555,10.666666666666629]],[3,[45.77777777777777,145.33333333333331]],[24,[57.77777777777777,-129.33333333333334]],[1,[-103.55555555555554,126.66666666666664]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"start_point":[[28,28],[1,1],[3,3],[18,18],[2,2],[24,24],[12,12],[30,30],[31,31],[21,21],[7,7],[27,27],[29,29],[10,10],[4,4],[33,33],[11,11],[34,34],[16,16],[13,13],[17,17],[14,14],[6,6],[5,5],[9,9],[32,32],[19,19],[22,22],[26,26],[8,8],[20,20],[15,15],[25,25],[23,23]],"end_point":[[9,10],[31,32],[13,14],[17,18],[5,6],[19,20],[21,22],[18,19],[2,3],[22,23],[29,30],[20,21],[8,9],[27,28],[4,5],[16,17],[3,4],[12,13],[32,33],[24,25],[28,29],[33,34],[15,16],[6,7],[14,15],[1,2],[34,1],[25,26],[23,24],[11,12],[26,27],[7,8],[30,31],[10,11]],"handle_primary":[[26,[0.0,0.0]],[9,[0.0,0.0]],[23,[0.0,0.0]],[22,[0.0,0.0]],[31,[0.0,0.0]],[2,[30.66666666666663,2.6666666666666856]],[7,[24.88888888888891,-15.111111111111086]],[30,[0.0,0.0]],[18,[0.0,0.0]],[16,[0.0,0.0]],[4,[0.0,0.0]],[25,[0.0,0.0]],[34,[0.0,0.0]],[20,[0.0,0.0]],[14,[0.0,0.0]],[19,[0.0,0.0]],[32,[0.0,0.0]],[8,[0.0,0.0]],[15,[0.0,0.0]],[12,[0.0,0.0]],[3,[0.0,0.0]],[13,[0.0,0.0]],[10,[0.0,0.0]],[21,[0.0,0.0]],[11,[0.0,0.0]],[24,[0.0,0.0]],[1,[0.0,0.0]],[33,[0.0,0.0]],[17,[0.0,0.0]],[29,[0.0,0.0]],[6,[0.0,0.0]],[28,[0.0,0.0]],[27,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[27,[-39.55555555555554,12.444444444444429]],[1,[-30.666666666666615,-2.6666666666666856]],[24,[47.55555555555554,4.888888888888886]],[30,[35.111111111111086,1.333333333333373]],[34,[65.7777777777778,12.444444444444445]],[6,[-24.88888888888891,15.111111111111086]],[5,[-13.333333333333384,14.222222222222229]],[7,[0.0,0.0]],[23,[-35.55555555555554,11.1111111111111]],[26,[26.22222222222223,2.666666666666657]],[20,[13.333333333333371,70.22222222222223]],[14,[29.33333333333337,57.77777777777777]],[28,[54.66666666666663,6.666666666666686]],[29,[-17.77777777777777,-3.555555555555543]],[18,[13.3333333333333,41.33333333333334]],[13,[-13.333333333333371,14.222222222222229]],[15,[-12.444444444444455,28.444444444444457]],[3,[8.4444444444444,-0.8888888888889142]],[10,[26.66666666666663,44.44444444444446]],[17,[-10.222222222222172,12.444444444444455]],[2,[-51.111111111111086,14.666666666666686]],[25,[-11.111111111111144,-1.7777777777778]],[21,[0.0,0.0]],[31,[-42.22222222222223,5.333333333333314]],[9,[-34.222222222222285,36.0]],[19,[-9.777777777777844,23.55555555555557]],[12,[18.66666666666663,16.0]],[4,[-31.555555555555543,18.22222222222223]],[33,[-64.44444444444446,3.111111111111157]],[8,[36.0,41.77777777777777]],[22,[38.22222222222223,4.888888888888886]],[16,[6.666666666666629,13.333333333333314]],[32,[55.111111111111086,9.777777777777771]],[11,[-24.0,31.555555555555543]]],"stroke":[[12,0],[13,0],[18,0],[11,0],[20,0],[31,0],[22,0],[29,0],[17,0],[1,0],[24,0],[23,0],[34,0],[10,0],[5,0],[7,0],[32,0],[3,0],[30,0],[27,0],[21,0],[25,0],[16,0],[33,0],[15,0],[8,0],[2,0],[26,0],[9,0],[6,0],[28,0],[4,0],[19,0],[14,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":34}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14972365039974885000,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3471929742275053000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13394621587544123000,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.6484375,"green":0.6484375,"blue":0.6484375,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.6484375,"green":0.6484375,"blue":0.6484375,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.91796875,"green":0.68489075,"blue":0.68489075,"alpha":1.0}],[1.0,{"red":0.8862745,"green":0.16470589,"blue":0.16470589,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4915209831246563,0.36613756613756576],"end":[0.49551110871305326,0.9947089947089944],"transform":[250.61867799546343,0.0,0.0,472.4999999999999,809.8156610022683,336.0000000000002]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11411423299989983000,{"inputs":[{"Node":{"node_id":16877573495957869000,"output_index":0,"lambda":false}},{"Node":{"node_id":3958246774416220000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14631609508767818000,{"inputs":[{"Node":{"node_id":15889416971203222000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[487.1243076693745,127.7443401649906]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[25.393705016577044,25.003032631706716]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2908374490615384600,{"inputs":[{"Node":{"node_id":17339085479159577000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.078431375,"green":0.14901961,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.078431375,"green":0.14901961,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16765094648901306000,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":8147814087664910471,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[655907162126315400,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[11,[186.0,824.9999999999999]],[4,[484.0,446.9999999999999]],[6,[495.0,533.9999999999999]],[10,[455.0,824.9999999999999]],[3,[373.0,372.9999999999999]],[1,[416.0,270.9999999999999]],[2,[587.0,291.9999999999999]],[7,[304.0,611.9999999999999]],[9,[750.0,703.9999999999999]],[5,[639.0,438.9999999999999]],[8,[475.0,671.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[10,10],[9,9],[7,7],[5,5],[6,6],[3,3],[8,8],[4,4],[1,1],[2,2]],"end_point":[[9,10],[10,11],[2,3],[7,8],[5,6],[4,5],[6,7],[3,4],[1,2],[8,9]],"handle_primary":[[4,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[9,[0.0,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[6,[0.0,0.0]],[10,[0.0,0.0]],[7,[0.0,0.0]],[5,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[9,0],[5,0],[2,0],[8,0],[6,0],[3,0],[4,0],[7,0],[10,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16877573495957869000,{"inputs":[{"Node":{"node_id":4534782777857480700,"output_index":0,"lambda":false}},{"Node":{"node_id":5737014828407011000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5737014828407011000,{"inputs":[{"Node":{"node_id":10504222558938851000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[499.21344163872624,106.32837674079803]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[55.110312549931045,55.110312549931045]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.921525468856923e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10504222558938851000,{"inputs":[{"Node":{"node_id":13571989088655643000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":0.94460994,"blue":0.79296875,"alpha":1.0}],[1.0,{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4703098217208352,0.4995258072961386],"end":[0.9924395932459462,0.5005395053456176],"transform":[237.34320332463173,-71.34811668265112,75.01984946235177,249.55741247555255,995.9008094918244,343.8953521035491]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":0.94460994,"blue":0.79296875,"alpha":1.0}],[1.0,{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4703098217208352,0.4995258072961386],"end":[0.9924395932459462,0.5005395053456176],"transform":[237.34320332463173,-71.34811668265112,75.01984946235177,249.55741247555255,995.9008094918244,343.8953521035491]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4248875763694880300,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7297408968096180000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3471929742275053000,{"inputs":[{"Node":{"node_id":11411423299989983000,"output_index":0,"lambda":false}},{"Node":{"node_id":4217566479741824000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[169695252050218443,{"inputs":[{"Node":{"node_id":6559102076450693000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.75}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01}]],"gradient_type":"Radial","start":[0.4915209831246563,0.36613756613756576],"end":[0.49551110871305326,0.9947089947089944],"transform":[250.61867799546343,0.0,0.0,472.4999999999999,809.8156610022683,336.0000000000002]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.7734375}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01}]],"gradient_type":"Radial","start":[0.4915209831246563,0.36613756613756576],"end":[0.49551110871305326,0.9947089947089944],"transform":[250.61867799546343,0.0,0.0,472.4999999999999,809.8156610022683,336.0000000000002]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5250960114142560178,{"inputs":[{"Node":{"node_id":655907162126315400,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.18629456,"green":0.18054199,"blue":0.2265625,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[17339085479159577000,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[5,[28.296296296296305,197.33333333333331]],[1,[88.4444444444444,151.55555555555554]],[7,[66.51851851851853,147.1111111111111]],[2,[122.22222222222224,196.4444444444444]],[6,[58.962962962962976,152.74074074074073]],[3,[123.55555555555554,199.1111111111111]],[4,[28.296296296296305,198.96296296296293]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[4,4],[5,5],[6,6],[2,2],[1,1],[7,7]],"end_point":[[1,2],[3,4],[7,1],[2,3],[5,6],[6,7],[4,5]],"handle_primary":[[2,[0.0,0.0]],[5,[0.0,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[5,[5.92592592592591,45.77777777777786]],[1,[-32.0,-3.5555555555555145]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]]],"stroke":[[3,0],[7,0],[2,0],[5,0],[1,0],[6,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13571989088655643000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::StarNode"}},"visible":true,"skip_deduplication":false}],[8147814087664910471,{"inputs":[{"Node":{"node_id":2866788868013687300,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3372549,"green":0.33333334,"blue":0.40784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3372549,"green":0.33333334,"blue":0.40784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13907401402762847509,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[10666000720855117911,12291367210538906710,11079673538758176715,9852417284720842144,13528392218319754720],"position":[[0.0,16.600000381469727],[13.314000129699709,30.4060001373291],[0.0,66.8030014038086],[-13.314000129699709,30.4060001373291],[0.0,16.600000381469727]]},"segment_domain":{"id":[1,2,3,4,5],"start_point":[0,1,2,3,4],"end_point":[1,2,3,4,0],"handles":[{"Cubic":{"handle_start":[7.347000122070312,16.600000381469727],"handle_end":[13.314000129699709,22.788000106811523]}},{"Cubic":{"handle_start":[13.314000129699709,38.02399826049805],"handle_end":[4.480999946594238,66.8030014038086]}},{"Cubic":{"handle_start":[-4.480999946594238,66.8030014038086],"handle_end":[-13.314000129699709,38.02299880981445]}},{"Cubic":{"handle_start":[-13.314000129699709,22.788000106811523],"handle_end":[-7.347000122070312,16.600000381469727]}},{"Cubic":{"handle_start":[0.0,16.600000381469727],"handle_end":[0.0,16.600000381469727]}}],"stroke":[0,0,0,0,0]},"region_domain":{"id":[0],"segment_range":[{"start":1,"end":5}],"fill":[0]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[13528392218319754720],"delta":[]},"segments":{"add":[4],"remove":[5],"start_point":[[4,9852417284720842144]],"end_point":[[4,10666000720855117911]],"handle_primary":[[4,[0.0,-7.618000030517578]]],"handle_end":[[4,[-7.34700012207,-3.552713678800501e-15]]],"stroke":[[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"End","segment":4},{"ty":"Primary","segment":5}],[{"ty":"End","segment":4},{"ty":"Primary","segment":1}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6559102076450693000,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}],[2866788868013687300,{"inputs":[{"Node":{"node_id":8496292024993914696,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}],[4331062027851128000,{"inputs":[{"Node":{"node_id":665049002420596400,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.1764706,"green":0.25882354,"blue":0.32156864,"alpha":1.0}],[1.0,{"red":0.16577148,"green":0.37890625,"blue":0.36788198,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3769992978075994,0.1888891278143931],"end":[0.9861902161192166,0.9200728483862376],"transform":[801.0625,0.0,0.0,820.5871973335948,698.0,185.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.1764706,"green":0.25882354,"blue":0.32156864,"alpha":1.0}],[1.0,{"red":0.16577148,"green":0.37890625,"blue":0.36788198,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3769992978075994,0.1888891278143931],"end":[0.9861902161192166,0.9200728483862376],"transform":[801.0625,0.0,0.0,820.5871973335948,698.0,185.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11815560782623298000,{"inputs":[{"Node":{"node_id":16765094648901306000,"output_index":0,"lambda":false}},{"Node":{"node_id":13394621587544123000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13371003476981866000,{"inputs":[{"Node":{"node_id":11815560782623298000,"output_index":0,"lambda":false}},{"Node":{"node_id":169695252050218443,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4534782777857480700,{"inputs":[{"Node":{"node_id":183562335973647870,"output_index":0,"lambda":false}},{"Node":{"node_id":14631609508767818000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17790961655412892000,{"inputs":[{"Node":{"node_id":12728151724950013388,"output_index":0,"lambda":false}},{"Node":{"node_id":13371003476981866000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2181148486404191200,{"inputs":[{"Node":{"node_id":4331062027851128000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[353.5143520436918,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4217566479741824000,{"inputs":[{"Node":{"node_id":17790961655412892000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.16470589,"green":0.8862745,"blue":0.4117647,"alpha":1.0}],[0.5,{"red":0.8862745,"green":0.16470589,"blue":0.16470589,"alpha":1.0}],[1.0,{"red":0.16470589,"green":0.54901963,"blue":0.8862745,"alpha":1.0}]]},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false}],[3958246774416220000,{"inputs":[{"Node":{"node_id":5250960114142560178,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[7297408968096180000,{"inputs":[{"Node":{"node_id":2908374490615384600,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[353.5143520436944,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8309013977031955000,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[4,[0.0,1.0]],[3,[1.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8496292024993914696,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[8579252446942557840,5702904670777106146,6914816536199142761,17771770146045579307,4317718082554655671],"position":[[-5.75,-0.4000000059604645],[5.75,-0.4000000059604645],[10.0,21.600000381469727],[-10.0,21.600000381469727],[-5.75,-0.4000000059604645]]},"segment_domain":{"id":[1,2,3,4,5],"start_point":[0,1,2,3,4],"end_point":[1,2,3,4,0],"handles":[{"Cubic":{"handle_start":[-5.75,-0.4000000059604645],"handle_end":[5.75,-0.4000000059604645]}},{"Cubic":{"handle_start":[5.75,-0.4000000059604645],"handle_end":[10.0,21.600000381469727]}},{"Cubic":{"handle_start":[10.0,21.600000381469727],"handle_end":[-10.0,21.600000381469727]}},{"Cubic":{"handle_start":[-10.0,21.600000381469727],"handle_end":[-5.75,-0.4000000059604645]}},{"Cubic":{"handle_start":[-5.75,-0.4000000059604645],"handle_end":[-5.75,-0.4000000059604645]}}],"stroke":[0,0,0,0,0]},"region_domain":{"id":[0],"segment_range":[{"start":1,"end":5}],"fill":[0]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[4317718082554655671],"delta":[]},"segments":{"add":[4],"remove":[5],"start_point":[[4,17771770146045579307]],"end_point":[[4,8579252446942557840]],"handle_primary":[[4,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]]],"stroke":[[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15889416971203222000,{"inputs":[{"Node":{"node_id":8309013977031955000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12728151724950013388,{"inputs":[{"Node":{"node_id":3958246774416220000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":105.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[17339085479159577000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13907401402762847509,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Vector Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,21]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8147814087664910471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13571989088655643000,{"persistent_metadata":{"reference":"Star","display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Sides","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 1","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 2","input_description":""}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2908374490615384600,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6559102076450693000,{"persistent_metadata":{"reference":"To Group","display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3471929742275053000,{"persistent_metadata":{"reference":"Merge","display_name":"Lights","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[169695252050218443,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14631609508767818000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14972365039974885000,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17790961655412892000,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[183562335973647870,{"persistent_metadata":{"reference":"Merge","display_name":"Tree","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16877573495957869000,{"persistent_metadata":{"reference":"Merge","display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16765094648901306000,{"persistent_metadata":{"reference":"Merge","display_name":"Bulb Housing","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7297408968096180000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[665049002420596400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15889416971203222000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2181148486404191200,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8496292024993914696,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Vector Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5250960114142560178,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,15]}}},"network_metadata":null}}],[655907162126315400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,15]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13371003476981866000,{"persistent_metadata":{"reference":"Merge","display_name":"Bulb Glow Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-29,18]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5737014828407011000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12728151724950013388,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4534782777857480700,{"persistent_metadata":{"reference":"Merge","display_name":"Star Base","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11411423299989983000,{"persistent_metadata":{"reference":"Merge","display_name":"Wire (Use Path Tool to Reshape This!)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2866788868013687300,{"persistent_metadata":{"reference":"To Group","display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Instances"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3958246774416220000,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,15]}}},"network_metadata":null}}],[8309013977031955000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4331062027851128000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13394621587544123000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4248875763694880300,{"persistent_metadata":{"reference":"Merge","display_name":"Tree Stump","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10504222558938851000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4217566479741824000,{"persistent_metadata":{"reference":"Assign Colors","display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Vector Group","input_description":"The vector elements, or group of vector elements, to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Vector Group"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11815560782623298000,{"persistent_metadata":{"reference":"Merge","display_name":"Bulb Shape","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[527.9166666666665,-576.1833333333332],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1518.0,4.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[],[2866788868013687300],[],[4352028121261571600],[],[2866788868013687300],[6559102076450693000],[6559102076450693000],[10775791528628074000],[],[6559102076450693000],[],[],[],[],[],[15084833709935380000],[],[16765094648901306000],[16765094648901306000,11815560782623298000],[16765094648901306000,13371003476981866000,11815560782623298000],[6559102076450693000,16765094648901306000,13394621587544123000,11815560782623298000,2866788868013687300,13371003476981866000],[3958246774416220000],[],[],[3958246774416220000],[3958246774416220000,655907162126315400],[],[3958246774416220000],[],[3958246774416220000],[655907162126315400,3958246774416220000],[],[],[3958246774416220000],[655907162126315400,3958246774416220000],[],[14631609508767818000],[],[5737014828407011000],[],[10118219203151733000],[],[],[],[],[],[],[655907162126315400],[],[],[655907162126315400,3958246774416220000],[],[],[16877573495957869000],[11411423299989983000],[16877573495957869000],[3471929742275053000],[11411423299989983000],[11411423299989983000,15209576944107258000],[15209576944107258000,3287844738046380000,11411423299989983000],[15209576944107258000,3287844738046380000,11411423299989983000,3958246774416220000],[3958246774416220000,655907162126315400,15209576944107258000,11411423299989983000,3287844738046380000],[4248875763694880300],[11411423299989983000],[3471929742275053000],[11411423299989983000],[15223368326030279287],[11815560782623298000],[11815560782623298000,16765094648901306000],[11815560782623298000],[13371003476981866000],[16765094648901306000],[15223368326030279287],[13371003476981866000],[13371003476981866000,16765094648901306000,11815560782623298000],[13371003476981866000],[11815560782623298000],[16765094648901306000],[13371003476981866000],[16765094648901306000],[11815560782623298000],[13371003476981866000],[11815560782623298000],[13371003476981866000],[16765094648901306000],[13371003476981866000],[16877573495957869000],[16765094648901306000],[13371003476981866000],[16765094648901306000],[11411423299989983000],[]],"selection_redo_history":[]}}},"collapsed":[],"name":"procedural-string-lights.graphite","commit_hash":"95bbc95606ba40ed7441fdf4e1b954d80b72e3dc","document_ptz":{"pan":[-500.157717622685,-499.8045823704831],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":14972365039974885000,"output_index":0}}],"nodes":[[183562335973647870,{"inputs":[{"Node":{"node_id":4248875763694880300,"output_index":0}},{"Node":{"node_id":2181148486404191200,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[665049002420596400,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"delta":[[30,[-9.333333333333371,0.0]],[28,[39.111111111111086,-58.22222222222226]],[24,[57.77777777777777,-129.33333333333334]],[12,[199.5555555555555,10.666666666666629]],[26,[22.66666666666663,-81.33333333333337]],[11,[136.88888888888886,39.111111111111086]],[13,[153.77777777777777,-1.3333333333333712]],[34,[-5.333333333333371,99.11111111111109]],[31,[-53.33333333333337,13.777777777777771]],[32,[9.333333333333314,38.66666666666663]],[9,[156.4444444444444,97.33333333333331]],[20,[128.4444444444444,-142.22222222222223]],[33,[-78.22222222222223,75.55555555555554]],[17,[123.99999999999994,-84.00000000000003]],[15,[111.11111111111114,-60.888888888888914]],[21,[76.0,-202.22222222222223]],[27,[-11.111111111111144,-72.00000000000003]],[22,[71.11111111111109,-201.7777777777778]],[6,[123.99999999999994,148.4444444444444]],[4,[18.66666666666663,157.77777777777771]],[23,[19.555555555555543,-139.55555555555557]],[29,[-32.888888888888914,-14.666666666666686]],[25,[0.8888888888888573,-94.66666666666669]],[16,[159.5555555555555,-75.55555555555557]],[18,[145.77777777777777,-97.7777777777778]],[8,[252.4444444444444,124.88888888888886]],[3,[45.77777777777777,145.33333333333331]],[10,[216.4444444444444,72.4444444444444]],[14,[183.11111111111103,-19.111111111111143]],[5,[66.22222222222223,152.88888888888886]],[2,[-67.55555555555554,158.22222222222217]],[1,[-103.55555555555554,126.66666666666664]],[19,[90.66666666666664,-129.33333333333334]],[7,[229.33333333333331,152.4444444444444]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"remove":[],"start_point":[[5,5],[10,10],[25,25],[3,3],[9,9],[12,12],[31,31],[20,20],[23,23],[34,34],[15,15],[19,19],[17,17],[21,21],[6,6],[2,2],[1,1],[14,14],[18,18],[7,7],[16,16],[22,22],[33,33],[27,27],[30,30],[29,29],[11,11],[28,28],[8,8],[13,13],[32,32],[4,4],[26,26],[24,24]],"end_point":[[32,33],[21,22],[12,13],[8,9],[10,11],[13,14],[4,5],[14,15],[3,4],[34,1],[2,3],[30,31],[15,16],[25,26],[1,2],[22,23],[28,29],[27,28],[19,20],[7,8],[5,6],[33,34],[6,7],[11,12],[9,10],[26,27],[31,32],[20,21],[16,17],[17,18],[18,19],[23,24],[29,30],[24,25]],"handle_primary":[[7,[24.88888888888891,-15.111111111111086]],[31,[0.0,0.0]],[16,[0.0,0.0]],[19,[0.0,0.0]],[9,[0.0,0.0]],[1,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]],[6,[0.0,0.0]],[17,[0.0,0.0]],[18,[0.0,0.0]],[15,[0.0,0.0]],[4,[0.0,0.0]],[25,[0.0,0.0]],[26,[0.0,0.0]],[28,[0.0,0.0]],[3,[0.0,0.0]],[11,[0.0,0.0]],[30,[0.0,0.0]],[14,[0.0,0.0]],[33,[0.0,0.0]],[20,[0.0,0.0]],[22,[0.0,0.0]],[27,[0.0,0.0]],[23,[0.0,0.0]],[24,[0.0,0.0]],[2,[30.66666666666663,2.6666666666666856]],[29,[0.0,0.0]],[21,[0.0,0.0]],[13,[0.0,0.0]],[5,[0.0,0.0]],[34,[0.0,0.0]],[12,[0.0,0.0]],[32,[0.0,0.0]]],"handle_end":[[32,[55.111111111111086,9.777777777777771]],[1,[-30.666666666666615,-2.6666666666666856]],[4,[-31.555555555555543,18.22222222222223]],[31,[-42.22222222222223,5.333333333333314]],[26,[26.22222222222223,2.666666666666657]],[6,[-24.88888888888891,15.111111111111086]],[5,[-13.333333333333384,14.222222222222229]],[3,[8.4444444444444,-0.8888888888889142]],[23,[-35.55555555555554,11.1111111111111]],[10,[26.66666666666663,44.44444444444446]],[14,[29.33333333333337,57.77777777777777]],[21,[0.0,0.0]],[20,[13.333333333333371,70.22222222222223]],[34,[65.7777777777778,12.444444444444445]],[28,[54.66666666666663,6.666666666666686]],[11,[-24.0,31.555555555555543]],[8,[36.0,41.77777777777777]],[17,[-10.222222222222172,12.444444444444455]],[22,[38.22222222222223,4.888888888888886]],[33,[-64.44444444444446,3.111111111111157]],[30,[35.111111111111086,1.333333333333373]],[18,[13.3333333333333,41.33333333333334]],[15,[-12.444444444444455,28.444444444444457]],[29,[-17.77777777777777,-3.555555555555543]],[9,[-34.222222222222285,36.0]],[25,[-11.111111111111144,-1.7777777777778]],[24,[47.55555555555554,4.888888888888886]],[19,[-9.777777777777844,23.55555555555557]],[27,[-39.55555555555554,12.444444444444429]],[16,[6.666666666666629,13.333333333333314]],[12,[18.66666666666663,16.0]],[7,[0.0,0.0]],[2,[-51.111111111111086,14.666666666666686]],[13,[-13.333333333333371,14.222222222222229]]],"stroke":[[17,0],[30,0],[12,0],[1,0],[4,0],[28,0],[27,0],[7,0],[15,0],[34,0],[32,0],[22,0],[13,0],[24,0],[5,0],[16,0],[23,0],[8,0],[11,0],[20,0],[6,0],[33,0],[29,0],[26,0],[21,0],[25,0],[3,0],[10,0],[9,0],[31,0],[14,0],[19,0],[18,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":34}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14972365039974885000,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3471929742275053000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1000.0,1000.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13394621587544123000,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.6484375,"green":0.6484375,"blue":0.6484375,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.6484375,"green":0.6484375,"blue":0.6484375,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.91796875,"green":0.68489075,"blue":0.68489075,"alpha":1.0}],[1.0,{"red":0.8862745,"green":0.16470589,"blue":0.16470589,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4915209831246563,0.36613756613756576],"end":[0.49551110871305326,0.9947089947089944]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11411423299989983000,{"inputs":[{"Node":{"node_id":16877573495957869000,"output_index":0}},{"Node":{"node_id":3958246774416220000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14631609508767818000,{"inputs":[{"Node":{"node_id":15889416971203222000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[487.1243076693745,127.7443401649906]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[25.393705016577044,25.003032631706716]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2908374490615384600,{"inputs":[{"Node":{"node_id":17339085479159577000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.078431375,"green":0.14901961,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.078431375,"green":0.14901961,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16765094648901306000,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":8147814087664910471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[655907162126315400,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[10,[455.0,824.9999999999999]],[2,[587.0,291.9999999999999]],[7,[304.0,611.9999999999999]],[4,[484.0,446.9999999999999]],[1,[416.0,270.9999999999999]],[8,[475.0,671.9999999999999]],[9,[750.0,703.9999999999999]],[11,[186.0,824.9999999999999]],[5,[639.0,438.9999999999999]],[3,[373.0,372.9999999999999]],[6,[495.0,533.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[7,7],[6,6],[5,5],[8,8],[10,10],[4,4],[3,3],[2,2],[1,1],[9,9]],"end_point":[[1,2],[5,6],[3,4],[2,3],[9,10],[6,7],[10,11],[7,8],[4,5],[8,9]],"handle_primary":[[10,[0.0,0.0]],[1,[0.0,0.0]],[8,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[9,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[7,[0.0,0.0]],[6,[0.0,0.0]],[9,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]]],"stroke":[[9,0],[3,0],[5,0],[8,0],[10,0],[1,0],[2,0],[4,0],[6,0],[7,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16877573495957869000,{"inputs":[{"Node":{"node_id":4534782777857480700,"output_index":0}},{"Node":{"node_id":5737014828407011000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5737014828407011000,{"inputs":[{"Node":{"node_id":10504222558938851000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[499.21344163872624,106.32837674079803]},"exposed":false}},{"Value":{"tagged_value":{"F64":3.141592653589793},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[55.110312549931045,55.110312549931045]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-1.921525468856923e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10504222558938851000,{"inputs":[{"Node":{"node_id":13571989088655643000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":0.94460994,"blue":0.79296875,"alpha":1.0}],[1.0,{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4703098217208352,0.4995258072961386],"end":[0.9924395932459462,0.5005395053456176]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":0.94460994,"blue":0.79296875,"alpha":1.0}],[1.0,{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}]],"gradient_type":"Radial","start":[0.4703098217208352,0.4995258072961386],"end":[0.9924395932459462,0.5005395053456176]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4248875763694880300,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7297408968096180000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3471929742275053000,{"inputs":[{"Node":{"node_id":11411423299989983000,"output_index":0}},{"Node":{"node_id":4217566479741824000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[169695252050218443,{"inputs":[{"Node":{"node_id":6559102076450693000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.75}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01}]],"gradient_type":"Radial","start":[0.4915209831246563,0.36613756613756576],"end":[0.49551110871305326,0.9947089947089944]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.7734375}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":0.01}]],"gradient_type":"Radial","start":[0.4915209831246563,0.36613756613756576],"end":[0.49551110871305326,0.9947089947089944]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5250960114142560178,{"inputs":[{"Node":{"node_id":655907162126315400,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.18629456,"green":0.18054199,"blue":0.2265625,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Round"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[17339085479159577000,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[88.4444444444444,151.55555555555554]],[4,[28.296296296296305,198.96296296296293]],[6,[58.962962962962976,152.74074074074073]],[3,[123.55555555555554,199.1111111111111]],[2,[122.22222222222224,196.4444444444444]],[7,[66.51851851851853,147.1111111111111]],[5,[28.296296296296305,197.33333333333331]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[4,4],[5,5],[6,6],[2,2],[1,1],[7,7]],"end_point":[[4,5],[3,4],[7,1],[5,6],[2,3],[1,2],[6,7]],"handle_primary":[[4,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[7,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[5,[5.92592592592591,45.77777777777786]],[1,[-32.0,-3.5555555555555145]],[4,[0.0,0.0]]],"stroke":[[1,0],[2,0],[5,0],[4,0],[3,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13571989088655643000,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::StarNode"}},"visible":true,"skip_deduplication":false}],[8147814087664910471,{"inputs":[{"Node":{"node_id":2866788868013687300,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3372549,"green":0.33333334,"blue":0.40784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3372549,"green":0.33333334,"blue":0.40784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13907401402762847509,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[10666000720855117911,12291367210538906710,11079673538758176715,9852417284720842144,13528392218319754720],"position":[[0.0,16.600000381469727],[13.314000129699709,30.4060001373291],[0.0,66.8030014038086],[-13.314000129699709,30.4060001373291],[0.0,16.600000381469727]]},"segment_domain":{"id":[1,2,3,4,5],"start_point":[0,1,2,3,4],"end_point":[1,2,3,4,0],"handles":[{"Cubic":{"handle_start":[7.347000122070312,16.600000381469727],"handle_end":[13.314000129699709,22.788000106811523]}},{"Cubic":{"handle_start":[13.314000129699709,38.02399826049805],"handle_end":[4.480999946594238,66.8030014038086]}},{"Cubic":{"handle_start":[-4.480999946594238,66.8030014038086],"handle_end":[-13.314000129699709,38.02299880981445]}},{"Cubic":{"handle_start":[-13.314000129699709,22.788000106811523],"handle_end":[-7.347000122070312,16.600000381469727]}},{"Cubic":{"handle_start":[0.0,16.600000381469727],"handle_end":[0.0,16.600000381469727]}}],"stroke":[0,0,0,0,0]},"region_domain":{"id":[0],"segment_range":[{"start":1,"end":5}],"fill":[0]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[13528392218319754720],"delta":[]},"segments":{"add":[4],"remove":[5],"start_point":[[4,9852417284720842144]],"end_point":[[4,10666000720855117911]],"handle_primary":[[4,[0.0,-7.618000030517578]]],"handle_end":[[4,[-7.34700012207,-3.552713678800501e-15]]],"stroke":[[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"End","segment":4},{"ty":"Primary","segment":5}],[{"ty":"End","segment":4},{"ty":"Primary","segment":1}]]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6559102076450693000,{"inputs":[{"Node":{"node_id":13907401402762847509,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[2866788868013687300,{"inputs":[{"Node":{"node_id":8496292024993914696,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4331062027851128000,{"inputs":[{"Node":{"node_id":665049002420596400,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.1764706,"green":0.25882354,"blue":0.32156864,"alpha":1.0}],[1.0,{"red":0.16577148,"green":0.37890625,"blue":0.36788198,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3769992978075994,0.1888891278143931],"end":[0.9861902161192166,0.9200728483862376]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.1764706,"green":0.25882354,"blue":0.32156864,"alpha":1.0}],[1.0,{"red":0.16577148,"green":0.37890625,"blue":0.36788198,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3769992978075994,0.1888891278143931],"end":[0.9861902161192166,0.9200728483862376]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11815560782623298000,{"inputs":[{"Node":{"node_id":16765094648901306000,"output_index":0}},{"Node":{"node_id":13394621587544123000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13371003476981866000,{"inputs":[{"Node":{"node_id":11815560782623298000,"output_index":0}},{"Node":{"node_id":169695252050218443,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4534782777857480700,{"inputs":[{"Node":{"node_id":183562335973647870,"output_index":0}},{"Node":{"node_id":14631609508767818000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17790961655412892000,{"inputs":[{"Node":{"node_id":12728151724950013388,"output_index":0}},{"Node":{"node_id":13371003476981866000,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2181148486404191200,{"inputs":[{"Node":{"node_id":4331062027851128000,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[353.5143520436918,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4217566479741824000,{"inputs":[{"Node":{"node_id":17790961655412892000,"output_index":0}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"GradientStops":[[0.0,{"red":0.16470589,"green":0.8862745,"blue":0.4117647,"alpha":1.0}],[0.5,{"red":0.8862745,"green":0.16470589,"blue":0.16470589,"alpha":1.0}],[1.0,{"red":0.16470589,"green":0.54901963,"blue":0.8862745,"alpha":1.0}]]},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"U32":3},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::AssignColorsNode"}},"visible":true,"skip_deduplication":false}],[3958246774416220000,{"inputs":[{"Node":{"node_id":5250960114142560178,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SplineNode"}},"visible":true,"skip_deduplication":false}],[7297408968096180000,{"inputs":[{"Node":{"node_id":2908374490615384600,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[353.5143520436944,551.6238777493922]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.9777789484064812,1.9777789484064812]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8309013977031955000,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0,1.0]],[2,[1.0,0.0]],[4,[0.0,1.0]],[1,[0.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[2,2],[1,1]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8496292024993914696,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[8579252446942557840,5702904670777106146,6914816536199142761,17771770146045579307,4317718082554655671],"position":[[-5.75,-0.4000000059604645],[5.75,-0.4000000059604645],[10.0,21.600000381469727],[-10.0,21.600000381469727],[-5.75,-0.4000000059604645]]},"segment_domain":{"id":[1,2,3,4,5],"start_point":[0,1,2,3,4],"end_point":[1,2,3,4,0],"handles":[{"Cubic":{"handle_start":[-5.75,-0.4000000059604645],"handle_end":[5.75,-0.4000000059604645]}},{"Cubic":{"handle_start":[5.75,-0.4000000059604645],"handle_end":[10.0,21.600000381469727]}},{"Cubic":{"handle_start":[10.0,21.600000381469727],"handle_end":[-10.0,21.600000381469727]}},{"Cubic":{"handle_start":[-10.0,21.600000381469727],"handle_end":[-5.75,-0.4000000059604645]}},{"Cubic":{"handle_start":[-5.75,-0.4000000059604645],"handle_end":[-5.75,-0.4000000059604645]}}],"stroke":[0,0,0,0,0]},"region_domain":{"id":[0],"segment_range":[{"start":1,"end":5}],"fill":[0]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[4317718082554655671],"delta":[]},"segments":{"add":[4],"remove":[5],"start_point":[[4,17771770146045579307]],"end_point":[[4,8579252446942557840]],"handle_primary":[[4,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]]],"stroke":[[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15889416971203222000,{"inputs":[{"Node":{"node_id":8309013977031955000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.89411765,"green":0.654902,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12728151724950013388,{"inputs":[{"Node":{"node_id":3958246774416220000,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":105.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[665049002420596400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4248875763694880300,{"persistent_metadata":{"reference":"Merge","display_name":"Tree Stump","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17339085479159577000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12728151724950013388,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","blank_assist":true,"is_integer":false,"min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3471929742275053000,{"persistent_metadata":{"reference":"Merge","display_name":"Lights","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16877573495957869000,{"persistent_metadata":{"reference":"Merge","display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":10}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11815560782623298000,{"persistent_metadata":{"reference":"Merge","display_name":"Bulb Shape","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[655907162126315400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,15]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8496292024993914696,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11411423299989983000,{"persistent_metadata":{"reference":"Merge","display_name":"Wire (Use Path Tool to Reshape This!)","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[169695252050218443,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13394621587544123000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[183562335973647870,{"persistent_metadata":{"reference":"Merge","display_name":"Tree","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13571989088655643000,{"persistent_metadata":{"reference":"Star","display_name":"Star","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Sides","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 1","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius 2","input_description":""}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14972365039974885000,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":true},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"W","is_integer":true,"y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15889416971203222000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2181148486404191200,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6559102076450693000,{"persistent_metadata":{"reference":"To Graphic","display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8147814087664910471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2866788868013687300,{"persistent_metadata":{"reference":"To Graphic","display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Element","input_description":""}}],"output_names":["Table"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8309013977031955000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5250960114142560178,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,15]}}},"network_metadata":null}}],[13907401402762847509,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":["Modification"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,21]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2908374490615384600,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17790961655412892000,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7297408968096180000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13371003476981866000,{"persistent_metadata":{"reference":"Merge","display_name":"Bulb Glow Gradient","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-29,18]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14631609508767818000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3958246774416220000,{"persistent_metadata":{"reference":"Spline","display_name":"Spline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,15]}}},"network_metadata":null}}],[4331062027851128000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4534782777857480700,{"persistent_metadata":{"reference":"Merge","display_name":"Star Base","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16765094648901306000,{"persistent_metadata":{"reference":"Merge","display_name":"Bulb Housing","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4217566479741824000,{"persistent_metadata":{"reference":"Assign Colors","display_name":"Assign Colors","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Content","input_description":"The content with vector paths to apply the fill and/or stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"Whether to style the fill.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Stroke","input_description":"Whether to style the stroke.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_gradient","input_name":"Gradient","input_description":"The range of colors to select from.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Reverse","input_description":"Whether to reverse the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Randomize","input_description":"Whether to randomize the color selection for each element from throughout the gradient.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_seed","input_name":"Seed","input_description":"The seed used for randomization.\nSeed to determine unique variations on the randomized color selection.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":"assign_colors_repeat_every","input_name":"Repeat Every","input_description":"The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once.\n"}}],"output_names":["Content"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10504222558938851000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5737014828407011000,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[527.9166666666665,-576.1833333333332],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1518.0,4.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[],[2866788868013687300],[],[4352028121261571600],[],[2866788868013687300],[6559102076450693000],[6559102076450693000],[10775791528628074000],[],[6559102076450693000],[],[],[],[],[],[15084833709935380000],[],[16765094648901306000],[16765094648901306000,11815560782623298000],[16765094648901306000,13371003476981866000,11815560782623298000],[6559102076450693000,16765094648901306000,13394621587544123000,11815560782623298000,2866788868013687300,13371003476981866000],[3958246774416220000],[],[],[3958246774416220000],[3958246774416220000,655907162126315400],[],[3958246774416220000],[],[3958246774416220000],[655907162126315400,3958246774416220000],[],[],[3958246774416220000],[655907162126315400,3958246774416220000],[],[14631609508767818000],[],[5737014828407011000],[],[10118219203151733000],[],[],[],[],[],[],[655907162126315400],[],[],[655907162126315400,3958246774416220000],[],[],[16877573495957869000],[11411423299989983000],[16877573495957869000],[3471929742275053000],[11411423299989983000],[11411423299989983000,15209576944107258000],[15209576944107258000,3287844738046380000,11411423299989983000],[15209576944107258000,3287844738046380000,11411423299989983000,3958246774416220000],[3958246774416220000,655907162126315400,15209576944107258000,11411423299989983000,3287844738046380000],[4248875763694880300],[11411423299989983000],[3471929742275053000],[11411423299989983000],[15223368326030279287],[11815560782623298000],[11815560782623298000,16765094648901306000],[11815560782623298000],[13371003476981866000],[16765094648901306000],[15223368326030279287],[13371003476981866000],[13371003476981866000,16765094648901306000,11815560782623298000],[13371003476981866000],[11815560782623298000],[16765094648901306000],[13371003476981866000],[16765094648901306000],[11815560782623298000],[13371003476981866000],[11815560782623298000],[13371003476981866000],[16765094648901306000],[13371003476981866000],[16877573495957869000],[16765094648901306000],[13371003476981866000],[16765094648901306000],[11411423299989983000],[]],"selection_redo_history":[]}}},"collapsed":[],"commit_hash":"95bbc95606ba40ed7441fdf4e1b954d80b72e3dc","document_ptz":{"pan":[-500.157717622685,-499.8045823704831],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/red-dress.graphite b/demo-artwork/red-dress.graphite index e7e0ee5985..736ba39f1a 100644 --- a/demo-artwork/red-dress.graphite +++ b/demo-artwork/red-dress.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":2394762731964337494,"output_index":0,"lambda":false}}],"nodes":[[10127467043900015225,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[258.00000000000006,994.6666666666664]],[2,[644.0,726.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-328.66666666666674,129.33333333333337]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15961046538654083626,{"inputs":[{"Node":{"node_id":1889157037801767612,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17378885078543074499,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[5,[740.4444444444443,857.1111111111111]],[3,[707.5,1026.5]],[1,[823.2222222222221,660.4444444444445]],[7,[727.5555555555554,1026.6666666666663]],[4,[709.5555555555554,1026.6666666666667]],[2,[745.5,826.0]],[8,[746.0000000000001,842.9999999999999]],[6,[725.7777777777779,1026.370370370371]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[4,4],[3,3],[5,5],[7,7],[6,6],[1,1],[2,2],[8,8]],"end_point":[[5,6],[2,3],[7,8],[8,1],[6,7],[4,5],[1,2],[3,4]],"handle_primary":[[1,[0.0,0.0]],[7,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[2,[-24.5,85.0]],[8,[17.33333333333337,-84.99999999999989]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[8,[1.772016460905547,0.9591220850479658]],[4,[-23.11111111111109,90.44444444444456]],[2,[0.0,0.0]],[1,[24.5,-85.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[5,[-7.555555555555884,-59.25925925925992]],[7,[-26.8034437596026,131.4399645903585]]],"stroke":[[4,0],[6,0],[3,0],[8,0],[5,0],[2,0],[1,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14537754528543289381,{"inputs":[{"Node":{"node_id":1689789805659535712,"output_index":0,"lambda":false}},{"Node":{"node_id":17364155187784942740,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11656581020969095354,{"inputs":[{"Node":{"node_id":8413863870096329943,"output_index":0,"lambda":false}},{"Node":{"node_id":9698363115186534174,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4350324834849900949,{"inputs":[{"Node":{"node_id":6672826052605647592,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15857077552290328068,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[702.2222222222222,621.3333333333333]],[2,[820.8888888888889,395.55555555555554]],[3,[740.0,516.0]],[1,[848.8888888888889,330.66666666666663]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[2,3],[1,2],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-15.111111111111086,22.66666666666663]],[3,[-17.77777777777783,35.55555555555554]]],"handle_end":[[2,[17.77777777777783,-35.55555555555554]],[1,[15.111111111111086,-22.66666666666663]],[3,[6.222222222222172,-38.66666666666674]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15735375935164094402,{"inputs":[{"Node":{"node_id":3414873131936208778,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15239301303367148581,{"inputs":[{"Node":{"node_id":11268046366284173800,"output_index":0,"lambda":false}},{"Node":{"node_id":5269304445610080925,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[615144098061106242,{"inputs":[{"Node":{"node_id":14675232891471617236,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11058365317860779469,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[181.0,1023.0]],[4,[397.3333333333333,770.6666666666666]],[7,[311.3333333333333,1018.6666666666666]],[5,[479.00000000000006,817.0]],[6,[368.0,902.6666666666669]],[3,[352.0,833.0]],[2,[242.0,917.0]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[2,2],[5,5],[6,6],[4,4],[7,7],[1,1]],"end_point":[[7,1],[1,2],[4,5],[6,7],[2,3],[5,6],[3,4]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]],[5,[-35.31654570364651,23.463149348287175]],[3,[37.4110841377784,-16.935189837826556]],[2,[40.0718943376238,-39.16116946631416]],[6,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[-37.4110841377784,16.935189837826556]],[5,[45.99999999999994,-52.00000000000023]],[1,[-40.071894337623746,39.16116946631416]],[6,[18.0,-55.33333333333326]],[4,[35.31654570364611,-23.463149348286947]],[7,[0.0,1.3333333333337123]]],"stroke":[[3,0],[7,0],[4,0],[1,0],[6,0],[2,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14946189826912398678,{"inputs":[{"Node":{"node_id":10086073308516686449,"output_index":0,"lambda":false}},{"Node":{"node_id":12030171742672119253,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11553850607251055696,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[3,[594.085048010974,128.61454046639233]],[1,[597.5967078189302,96.04389574759946]],[8,[594.962962962963,111.93415637860085]],[2,[596.631001371742,112.37311385459536]],[5,[619.2812071330591,124.6639231824417]],[7,[591.5390946502059,128.7023319615912]],[6,[609.9753086419754,133.5308641975309]],[4,[608.570644718793,131.2482853223594]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[3,3],[4,4],[2,2],[7,7],[5,5],[6,6],[1,1],[8,8]],"end_point":[[3,4],[4,5],[1,2],[8,1],[5,6],[2,3],[7,8],[6,7]],"handle_primary":[[3,[3.5534615822588194,4.6302681223374975]],[2,[-4.126200274348321,7.1111111111111]],[4,[4.038408779149563,-1.492455418381354]],[5,[0.0,0.0]],[7,[-2.3703703703704377,-6.057613168724245]],[8,[4.1262002743484345,-6.935528120713329]],[1,[0.0,0.0]],[6,[-7.286694101508829,3.0727023319615796]]],"handle_end":[[4,[0.0,0.0]],[2,[-2.8971193415636662,-3.7750342935528063]],[7,[-4.1262002743484345,6.935528120713272]],[8,[-0.0877914951989851,0.08779149519889984]],[1,[4.126200274348321,-7.111111111111114]],[3,[-4.038408779149563,1.492455418381354]],[6,[2.3703703703704377,6.057613168724259]],[5,[7.286694101508829,-3.0727023319615796]]],"stroke":[[7,0],[6,0],[1,0],[3,0],[4,0],[8,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4453139144069993994,{"inputs":[{"Node":{"node_id":11804065810513502701,"output_index":0,"lambda":false}},{"Node":{"node_id":3955326429435439190,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5040278174920511484,{"inputs":[{"Node":{"node_id":14345191642063772510,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4577174813962563383,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[681.8346756482305,95.35045043533154]],[3,[682.7287205627164,97.04177207029592]],[4,[683.6813083078299,66.11925839089211]],[1,[681.3689965686843,65.32157692417977]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[4,[-1.0406539360374154,-1.1405457962673182]],[3,[-1.544754703853414,-12.605862910106907]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,null],[4,[-1.1368683772161605e-13,-1.4210854715202004e-14]],[1,[-2.6406503472093164,-12.592334294499352]],[2,[-0.5302752037773644,-0.69223185792994]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14225285635863713990,{"inputs":[{"Node":{"node_id":8410534738018320047,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[25.333333333333485,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11899713172487274471,{"inputs":[{"Node":{"node_id":9954843247420111867,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6580280438672662494,{"inputs":[{"Node":{"node_id":15395954548128560685,"output_index":0,"lambda":false}},{"Node":{"node_id":14598755603287563819,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17967471489196302183,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[339.25925925925924,1025.185185185185]],[3,[334.8148148148148,1025.4814814814813]],[2,[568.8888888888889,785.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[3,1],[1,2],[2,3]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[42.07407407407419,-157.6296296296293]],[1,[-209.77777777777777,108.44444444444468]],[3,null]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10086073308516686449,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3971837674569123876,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4222034829755771252,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[152.49382716049382,262.71604938271605]],[2,[155.25925925925927,256.7901234567901]],[4,[161.6241426611797,258.3703703703704]],[1,[165.5308641975309,250.07407407407408]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[4,[2.7654320987654444,-3.950617283950635]],[3,[0.0,0.0]],[2,[-1.9753086419753176,0.790123456790127]],[1,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[-0.3950617283950919,-1.7777777777777717]],[1,[1.9753086419753176,-0.790123456790127]],[3,[-2.7654320987654444,3.950617283950635]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4307303572241320716,{"inputs":[{"Node":{"node_id":4265165189651403984,"output_index":0,"lambda":false}},{"Node":{"node_id":4572557574846980832,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2878992817082507910,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[738.074074074074,1027.2592592592591]],[3,[741.6296296296296,1027.5555555555557]],[1,[777.4814814814814,867.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[-25.185185185185105,132.14814814814804]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9863310024364795214,{"inputs":[{"Node":{"node_id":5278509881589546420,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11025165626998987360,{"inputs":[{"Node":{"node_id":5326536612985524219,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-15.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[15982852655074258238,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[798.222222222222,639.8024691358025]],[1,[837.9999999999998,535.8024691358025]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[2,[31.037037037037067,-61.11111111111131]],[1,[0.0,0.0]]],"handle_end":[[2,null],[1,[34.000000000000114,-59.77777777777783]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17699121037850769131,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[429.33333333333326,295.1111111111111]],[3,[282.2222222222222,277.3333333333333]],[4,[158.22222222222223,332.0]],[1,[531.1111111111111,364.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[2,3],[1,2],[3,4]],"handle_primary":[[3,[-33.333333333333286,6.666666666666686]],[1,[0.0,0.0]],[2,[-56.8888888888888,-24.0]]],"handle_end":[[3,[60.0,-41.77777777777777]],[2,[33.333333333333314,-6.666666666666686]],[1,[56.8888888888888,24.0]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5174744389209053970,{"inputs":[{"Node":{"node_id":12385950900718181935,"output_index":0,"lambda":false}},{"Node":{"node_id":5040278174920511484,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1689789805659535712,{"inputs":[{"Node":{"node_id":15637103575662751567,"output_index":0,"lambda":false}},{"Node":{"node_id":11590691579869262546,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9778375740427894463,{"inputs":[{"Node":{"node_id":16137033772363318157,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5002654561220917457,{"inputs":[{"Node":{"node_id":11632506522064533635,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"U32":206},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8699675339613677057,{"inputs":[{"Node":{"node_id":15982852655074258238,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[40.2222222222224,-10.469135802469168]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18207065424980079673,{"inputs":[{"Node":{"node_id":13035777574951374461,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2660652185019504730,{"inputs":[{"Node":{"node_id":1806828617441445250,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2959546142916532439,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.5,1.0]],[1,[0.5,0.0]],[4,[0.0,0.5]],[2,[1.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[4,[0.0,-0.275892388889507]],[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]],[1,[0.27589238888950707,0.0]]],"handle_end":[[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[3,0],[2,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11479098559726891734,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[5,[718.310013717421,90.01554641060812]],[4,[704.5560128029263,81.29492455418381]],[6,[717.9588477366254,99.32144490169182]],[10,[712.047553726566,86.56241426611797]],[2,[669.2053040695015,63.20987654320987]],[7,[710.5648529187624,103.39887212315196]],[1,[660.660265203475,61.39551897576588]],[3,[686.5294924554183,63.38545953360767]],[8,[709.979576284103,102.93065081542449]],[11,[694.9574759945133,76.78829446730683]],[9,[717.5491540923639,95.80978509373573]],[12,[683.3104709647919,64.0877914951989]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[11,11],[1,1],[2,2],[10,10],[8,8],[6,6],[4,4],[9,9],[7,7],[12,12],[3,3],[5,5]],"end_point":[[9,10],[4,5],[8,9],[10,11],[12,1],[5,6],[11,12],[1,2],[6,7],[2,3],[3,4],[7,8]],"handle_primary":[[4,[8.369455875628773,2.867855509830818]],[8,[0.0,0.0]],[1,[0.0,0.0]],[5,[1.1120256058526363,1.9314128943758817]],[3,[3.4531321444902687,2.1655235482396193]],[12,[-12.8760859625055,-0.4682213077274682]],[11,[-5.618655692729931,-7.257430269775952]],[7,[-0.585276634659408,-0.4682213077274753]],[10,[-4.096936442615174,-1.872885230909901]],[9,[0.17558299039785652,-3.5116598079561214]],[6,[-1.9184335509834227,1.995170893022717]],[2,[5.4430727023319605,-0.6438042981252892]]],"handle_end":[[11,[4.036165212980222,0.14676964410837456]],[1,[-5.4430727023319605,0.6438042981252892]],[6,[1.706505264591101,-0.4025776799149554]],[9,[4.0931309699032,1.8711455862415676]],[10,[5.464020763447934,7.057693486120044]],[5,[2.926383173296813,-3.043438500228561]],[2,[-3.4853769593560173,-2.1857448728164144]],[12,[4.9748513946045705,5.91129401005945]],[7,null],[8,[-0.17558299039785652,3.511659807956093]],[3,[-8.369455875628773,-2.867855509830818]],[4,[-1.8416562954789697,-3.1986661974113133]]],"stroke":[[5,0],[11,0],[1,0],[7,0],[2,0],[4,0],[9,0],[3,0],[6,0],[10,0],[12,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6282972142629473139,{"inputs":[{"Node":{"node_id":15815816861435910950,"output_index":0,"lambda":false}},{"Node":{"node_id":15578929303912288394,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3406722917122601552,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[1167210731467447244,{"inputs":[{"Node":{"node_id":16551385471328831128,"output_index":0,"lambda":false}},{"Node":{"node_id":10432831427187785843,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16530658574540156160,{"inputs":[{"Node":{"node_id":11666664915283969027,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[23.70370370370381,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4248321400839848160,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13231685386999438557,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[907841922684377912,{"inputs":[{"Node":{"node_id":17336535036064625290,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12219771677493189964,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":5140869461760168364,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9954843247420111867,{"inputs":[{"Node":{"node_id":6988349135757634271,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.14046639231827385,0.1473642955124319]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10619788176782820865,{"inputs":[{"Node":{"node_id":2397243911096708995,"output_index":0,"lambda":false}},{"Node":{"node_id":1157261387411722141,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14285767317419627814,{"inputs":[{"Node":{"node_id":6749771744300551215,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12049041947382267086,{"inputs":[{"Node":{"node_id":2959546142916532439,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[25.77777777777777,508.44444444444446]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[8.0,8.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11573595155909211511,{"inputs":[{"Node":{"node_id":10127467043900015225,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17891208858820401648,{"inputs":[{"Node":{"node_id":1204243038352113866,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-7.407407407407391,4.740740740740762]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15949658764632267703,{"inputs":[{"Node":{"node_id":14012583111791538162,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13352561089252322209,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[752.4444444444443,739.1111111111111]],[4,[615.5555555555555,1025.7777777777778]],[2,[749.7777777777777,741.7777777777778]],[1,[612.0,1025.3333333333333]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[-0.4444444444444571,0.0]],[1,[-112.0,179.55555555555577]],[3,[28.000000000000114,-107.55555555555544]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10689298484366290551,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[155.85185185185185,253.03703703703707]],[2,[151.22962962962964,252.1283950617284]],[1,[156.93571992954355,246.07901729349]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[2,3],[3,1],[1,2]],"handle_primary":[[2,[-0.4744436253241133,1.2651830008642833]],[1,[-2.071522398679349,1.8617234472507391]],[3,[1.0949818244169762,-0.3546380887060252]]],"handle_end":[[1,[0.9481481481481068,-2.5283950617284177]],[3,[1.9215307714004553,1.0902372408288272]],[2,[-1.0949818244169762,0.3546380887060252]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1785173043494067496,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[770.2222222222222,459.1111111111111]],[1,[566.6666666666666,576.0]],[3,[712.0,519.1111111111111]],[2,[636.4444444444443,579.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[2,3],[3,4],[1,2]],"handle_primary":[[2,[31.1111111111112,-17.33333333333337]],[3,[18.22222222222217,-21.777777777777715]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[-31.1111111111112,17.33333333333337]],[2,[-18.22222222222217,21.777777777777715]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12554368619682347699,{"inputs":[{"Node":{"node_id":2594533001540454577,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[13261814586176172586,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"delta":[[7,[680.4331323644109,506.0568995183343]],[15,[817.4814814814815,272.2962962962963]],[3,[851.1111111111111,237.7777777777778]],[12,[715.8518518518517,452.14814814814815]],[2,[827.2592592592594,206.41975308641975]],[10,[755.3580246913581,432.5925925925926]],[5,[829.8271604938273,345.08641975308643]],[4,[858.6666666666666,268.88888888888886]],[16,[809.1851851851852,207.1111111111111]],[14,[782.8148148148148,378.96296296296293]],[6,[775.5061728395061,429.23456790123464]],[1,[799.1111111111112,188.14814814814815]],[9,[758.716049382716,441.8765432098765]],[8,[686.5302034429451,490.6109861193811]],[13,[736.8888888888889,432.2962962962963]],[11,[719.9999999999999,460.8395061728396]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"start_point":[[8,8],[7,7],[5,5],[9,9],[15,15],[13,13],[12,12],[6,6],[10,10],[2,2],[1,1],[14,14],[3,3],[16,16],[4,4],[11,11]],"end_point":[[2,3],[12,13],[7,8],[13,14],[4,5],[9,10],[10,11],[5,6],[3,4],[15,16],[14,15],[1,2],[8,9],[6,7],[11,12],[16,1]],"handle_primary":[[4,[-2.5679012345678984,17.77777777777777]],[3,[9.086419753086489,9.086419753086432]],[10,[0.0,0.0]],[2,[0.0,0.0]],[6,[-36.541158121167314,42.67873357730855]],[5,[-31.06481223802939,48.93526760703577]],[12,[0.0,0.0]],[9,[0.0,0.0]],[8,[37.39536928167615,-11.787670751832536]],[7,null],[1,[0.0,0.0]],[15,[5.925925925925867,-34.96296296296299]],[14,[20.148148148148152,-33.481481481481524]],[11,[0.0,0.0]],[16,[0.0,0.0]],[13,[0.0,0.0]]],"handle_end":[[2,[-9.086419753086489,-9.086419753086432]],[12,[0.0,0.0]],[1,[0.0,0.0]],[14,[-5.925925925925867,34.96296296296299]],[11,[0.0,0.0]],[7,null],[10,[0.0,0.0]],[16,[0.0,0.0]],[5,[18.3855550289378,-21.473654506216747]],[4,[31.06481223802939,-48.93526760703571]],[8,[-11.555555555555657,17.18518518518522]],[15,[6.51851851851859,11.851851851851848]],[3,[2.5679012345678984,-17.77777777777777]],[6,[22.320987654321016,-14.222222222222342]],[9,[0.0,0.0]],[13,[-20.148148148148152,33.481481481481524]]],"stroke":[[13,0],[2,0],[14,0],[7,0],[16,0],[9,0],[6,0],[5,0],[10,0],[12,0],[4,0],[15,0],[11,0],[8,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":16}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11616089678400336955,{"inputs":[{"Node":{"node_id":2660652185019504730,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.8},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17336535036064625290,{"inputs":[{"Node":{"node_id":10421722418968896452,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[49.47996245659249,5.913900401382151]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9277405532359332,0.9277405532359332]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1621196991038859321,{"inputs":[{"Node":{"node_id":15857077552290328068,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3150436463719911922,{"inputs":[{"Node":{"node_id":18214377096178867498,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5455777299776842371,{"inputs":[{"Node":{"node_id":9470742171134780193,"output_index":0,"lambda":false}},{"Node":{"node_id":7385465194555106679,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13045580349734858212,{"inputs":[{"Node":{"node_id":10795820039540504703,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10432831427187785843,{"inputs":[{"Node":{"node_id":2087303479944421366,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14209241002058525241,{"inputs":[{"Node":{"node_id":16290933138334939444,"output_index":0,"lambda":false}},{"Node":{"node_id":10918055532782314571,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9374264173303233490,{"inputs":[{"Node":{"node_id":1713644030979611623,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8934999452649011837,{"inputs":[{"Node":{"node_id":16796171662855500935,"output_index":0,"lambda":false}},{"Node":{"node_id":16756940771483104467,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4787732047489141819,{"inputs":[{"Node":{"node_id":12062649793560663566,"output_index":0,"lambda":false}},{"Node":{"node_id":4248321400839848160,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16614450796751955858,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[5,[807.3333333333334,1026.0]],[6,[845.3333333333333,842.0000000000001]],[4,[327.3333333333333,1024.6666666666663]],[7,[918.6666666666664,604.6666666666666]],[2,[757.1358024691358,661.5308641975308]],[1,[902.6666666666666,446.6666666666667]],[3,[481.33333333333337,826.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[3,3],[7,7],[5,5],[2,2],[4,4],[6,6]],"end_point":[[7,1],[6,7],[1,2],[2,3],[3,4],[4,5],[5,6]],"handle_primary":[[7,[16.000000000000227,-89.99999999999989]],[1,[0.0,0.0]],[2,[-138.41983388553547,108.26897897977506]],[4,[0.0,0.0]],[5,[0.0,0.0]],[6,[49.4943341398548,-116.98660796692934]],[3,[-131.33333333333337,78.66666666666652]]],"handle_end":[[7,[3.3333333333333712,32.00000000000006]],[6,[-16.71260304301461,94.00839211695676]],[1,[134.66666666666686,-105.33333333333326]],[2,[143.2366194125077,-85.79655375977609]],[4,[0.0,0.0]],[3,[0.0,0.0]],[5,[-36.66666666666663,86.66666666666652]]],"stroke":[[7,0],[1,0],[5,0],[3,0],[4,0],[2,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6666260895482068061,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[645.3845450388659,135.9012345679012]],[2,[645.6821893629258,155.3850506865855]],[1,[643.0921942512911,135.30336230847865]],[3,[646.4033730994855,154.80329633678198]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[3,[-0.2558402858584259,-10.083527774255913]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[-0.3446760851414865,0.611494768909921]],[1,[-0.05703059647760256,-13.444628325495556]],[3,[0.0,0.0]],[4,[1.68322954928135,-0.022087435068414152]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7893851488963635918,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[24.0,486.0]],[1,[125.0,420.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[23.0,-70.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3802858053991775169,{"inputs":[{"Node":{"node_id":11058365317860779469,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11199691961479466803,{"inputs":[{"Node":{"node_id":7141088190930752823,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[7141088190930752823,{"inputs":[{"Node":{"node_id":541002100261582638,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18319784717194273926,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[11,[595.0,690.0]],[5,[418.2222222222222,754.6666666666666]],[2,[150.22222222222223,568.4444444444445]],[8,[706.6666666666666,687.5555555555554]],[12,[437.99999999999994,690.0]],[1,[172.22222222222217,564.7777777777779]],[10,[610.6666666666666,712.4444444444443]],[6,[443.1111111111111,783.1111111111111]],[9,[828.0,570.2222222222221]],[3,[167.0,691.0]],[7,[558.6666666666666,749.7777777777778]],[4,[574.6666666666666,712.4444444444443]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[8,8],[2,2],[9,9],[4,4],[5,5],[10,10],[11,11],[7,7],[3,3],[12,12],[6,6]],"end_point":[[2,3],[4,5],[10,11],[12,1],[11,12],[7,8],[5,6],[8,9],[6,7],[1,2],[9,10],[3,4]],"handle_primary":[[10,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[11,[0.0,0.0]],[12,[-98.22222222222224,-28.0]],[7,[32.888888888888914,-13.333333333333483]],[3,[0.0,0.0]],[6,[0.0,0.0]],[2,[18.111111111111057,85.22222222222229]],[8,[60.44444444444446,-39.55555555555566]],[5,[0.0,0.0]],[9,[0.0,0.0]]],"handle_end":[[7,[-60.44444444444446,39.55555555555566]],[2,null],[4,[54.22222222222223,-9.333333333333371]],[6,[-32.888888888888914,13.333333333333483]],[9,[145.77777777777771,-61.777777777777715]],[11,[98.22222222222224,28.0]],[1,null],[12,[161.33333333333337,34.66666666666674]],[3,[-128.44444444444446,26.22222222222217]],[10,[-1.3333333333333712,21.77777777777783]],[8,[0.0,0.0]],[5,[-18.66666666666663,-4.888888888888914]]],"stroke":[[6,0],[7,0],[2,0],[8,0],[9,0],[10,0],[3,0],[4,0],[1,0],[5,0],[12,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4479074488343511985,{"inputs":[{"Node":{"node_id":11479098559726891734,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6156863,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6156863,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16137033772363318157,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[688.566255144033,175.3371742112483]],[3,[720.1360768175583,181.58792866941016]],[2,[720.417009602195,178.00603566529497]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[2,[1.8041152263373303,2.00164609053499]],[1,[29.423007364946784,-0.024697364703285984]],[3,[-1.1237311385458495,-3.125377229080982]]],"handle_end":[[2,null],[3,[12.04499314128941,0.8076817558298615]],[1,null]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3170924135668664007,{"inputs":[{"Node":{"node_id":4787732047489141819,"output_index":0,"lambda":false}},{"Node":{"node_id":13444661581815146533,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16051539163551573193,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[2,[609.7777777777777,896.0]],[4,[519.1111111111111,1026.2222222222222]],[1,[708.0000000000001,769.3333333333333]],[3,[514.6666666666666,1025.7777777777778]],[5,[588.0,930.6666666666666]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[1,1],[5,5],[2,2],[4,4]],"end_point":[[2,3],[3,4],[4,5],[5,1],[1,2]],"handle_primary":[[3,[0.0,0.0]],[5,[24.0,-29.77777777777783]],[2,[-54.66666666666663,69.33333333333314]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[5,[-28.44444444444457,47.111111111111086]],[4,[-24.0,29.777777777777715]],[1,[54.66666666666663,-69.33333333333326]],[3,[0.0,0.0]]],"stroke":[[5,0],[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6292009934909381201,{"inputs":[{"Node":{"node_id":10424806499648491677,"output_index":0,"lambda":false}},{"Node":{"node_id":9778375740427894463,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1204243038352113866,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[808.8888888888889,832.2962962962965]],[2,[837.3333333333334,653.6296296296296]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[-26.22222222222217,80.29629629629608]]],"handle_end":[[1,[-22.22222222222217,79.40740740740739]],[2,[0.0,-0.4444444444443434]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4572557574846980832,{"inputs":[{"Node":{"node_id":13014916927589286309,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-60.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[12062649793560663566,{"inputs":[{"Node":{"node_id":5455777299776842371,"output_index":0,"lambda":false}},{"Node":{"node_id":8934999452649011837,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3992858139802231032,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[648.9547325102881,151.8792866941015]],[1,[634.615454961134,135.08184727937814]],[2,[635.8445358939186,153.225422953818]],[4,[645.384545038866,135.90123456790124]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[4,4],[2,2]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[2,[6.203932327389111,7.491540923639718]],[4,[0.0,0.0]],[3,[1.8143575674440624,-2.575217192501128]],[1,[0.0,0.0]]],"handle_end":[[1,[-6.203932327389111,-7.491540923639718]],[2,[-1.8143575674440624,2.575217192501128]],[3,[6.730681298582454,7.257430269775966]],[4,[9.247370827617717,-0.3511659807956278]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17494926338451345058,{"inputs":[{"Node":{"node_id":1167210731467447244,"output_index":0,"lambda":false}},{"Node":{"node_id":9529195152569434392,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14098374807212007572,{"inputs":[{"Node":{"node_id":17494926338451345058,"output_index":0,"lambda":false}},{"Node":{"node_id":10336592647221792772,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8091904580702893317,{"inputs":[{"Node":{"node_id":15446793500614592278,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15492651270767932214,{"inputs":[{"Node":{"node_id":6580280438672662494,"output_index":0,"lambda":false}},{"Node":{"node_id":2698266912167150713,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10918055532782314571,{"inputs":[{"Node":{"node_id":7447657690776686262,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[18067513817508158001,{"inputs":[{"Node":{"node_id":16649851742084147477,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1661691009086487874,{"inputs":[{"Node":{"node_id":14797986717815207528,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14029368390543839187,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[668.4444444444445,516.4444444444443]],[1,[604.8888888888889,523.5555555555557]],[3,[808.0,413.33333333333337]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[23.1111111111112,-9.7777777777776]]],"handle_end":[[2,[-59.111111111111086,58.22222222222223]],[1,[-23.1111111111112,9.7777777777776]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15896921950407486754,{"inputs":[{"Node":{"node_id":13163272246010991228,"output_index":0,"lambda":false}},{"Node":{"node_id":11199691961479466803,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15466714490303763249,{"inputs":[{"Node":{"node_id":10514847656270897393,"output_index":0,"lambda":false}},{"Node":{"node_id":11659756061767599421,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2659768650911099730,{"inputs":[{"Node":{"node_id":13045087323693407920,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12224498203743157414,{"inputs":[{"Node":{"node_id":2878992817082507910,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13045087323693407920,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[227.0,496.0]],[1,[19.0,494.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-98.0,-55.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8240895922641772563,{"inputs":[{"Node":{"node_id":16530658574540156160,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13644138583806412631,{"inputs":[{"Node":{"node_id":2641530639940889619,"output_index":0,"lambda":false}},{"Node":{"node_id":12473080738469616517,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11021243031011826737,{"inputs":[{"Node":{"node_id":16446146761452576438,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17064046832210629373,{"inputs":[{"Node":{"node_id":12219771677493189964,"output_index":0,"lambda":false}},{"Node":{"node_id":11677503666435782605,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10420981328998103391,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[844.4444444444443,460.44444444444434]],[1,[859.5555555555554,375.1111111111111]],[3,[694.2222222222222,623.5555555555554]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[-11.999999999999886,30.6666666666668]]],"handle_end":[[1,[11.055745483535702,-28.253571791258253]],[2,[76.88888888888891,-30.666666666666742]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15460109068588328521,{"inputs":[{"Node":{"node_id":5185036609290210853,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9019608,"green":0.8,"blue":0.6,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9019608,"green":0.8,"blue":0.6,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17815494794630739611,{"inputs":[{"Node":{"node_id":14079496619264986678,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4131094614457622424,{"inputs":[{"Node":{"node_id":11356586238302409958,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10860592954464951000,{"inputs":[{"Node":{"node_id":4236845268521674740,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12387541320114693418,{"inputs":[{"Node":{"node_id":5471152581000334146,"output_index":0,"lambda":false}},{"Node":{"node_id":15460109068588328521,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9182448229950585507,{"inputs":[{"Node":{"node_id":12496143061817048445,"output_index":0,"lambda":false}},{"Node":{"node_id":7320676248579211727,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[431994205232245356,{"inputs":[{"Node":{"node_id":12387541320114693418,"output_index":0,"lambda":false}},{"Node":{"node_id":14894569344576297448,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12594527670567285670,{"inputs":[{"Node":{"node_id":4663768795652429571,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14345191642063772510,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[838.2222222222222,766.6666666666669]],[1,[880.8888888888888,556.4444444444443]],[3,[813.3557395833334,961.1454375]],[2,[833.7777777777777,780.4444444444443]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[1,2],[4,1],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[-9.333333333333371,54.66666666666674]],[4,[10.643023589139377,-58.51588472312813]]],"handle_end":[[1,[9.333333333333371,-54.66666666666674]],[2,[0.0,0.0]],[3,[-10.643023589139377,58.51588472312813]],[4,[-0.4444444444444571,-0.8888888888888005]]],"stroke":[[3,0],[1,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12531351117929704587,{"inputs":[{"Node":{"node_id":11194653561109699287,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12801133692316734622,{"inputs":[{"Node":{"node_id":17699121037850769131,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12385950900718181935,{"inputs":[{"Node":{"node_id":4372998635946271235,"output_index":0,"lambda":false}},{"Node":{"node_id":615144098061106242,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1713644030979611623,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[404.0,882.6666666666666]],[2,[321.33333333333326,1022.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[30.96296296296316,-100.2222222222224]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3649809135741361946,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[841.3333333333333,336.8888888888889]],[1,[787.1111111111111,414.66666666666663]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-21.333333333333258,48.888888888888914]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5213978458941436169,{"inputs":[{"Node":{"node_id":13261814586176172586,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":7.0},"exposed":false}},{"Value":{"tagged_value":{"U32":10},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4663768795652429571,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[708.8285322359397,101.48696844993144]],[6,[706.633744855967,98.10699588477364]],[5,[710.8379820149368,102.96966925773508]],[4,[713.0620332266423,107.3007163542143]],[1,[691.7530864197531,86.91358024691357]],[2,[696.6255144032922,96.92181069958846]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[1,1],[5,5],[6,6],[4,4],[3,3]],"end_point":[[3,4],[5,6],[2,3],[4,5],[1,2],[6,1]],"handle_primary":[[5,[-0.8974241731443726,-2.770309404054231]],[6,[-6.847736625514244,-2.3703703703703525]],[3,[1.7753391251332005,4.7992684042066]],[2,[6.057613168724288,1.9753086419753032]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[-6.057613168724288,-1.9753086419753032]],[6,[1.1851851851849915,8.823045267489718]],[5,[2.9051419934493197,1.005626074655538]],[3,[-0.9218106995884908,-0.3950617283950635]],[4,[0.786301337230384,2.4272780410153985]],[2,[-0.7886938944185431,-2.1320736046921525]]],"stroke":[[6,0],[1,0],[5,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10599660455959346550,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[572.0,570.2222222222222]],[1,[478.2222222222222,515.1111111111111]],[4,[745.3333333333333,471.55555555555554]],[3,[654.6666666666666,546.6666666666666]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[3,[26.222222222222285,-16.0]],[1,[0.0,0.0]],[2,[31.555555555555543,7.555555555555543]]],"handle_end":[[3,[0.0,0.0]],[1,[-31.555555555555543,-7.555555555555543]],[2,[-26.222222222222285,16.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16756940771483104467,{"inputs":[{"Node":{"node_id":13975451746581400000,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17207895962122263432,{"inputs":[{"Node":{"node_id":11573595155909211511,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2175432926627256613,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14982414026754548178,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17945736750161448391,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[688.3433248095167,92.67923984990472]],[3,[687.4660700953133,94.52064202140812]],[1,[689.4327280262556,73.68042956754955]],[4,[687.6968543916372,70.6398816184091]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[1,1],[2,2]],"end_point":[[3,4],[2,3],[4,1],[1,2]],"handle_primary":[[1,[-1.460603632035259,12.298077567102167]],[3,[-0.975596082205584,-10.16276974584038]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.6631784948407358,-0.4471776104951459]],[4,[-0.3670368206467174,-1.6914035044494111]],[3,[0.0,0.0]],[1,null]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16324258033206362312,{"inputs":[{"Node":{"node_id":16732130236852371275,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[14079496619264986678,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[597.2345679012346,77.92592592592592]],[2,[608.9876543209878,75.25925925925925]],[3,[609.2839506172841,76.74074074074073]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[3,1],[1,2],[2,3]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[-6.222222222222172,-0.9876543209876588]],[3,[8.09876543209873,0.2962962962962763]],[2,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10253927692147706615,{"inputs":[{"Node":{"node_id":7262199696924786895,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[9529195152569434392,{"inputs":[{"Node":{"node_id":3121275823460307102,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12876462860151722087,{"inputs":[{"Node":{"node_id":10619788176782820865,"output_index":0,"lambda":false}},{"Node":{"node_id":10415872992231003638,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11268046366284173800,{"inputs":[{"Node":{"node_id":4453139144069993994,"output_index":0,"lambda":false}},{"Node":{"node_id":11616089678400336955,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15303587427289959766,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[818.2222222222222,566.2222222222222]],[1,[610.6666666666666,706.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-82.66666666666674,97.77777777777771]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12761901161949743155,{"inputs":[{"Node":{"node_id":7659717355245331967,"output_index":0,"lambda":false}},{"Node":{"node_id":8091904580702893317,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14887821801874852671,{"inputs":[{"Node":{"node_id":8230694129617719636,"output_index":0,"lambda":false}},{"Node":{"node_id":18279507457571359732,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6416452251137958677,{"inputs":[{"Node":{"node_id":9374264173303233490,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[11194653561109699287,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[604.3716161316235,95.4260819221956]],[6,[603.4567901234567,92.83950617283948]],[2,[607.4000914494741,86.85505258344766]],[3,[623.4951989026065,81.23639689071788]],[5,[602.0316509633005,90.5516059992284]],[4,[605.761316872428,82.28989483310471]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[4,4],[5,5],[1,1],[2,2],[3,3]],"end_point":[[5,6],[2,3],[3,4],[6,1],[4,5],[1,2]],"handle_primary":[[5,[0.0,0.0]],[1,[0.0,0.0]],[4,[-3.2460274482192517,2.85650415443304]],[3,[-0.7803688462123546,-2.7117817405883216]],[6,[0.3965701826469967,0.8240731861035471]],[2,[3.687242798354191,-3.4531321444901835]]],"handle_end":[[4,[-0.10095077423932251,-1.27829797882373]],[5,[-0.3896135191956773,-0.8096172333722365]],[2,[-1.0144795000761633,1.6192653558908745]],[3,[4.389574759945049,-3.862825788751721]],[1,[-3.3249738510837687,3.113864400221118]],[6,[-2.273736754432321e-13,-4.263256414560601e-14]]],"stroke":[[3,0],[5,0],[1,0],[4,0],[6,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7747398671834040298,{"inputs":[{"Node":{"node_id":18319784717194273926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":47},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1869448627329502330,{"inputs":[{"Node":{"node_id":3827449344952693766,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[16796171662855500935,{"inputs":[{"Node":{"node_id":14993053984267866751,"output_index":0,"lambda":false}},{"Node":{"node_id":9371909264427723282,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14012648643507848353,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[615.7168724279835,33.05349794238683]],[4,[613.6098765432099,30.393415637860084]],[1,[610.080658436214,28.760493827160495]],[2,[613.7152263374486,29.076543209876547]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[4,1],[3,4],[2,3],[1,2]],"handle_primary":[[4,[-1.3168724279836397,-1.343209876543213]],[2,[1.5990193552247547,1.4582133097558128]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[0.7962610294339356,0.812186250022549]],[2,[-0.05267489711934559,-0.9218106995884768]],[4,[0.05267489711934559,0.02633744855966924]],[1,[-1.447323438899616,-1.3198753943965968]]],"stroke":[[3,0],[2,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7525593029671097583,{"inputs":[{"Node":{"node_id":16175421708184657649,"output_index":0,"lambda":false}},{"Node":{"node_id":15735375935164094402,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14894569344576297448,{"inputs":[{"Node":{"node_id":5555007473125503522,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15578929303912288394,{"inputs":[{"Node":{"node_id":10770443343193024138,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10133176481349663495,{"inputs":[{"Node":{"node_id":12876462860151722087,"output_index":0,"lambda":false}},{"Node":{"node_id":11021243031011826737,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4332145463108161926,{"inputs":[{"Node":{"node_id":3406722917122601552,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9740500978584792725,{"inputs":[{"Node":{"node_id":14946189826912398678,"output_index":0,"lambda":false}},{"Node":{"node_id":10586744777717861556,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10421722418968896452,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[691.7384545038866,78.07590306355738]],[2,[683.3689986282578,99.49702789208962]],[1,[677.8673982624599,66.19478737997257]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[3,1],[1,2],[2,3]],"handle_primary":[[3,[0.12630166293718048,-1.7247569518707309]],[2,[0.34676700844204333,0.512429191350904]],[1,[-0.49434169374126213,0.7369041683249975]]],"handle_end":[[1,[-7.636184307015128,-11.284244620129414]],[3,[5.6142033131263815,-8.368968014727507]],[2,[-1.4537474229852023,19.852161212683583]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16551385471328831128,{"inputs":[{"Node":{"node_id":14991324592500870173,"output_index":0,"lambda":false}},{"Node":{"node_id":17207349373429328029,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6532401937876437300,{"inputs":[{"Node":{"node_id":3992858139802231032,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3971837674569123876,{"inputs":[{"Node":{"node_id":4131094614457622424,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.3528},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[6988349135757634271,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[189.14614932392712,263.9984322947286]],[4,[184.5962505715592,263.55006858710567]],[2,[188.0493827160494,269.116049382716]],[3,[183.0891632373113,268.771154223006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[3,[-0.9800640224909783,-1.3570273385153655]],[2,[-1.9972565157751203,0.9588085439937686]],[4,[1.697261300324044,-1.9917992948792855]],[1,[1.552958476004363,1.9059035841873424]]],"handle_end":[[2,[1.0091841400482906,1.3973479652491392]],[3,[-1.5959762231368018,1.872937487752267]],[4,[-1.464617942413156,-1.7974856565980986]],[1,[3.459421910557637,-1.6607397492127802]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1384427686127078856,{"inputs":[{"Node":{"node_id":17064046832210629373,"output_index":0,"lambda":false}},{"Node":{"node_id":17529660518597229229,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14057307926677215422,{"inputs":[{"Node":{"node_id":5861306074868809692,"output_index":0,"lambda":false}},{"Node":{"node_id":7450965328305122110,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4832236468224231783,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[369.77777777777777,381.7777777777778]],[1,[232.44444444444443,332.8888888888889]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-73.77777777777777,-53.77777777777777]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14991324592500870173,{"inputs":[{"Node":{"node_id":542361600097372754,"output_index":0,"lambda":false}},{"Node":{"node_id":10860592954464951000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11630078441485655672,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[751.4074074074075,685.0370370370371]],[1,[760.6913580246915,657.5802469135803]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,1],[1,2]],"handle_primary":[[2,[4.543209876543187,-10.271604938271594]],[1,[0.0,0.0]]],"handle_end":[[1,[7.111111111110972,-8.44444444444457]],[2,null]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3970516859959908758,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[78.22222222222219,579.2592592592591]],[1,[49.77777777777773,636.148148148148]],[3,[170.96296296296293,544.5925925925925]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[27.259259259259252,-24.88888888888891]]],"handle_end":[[2,[-21.62962962962962,-2.0740740740740193]],[1,[-27.259259259259267,24.88888888888891]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13302269488061286120,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[262.66666666666674,903.3333333333331]],[2,[565.3333333333335,756.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-200.66666666666652,64.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1889157037801767612,{"inputs":[{"Node":{"node_id":17324767436949538365,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":18},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10270446074640675342,{"inputs":[{"Node":{"node_id":14883504161508594099,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4078100635676202528,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"delta":[[19,[613.4518518518519,26.429629629629623]],[15,[677.925925925926,46.222222222222214]],[21,[605.3925925925926,49.42222222222222]],[12,[683.3777777777777,50.48888888888889]],[10,[653.1555555555556,49.89629629629629]],[1,[606.3407407407408,47.76296296296296]],[3,[613.4518518518519,35.43703703703703]],[14,[698.3111111111111,43.61481481481481]],[6,[676.2666666666667,48.47407407407407]],[26,[607.3152263374486,46.38024691358025]],[23,[608.5794238683127,44.82633744855967]],[16,[661.0962962962963,35.792592592592584]],[20,[601.2444444444444,36.859259259259254]],[13,[707.0814814814814,53.33333333333333]],[11,[665.4814814814815,56.05925925925925]],[17,[639.762962962963,37.45185185185185]],[4,[627.9111111111112,43.73333333333333]],[18,[621.2740740740741,37.21481481481481]],[24,[605.998353909465,33.79094650205761]],[8,[667.2592592592594,52.029629629629625]],[9,[642.4888888888889,44.44444444444444]],[25,[604.6288065843622,39.321810699588475]],[5,[653.9851851851852,38.99259259259259]],[22,[607.6312757201646,47.64444444444445]],[2,[603.4962962962964,36.977777777777774]],[7,[684.4444444444445,46.1037037037037]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"start_point":[[17,17],[25,25],[26,26],[12,12],[8,8],[23,23],[2,2],[15,15],[16,16],[22,22],[1,1],[5,5],[7,7],[10,10],[21,21],[18,18],[13,13],[3,3],[20,20],[9,9],[6,6],[19,19],[11,11],[14,14],[24,24],[4,4]],"end_point":[[16,17],[9,10],[8,9],[5,6],[11,12],[6,7],[1,2],[12,13],[26,1],[13,14],[25,26],[18,19],[17,18],[22,23],[7,8],[4,5],[14,15],[23,24],[2,3],[10,11],[15,16],[21,22],[19,20],[3,4],[24,25],[20,21]],"handle_primary":[[19,[-3.3185185185185446,-1.1851851851851831]],[13,[0.0,0.0]],[4,[6.992592592592587,-0.23703703703703383]],[2,[2.1333333333333258,-5.68888888888889]],[24,[0.0,0.0]],[6,[4.5037037037037635,1.1851851851851831]],[22,[0.0,0.0]],[7,[0.0,0.0]],[3,[2.9629629629629335,4.385185185185186]],[1,[0.0,0.0]],[21,[0.0,0.0]],[9,[0.0,0.0]],[14,[-10.90370370370374,-2.6074074074074076]],[5,[10.311111111111131,0.5925925925925952]],[15,[-2.844444444444548,-0.829629629629629]],[18,[-3.437037037037044,-4.148148148148145]],[10,[2.251851851851825,2.2518518518518533]],[25,[0.18814026836287212,2.510418336797158]],[20,[-1.5407407407407163,8.651851851851852]],[12,[6.9925925925927,-4.740740740740748]],[8,[-10.666666666666629,-0.7111111111111157]],[26,[0.0,0.0]],[23,[-2.2123456790121736,-2.3967078189300537]],[11,[3.318518518518431,-0.11851851851851336]],[17,[-6.992592592592587,2.962962962962962]],[16,[-5.214814814814758,-1.3037037037037038]]],"handle_end":[[2,[-2.9629629629629335,-4.385185185185186]],[11,[-6.9925925925927,4.740740740740748]],[9,[-2.251851851851825,-2.2518518518518533]],[23,[0.0,0.0]],[24,[-0.13898543393838736,-1.8545289902200464]],[4,[-10.311111111111131,-0.5925925925925952]],[3,[-6.992592592592587,0.23703703703703383]],[17,[3.437037037037044,4.148148148148145]],[18,[3.3185185185185446,1.1851851851851831]],[26,[0.0,0.0]],[13,[10.90370370370374,2.6074074074074076]],[16,[6.992592592592587,-2.962962962962962]],[5,[-4.5037037037037635,-1.1851851851851904]],[21,[0.0,0.0]],[19,[1.5407407407407163,-8.651851851851855]],[8,[9.36296296296291,-2.4888888888888943]],[20,[0.0,0.0]],[25,[0.0,0.0]],[6,[0.0,0.0]],[12,[-3.0814814814815463,-9.48148148148148]],[10,[-3.318518518518431,0.11851851851851336]],[14,[2.844444444444548,0.829629629629629]],[22,null],[1,[-2.1333333333333258,5.68888888888889]],[15,[5.214814814814758,1.3037037037037038]],[7,[10.666666666666629,0.7111111111111086]]],"stroke":[[21,0],[25,0],[5,0],[12,0],[17,0],[24,0],[22,0],[7,0],[20,0],[4,0],[3,0],[23,0],[19,0],[8,0],[14,0],[6,0],[13,0],[9,0],[16,0],[11,0],[1,0],[26,0],[15,0],[10,0],[18,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":26}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2422139482859833437,{"inputs":[{"Node":{"node_id":14537754528543289381,"output_index":0,"lambda":false}},{"Node":{"node_id":172538270105470471,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4372998635946271235,{"inputs":[{"Node":{"node_id":13481022631108980683,"output_index":0,"lambda":false}},{"Node":{"node_id":2126710823743005151,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[542361600097372754,{"inputs":[{"Node":{"node_id":17971411534648521628,"output_index":0,"lambda":false}},{"Node":{"node_id":6867142265138950838,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14888395629683671889,{"inputs":[{"Node":{"node_id":4341772758799935306,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2698266912167150713,{"inputs":[{"Node":{"node_id":3165571685352930240,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17324767436949538365,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[119.1111111111111,456.44444444444446]],[2,[362.22222222222223,512.0]],[1,[503.11111111111114,614.6666666666666]],[3,[158.66666666666669,419.55555555555554]],[6,[289.7777777777778,503.1111111111111]],[4,[150.22222222222223,429.3333333333333]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[4,4],[6,6],[5,5],[1,1],[2,2]],"end_point":[[2,3],[1,2],[3,4],[4,5],[5,6],[6,1]],"handle_primary":[[3,[0.0,0.0]],[6,[89.85096850895411,61.20347364650138]],[2,[-52.888888888888914,-48.44444444444446]],[1,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[5,[-89.85096850895414,-61.20347364650138]],[1,[52.888888888888914,48.44444444444446]],[3,[0.0,0.0]],[2,[76.0,-1.7777777777777717]],[6,[0.8888888888888005,-0.4444444444444571]],[4,[7.1111111111111,-35.55555555555554]]],"stroke":[[4,0],[5,0],[1,0],[6,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1659518581611333812,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[8,[809.349794238683,192.0]],[3,[917.991769547325,333.4320987654321]],[11,[865.1851851851853,248.6255144032922]],[9,[838.4526748971191,213.46502057613168]],[12,[858.1618655692731,310.6063100137174]],[1,[889.8106995884773,368.4609053497942]],[5,[838.3209876543208,205.6954732510288]],[13,[872.1207133058986,331.2373113854595]],[10,[856.2304526748969,234.40329218106996]],[2,[913.2510288065844,355.55555555555554]],[16,[854.5185185185187,346.46913580246917]],[14,[885.9039780521264,331.0617283950617]],[15,[872.9108367626887,333.08093278463645]],[7,[773.7942386831274,177.119341563786]],[4,[869.1358024691356,247.17695473251027]],[6,[812.2469135802468,182.5185185185185]],[17,[866.172839506173,375.11111111111114]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[13,13],[7,7],[17,17],[4,4],[8,8],[1,1],[9,9],[12,12],[15,15],[14,14],[2,2],[16,16],[5,5],[6,6],[3,3],[11,11],[10,10]],"end_point":[[15,16],[1,2],[17,1],[12,13],[14,15],[4,5],[5,6],[13,14],[9,10],[16,17],[11,12],[3,4],[8,9],[6,7],[7,8],[10,11],[2,3]],"handle_primary":[[5,[-6.320987654321016,-8.164609053497912]],[6,[-10.930041152263357,-4.213991769547334]],[16,[0.0,0.0]],[1,[9.349794238683105,-4.213991769547306]],[13,[7.111111111111086,-2.72153635116598]],[7,[6.584362139917744,1.0534979423868265]],[3,[-10.72985850116538,-29.20905925317203]],[8,[14.748971193415628,7.242798353909478]],[14,[-5.267489711934104,0.0]],[12,[6.935528120713343,13.080932784636502]],[10,[7.506172839506121,6.452674897119351]],[11,[1.9314128943758533,32.395061728395035]],[4,[-8.03292181069969,-10.008230452674894]],[15,[-5.267489711934104,1.4924554183813257]],[9,[6.189300411522595,6.97942386831275]],[17,[4.279835390946232,0.32921810699582466]],[2,[7.637860082304428,-3.423868312757179]]],"handle_end":[[6,[0.0,0.0]],[3,[8.03292181069969,10.008230452674894]],[7,[-14.748971193415628,-7.242798353909478]],[11,[0.0,0.0]],[8,[-6.189300411522595,-6.97942386831275]],[2,[7.1111111111111995,19.35802469135808]],[1,[-7.637860082304542,3.423868312757179]],[17,[-9.349794238683105,4.213991769547306]],[12,[0.0,0.0]],[14,[5.267489711934104,-1.4924554183813257]],[9,[-7.506172839506121,-6.452674897119351]],[16,[-8.098765432098958,-2.1728395061728634]],[10,[0.0,0.0]],[5,[10.930041152263357,4.213991769547334]],[13,[0.0,0.0]],[15,[0.0,0.0]],[4,[6.320987654321016,8.164609053497912]]],"stroke":[[12,0],[6,0],[5,0],[2,0],[14,0],[16,0],[17,0],[13,0],[4,0],[1,0],[9,0],[15,0],[11,0],[8,0],[7,0],[3,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11481949351661484921,{"inputs":[{"Node":{"node_id":15303587427289959766,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4105711298139980122,{"inputs":[{"Node":{"node_id":1162381870526064378,"output_index":0,"lambda":false}},{"Node":{"node_id":1272070255512697108,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10415872992231003638,{"inputs":[{"Node":{"node_id":8375495949882478840,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11632506522064533635,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[145.33333333333331,1022.6666666666666]],[6,[208.0,903.0]],[2,[113.33333333333331,859.3333333333333]],[5,[336.66666666666663,799.3333333333334]],[4,[397.3333333333333,770.6666666666666]],[3,[299.33333333333326,775.3333333333333]],[1,[40.66666666666663,1022.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[3,3],[7,7],[6,6],[5,5],[4,4]],"end_point":[[1,2],[6,7],[5,6],[3,4],[7,1],[4,5],[2,3]],"handle_primary":[[6,[0.0,0.0]],[5,[-40.66666666666663,12.0]],[4,[0.0,0.0]],[2,[58.666666666666686,-57.33333333333326]],[3,[65.33333333333337,-6.0]],[7,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[-65.33333333333337,6.0]],[7,[0.0,1.3333333333333712]],[4,[40.66666666666663,-12.0]],[1,[-58.666666666666686,57.333333333333144]],[5,[35.666666666666686,-46.66666666666674]],[6,[18.00000000000003,-55.33333333333326]]],"stroke":[[4,0],[2,0],[5,0],[1,0],[3,0],[7,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10587073897090054035,{"inputs":[{"Node":{"node_id":8814059393325469059,"output_index":0,"lambda":false}},{"Node":{"node_id":907841922684377912,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15498700602024283966,{"inputs":[{"Node":{"node_id":15466714490303763249,"output_index":0,"lambda":false}},{"Node":{"node_id":9847383247226990698,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10928540355449103287,{"inputs":[{"Node":{"node_id":18190631752493248867,"output_index":0,"lambda":false}},{"Node":{"node_id":12554368619682347699,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4422453582814483232,{"inputs":[{"Node":{"node_id":4577638792388493935,"output_index":0,"lambda":false}},{"Node":{"node_id":431994205232245356,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14817659161913199655,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[726.8148148148148,1023.9999999999998]],[2,[725.3333333333333,985.7777777777776]],[1,[796.148148148148,723.8518518518517]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[9.777777777777828,-73.18518518518522]],[3,[-75.55555555555566,240.59259259259304]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7505360855062237520,{"inputs":[{"Node":{"node_id":17945736750161448391,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8766106989344197438,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[155.85185185185185,211.55555555555557]],[3,[153.58712172411558,204.8434307274338]],[6,[184.49382716049385,218.2716049382716]],[1,[197.33333333333337,212.5432098765432]],[4,[146.5679012345679,204.44444444444449]],[2,[172.64197530864195,208.98765432098767]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]],"end_point":[[5,6],[4,5],[2,3],[1,2],[6,1],[3,4]],"handle_primary":[[3,[-5.834035304362487,0.7861989021958493]],[2,[-7.703703703703667,-1.1851851851851904]],[1,[0.0,0.0]],[5,[8.493827160493822,2.3703703703703525]],[6,[3.160493827160479,-0.9876543209876444]],[4,[0.0,0.0]]],"handle_end":[[6,[-3.160493827160479,1.9753086419753456]],[2,[5.834035304362487,-0.7861989021958493]],[1,[7.703703703703724,1.1851851851852189]],[3,[0.0,0.0]],[5,[-3.1604938271605363,0.9876543209877012]],[4,[-8.493827160493794,-2.370370370370381]]],"stroke":[[5,0],[1,0],[3,0],[6,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14831840560430171946,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[793.7777777777777,1027.2592592592591]],[1,[791.5555555555555,1026.6666666666663]],[3,[889.7777777777777,516.8888888888889]],[4,[893.7613168724276,509.6296296296296]],[2,[831.5555555555555,737.3333333333334]],[5,[833.4814814814815,746.3703703703703]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[5,5],[2,2],[6,6],[1,1],[4,4],[3,3]],"end_point":[[1,2],[3,4],[4,5],[2,3],[6,1],[5,6]],"handle_primary":[[6,[0.0,0.0]],[3,[0.0,0.0]],[2,[19.555555555555543,-74.66666666666674]],[1,[0.0,0.0]],[4,[0.0,0.0]],[5,[-24.0,92.44444444444446]]],"handle_end":[[6,[-0.14814814814815236,0.29629629629675946]],[4,[24.0,-92.44444444444446]],[5,[0.0,0.0]],[1,[-26.4188207246807,100.8718609487812]],[3,[0.0,0.0]],[2,[-22.22222222222217,89.77777777777783]]],"stroke":[[1,0],[5,0],[6,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9470742171134780193,{"inputs":[{"Node":{"node_id":15126865253122550765,"output_index":0,"lambda":false}},{"Node":{"node_id":10270446074640675342,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10795820039540504703,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[4,[604.4444444444445,138.96296296296293]],[19,[540.4444444444445,70.22222222222221]],[13,[376.7623479921926,0.4130988647245317]],[1,[569.1851851851852,61.629629629629605]],[16,[451.9827338808689,43.25925925925927]],[12,[332.131357712622,16.970215357579164]],[17,[478.3481748953775,55.407407407407405]],[5,[574.5185185185185,169.18518518518516]],[15,[432.1308820290171,20.740740740740748]],[10,[396.14814814814815,88.29629629629629]],[8,[447.7037037037037,131.25925925925924]],[2,[591.1111111111111,92.44444444444444]],[7,[485.6296296296296,153.48148148148147]],[18,[498.66666666666663,63.70370370370368]],[3,[590.2222222222222,113.18518518518518]],[11,[350.8679463145693,59.25925925925925]],[9,[418.074074074074,116.14814814814814]],[14,[418.0913936876638,12.121582398270874]],[6,[518.2222222222222,175.7037037037037]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[7,7],[5,5],[11,11],[8,8],[9,9],[14,14],[15,15],[6,6],[3,3],[18,18],[16,16],[19,19],[4,4],[1,1],[12,12],[13,13],[10,10],[17,17],[2,2]],"end_point":[[2,3],[5,6],[16,17],[3,4],[1,2],[6,7],[8,9],[15,16],[19,1],[7,8],[4,5],[10,11],[11,12],[14,15],[13,14],[9,10],[18,19],[12,13],[17,18]],"handle_primary":[[6,[-14.222222222222172,-11.851851851851848]],[9,[-13.629629629629562,-7.407407407407419]],[12,[4.019883543587866,-14.744727738229416]],[10,[-13.333333333333371,-8.59259259259261]],[18,[13.333333333333371,4.148148148148152]],[13,[41.32904569547122,11.708483533546342]],[17,[10.962962962963047,12.148148148148124]],[15,[20.148148148148152,6.8148148148148096]],[5,[-13.629629629629562,5.925925925925924]],[3,[-6.518518518518476,13.3333333333333]],[11,[-11.259259259259125,-10.962962962962962]],[14,[0.0,0.0]],[1,[12.848891737595522,5.11227609582204]],[8,[-9.481481481481524,-12.740740740740762]],[16,[7.703703703703695,6.814814814814817]],[2,[0.0,0.0]],[7,[-15.407407407407447,4.444444444444457]],[19,[11.555555555555545,-3.851851851851848]],[4,[18.370370370370324,0.2962962962963047]]],"handle_end":[[12,null],[18,[-11.555555555555545,3.851851851851848]],[13,null],[11,[-2.7704748413796665,10.16196036497552]],[6,[15.407407407407334,-4.444444444444457]],[14,[-20.14814814814821,-6.814814814814827]],[19,[-12.030418259761518,-4.786624476892754]],[10,[11.259259259259238,10.962962962963076]],[4,[13.629629629629562,-5.925925925925924]],[16,[-10.96296296296299,-12.148148148148188]],[3,[-18.370370370370324,-0.2962962962963047]],[9,[13.333333333333371,8.59259259259261]],[2,[6.518518518518476,-13.333333333333314]],[15,[-7.703703703703695,-6.8148148148148096]],[8,[13.629629629629562,7.407407407407419]],[17,[-13.333333333333371,-4.148148148148152]],[5,[14.222222222222172,11.85185185185182]],[1,[-24.88888888888891,-10.666666666666655]],[7,[9.481481481481524,12.740740740740762]]],"stroke":[[8,0],[17,0],[9,0],[10,0],[18,0],[13,0],[12,0],[15,0],[3,0],[7,0],[11,0],[6,0],[14,0],[1,0],[16,0],[19,0],[5,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7466034304713056391,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[637.4252384335797,135.01742888696126]],[3,[636.4372010299622,153.9035515500083]],[1,[635.2478000597847,135.0597939750059]],[2,[635.5072483424783,152.80078149291265]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[4,4],[1,1]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[3,[1.020097146128478,-12.422679731687992]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,null],[4,[1.1169817316086892,-0.21205734949143107]],[2,[-0.5579820762119425,-0.504231587867622]],[1,[0.4153244360613826,-11.397946559213551]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12313564802550122052,{"inputs":[{"Node":{"node_id":13557369662261607646,"output_index":0,"lambda":false}},{"Node":{"node_id":9684857454501250999,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8413863870096329943,{"inputs":[{"Node":{"node_id":16195626650123806176,"output_index":0,"lambda":false}},{"Node":{"node_id":5302437193964714993,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9847383247226990698,{"inputs":[{"Node":{"node_id":3627710206997006419,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[172538270105470471,{"inputs":[{"Node":{"node_id":9276497172451351253,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12473080738469616517,{"inputs":[{"Node":{"node_id":17891208858820401648,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17133591775058457007,{"inputs":[{"Node":{"node_id":18067513817508158001,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[13163272246010991228,{"inputs":[{"Node":{"node_id":9740500978584792725,"output_index":0,"lambda":false}},{"Node":{"node_id":10253927692147706615,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15286091228862934481,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[3,[638.5953360768175,27.56652949245542]],[5,[684.554183813443,27.654320987654327]],[6,[661.2894375857338,26.381344307270236]],[2,[627.0946502057614,23.00137174211249]],[7,[637.0589849108368,29.980795610425247]],[4,[665.7229080932784,23.79149519890261]],[1,[623.1001371742112,22.694101508916333]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[2,2],[4,4],[3,3],[5,5],[1,1],[7,7]],"end_point":[[5,6],[3,4],[4,5],[1,2],[2,3],[6,7],[7,1]],"handle_primary":[[1,[0.0,0.0]],[5,[0.0,0.0]],[2,[2.150891632373032,1.5802469135802468]],[6,[-11.456790123456813,0.9657064471879302]],[3,[5.3991769547326385,0.13168724279836042]],[4,[6.672153635116501,-0.35116598079560646]],[7,[-6.089851956901498,-0.48236451143773706]]],"handle_end":[[1,[-2.150891632373032,-1.5802469135802468]],[7,[2.194787379972581,3.906721536351163]],[2,[-5.486565700800156,-0.13381867562927496]],[5,[11.456790123456813,-0.9657064471879336]],[6,[4.433470507544598,0.35116598079561]],[3,[-6.672153635116501,0.35116598079560646]],[4,[-0.9218106995884908,-1.0534979423868336]]],"stroke":[[1,0],[4,0],[6,0],[5,0],[2,0],[3,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3165571685352930240,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[641.1783537148203,135.11412115589184]],[2,[641.3926773385256,156.76403071818197]],[1,[639.0431812985823,135.02706332876082]],[3,[642.0732703685807,156.78028060137643]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[-0.4020858660272779,-10.361367902183218]],[1,[0.0,0.0]]],"handle_end":[[3,null],[1,[-0.08991158554488266,-10.211393405397416]],[4,[1.0850699611588652,-0.2123114466060372]],[2,[-0.29793124344723765,0.12588207707705124]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3636653585682494814,{"inputs":[{"Node":{"node_id":11565160497886435388,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[13014916927589286309,{"inputs":[{"Node":{"node_id":2044103368441997753,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15815816861435910950,{"inputs":[{"Node":{"node_id":4105711298139980122,"output_index":0,"lambda":false}},{"Node":{"node_id":17815494794630739611,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15798070933198867970,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[10,[508.88888888888886,389.33333333333337]],[12,[660.0,500.66666666666663]],[1,[595.1111111111111,513.3333333333333]],[8,[350.6666666666667,340.0]],[9,[424.44444444444446,340.0]],[5,[449.99999999999994,445.3333333333333]],[2,[642.2222222222222,536.8888888888889]],[6,[438.18064449587104,508.2403828865154]],[3,[598.6666666666666,547.1111111111111]],[7,[384.7140020398532,440.0243218219409]],[4,[536.0,522.2222222222221]],[11,[588.6666666666665,453.3333333333333]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[9,9],[4,4],[12,12],[11,11],[3,3],[5,5],[8,8],[10,10],[7,7],[1,1],[2,2],[6,6]],"end_point":[[7,8],[6,7],[3,4],[12,1],[2,3],[11,12],[10,11],[5,6],[9,10],[4,5],[1,2],[8,9]],"handle_primary":[[4,[-25.28395061728401,-13.827160493827025]],[6,[0.0,0.0]],[9,[24.0,8.0]],[1,[0.0,0.0]],[7,[5.531031978208716,-44.24825582567013]],[12,[-31.999999999999886,10.666666666666686]],[5,[0.0,0.0]],[8,[-46.969945387028645,-26.215783471829923]],[2,[0.0,0.0]],[3,[-18.370370370370324,2.1728395061728634]],[10,[25.481481481481467,20.4444444444444]],[11,[22.666666666666856,18.0]]],"handle_end":[[3,[25.283950617284063,13.827160493827025]],[9,[-25.481481481481467,-20.4444444444444]],[4,[0.0,0.0]],[11,[-17.185185185185105,5.925925925925867]],[1,[-58.22222222222217,-1.3333333333332575]],[2,[18.370370370370324,-2.1728395061728634]],[6,[-4.764895727801786,38.11916582241446]],[12,null],[5,[0.0,0.0]],[7,[28.6666666666668,16.000000000000057]],[10,[-23.199803616588156,-18.42337346023163]],[8,[-24.0,-8.0]]],"stroke":[[5,0],[8,0],[6,0],[9,0],[11,0],[12,0],[4,0],[3,0],[2,0],[1,0],[7,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6672826052605647592,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[4,[600.0548696844994,115.53360768175584]],[6,[594.172839506173,82.87517146776406]],[12,[613.7991159884164,125.99055022100288]],[8,[585.8326474622772,72.60356652949247]],[5,[603.127572016461,99.64334705075449]],[1,[617.5253772290811,122.03017832647464]],[11,[599.381801554641,127.00502972107913]],[9,[593.3827160493829,85.77229080932784]],[3,[605.4979423868314,125.19067215363512]],[10,[599.4403292181071,108.68587105624144]],[2,[614.2716726786227,123.52371759047573]],[7,[591.0123456790125,60.40054869684499]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[5,5],[8,8],[7,7],[11,11],[4,4],[10,10],[2,2],[12,12],[6,6],[9,9],[3,3],[1,1]],"end_point":[[3,4],[1,2],[8,9],[11,12],[5,6],[6,7],[9,10],[7,8],[12,1],[2,3],[4,5],[10,11]],"handle_primary":[[6,[-6.145404663923159,-8.076817558299041]],[2,[-1.2820759681926577,0.7008681959453185]],[8,[0.6346981736430735,5.019885555177211]],[10,[-2.575217192501441,8.77914951989024]],[12,[2.3801249809480396,-1.7168114616673904]],[9,[3.599451303154978,4.477366255144034]],[5,[-0.8779149519890552,-4.477366255144048]],[1,[0.0,0.0]],[11,[3.960543177125487,4.094798878044912]],[4,[0.8779149519890552,-4.477366255144034]],[3,[-4.594421582076166,-1.1705532693187024]],[7,[0.0,0.0]]],"handle_end":[[8,[-3.599451303154978,-4.477366255144034]],[5,[6.145404663923159,8.076817558299041]],[11,[-2.036412917146322,1.4688880058104417]],[12,[0.0,0.0]],[6,[-6.057613168724288,9.305898491083669]],[3,[-0.8779149519890552,4.477366255144034]],[1,[1.3006147436874471,-0.7110027265491681]],[2,[3.396564570446685,0.8653667695405147]],[4,[0.8779149519890552,4.47736625514402]],[10,[-4.118548609866821,-4.258160427150372]],[9,[3.3684073442221916,-11.48320685530176]],[7,[-0.9657064471879266,-7.637860082304528]]],"stroke":[[10,0],[4,0],[11,0],[12,0],[8,0],[9,0],[7,0],[1,0],[3,0],[6,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7385465194555106679,{"inputs":[{"Node":{"node_id":5009664118231399060,"output_index":0,"lambda":false}},{"Node":{"node_id":6416452251137958677,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9425359632144678256,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[612.3749428440786,88.61088248742568]],[1,[610.2608816540582,107.73159867034722]],[3,[622.6042778031804,84.90413046791649]],[5,[606.9918024691358,101.68414814814815]],[2,[615.0086877000457,93.76131687242795]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[2,2],[5,5],[4,4],[1,1]],"end_point":[[2,3],[5,1],[1,2],[3,4],[4,5]],"handle_primary":[[5,[0.0,0.0]],[3,[-0.6242950769699291,-0.9364426154549648]],[2,[3.21902149062646,-3.511659807956093]],[1,[0.0,0.0]],[4,[-3.0889600162577153,2.952395468170536]]],"handle_end":[[5,[-2.1454520955559246,-3.1101486881290583]],[1,[-3.21902149062646,3.5116598079561214]],[2,[0.15607376924265282,0.7543565513387165]],[3,[2.992367941940074,-2.86007378029646]],[4,[-0.5623782142248501,-6.258066225952547]]],"stroke":[[4,0],[2,0],[3,0],[1,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15177845878727456758,{"inputs":[{"Node":{"node_id":14225285635863713990,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5555007473125503522,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[6,[724.0262155159273,62.468526139308025]],[7,[722.6215515927449,59.58116140832189]],[5,[726.0551745160798,67.30681298582532]],[4,[725.0797134583142,72.96448712086573]],[2,[724.7285474775185,66.64349946654472]],[3,[723.7140679774425,72.106081390032]],[1,[721.7241274196006,63.248894985520494]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[4,4],[1,1],[3,3],[2,2],[5,5],[7,7]],"end_point":[[7,1],[5,6],[2,3],[6,7],[1,2],[4,5],[3,4]],"handle_primary":[[3,[-1.287608596250493,1.7558299039780536]],[6,[-0.03901844231063478,-1.2485901539399509]],[2,[0.546258192348887,2.106995884773667]],[5,[-0.585276634659408,-3.8628257887517066]],[4,[0.6633135192806776,-0.8584057308337094]],[7,[-1.014479500076277,0.3901844231062413]],[1,[0.0,0.0]]],"handle_end":[[1,[-0.501794076076294,-1.9354914362939013]],[3,[-0.6633135192806776,0.8584057308337094]],[7,[0.07803688462126956,-0.03901844231062768]],[4,[0.585276634659408,3.8628257887517066]],[6,[1.014479500076277,-0.39018442310623414]],[5,[0.03901844231063478,1.2485901539399509]],[2,[1.852405339488314,-2.526007281120613]]],"stroke":[[2,0],[4,0],[6,0],[7,0],[5,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17529660518597229229,{"inputs":[{"Node":{"node_id":3802858053991775169,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[16446146761452576438,{"inputs":[{"Node":{"node_id":12131058586835568367,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[619.1444612416404,54.266956717585614]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.6118784},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.617278800347149,2.5068847538738956]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.1858656806102035e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[454416440369338250,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[733.7777777777778,518.6666666666666]],[1,[696.0,593.3333333333333]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-18.666666666666515,26.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15038739378867834454,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[662.3868312757203,59.61042524005489]],[4,[704.965706447188,54.25514403292181]],[6,[687.4951989026064,54.518518518518526]],[5,[704.6145404663924,55.39643347050756]],[2,[667.4787379972565,58.20576131687244]],[1,[654.3978052126201,51.621399176954746]],[3,[691.5336076817558,52.14814814814816]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[7,7],[4,4],[6,6],[5,5],[3,3]],"end_point":[[5,6],[2,3],[3,4],[4,5],[6,7],[7,1],[1,2]],"handle_primary":[[5,[0.0,0.0]],[3,[7.723134415788309,-0.2640387834457485]],[7,[-4.546573253919632,-2.2347563451469625]],[1,[0.0,0.0]],[6,[-10.156808190486911,1.6663513437517778]],[2,[6.145404663923159,-1.0534979423868336]],[4,[0.0,0.0]]],"handle_end":[[5,[11.237311385459408,-1.8436213991769537]],[6,[5.179698216735233,2.5459533607681664]],[3,null],[2,[-10.271604938271594,0.35116598079560646]],[4,[0.0,0.0]],[7,[0.0,0.08779149519890694]],[1,[-5.875074923313605,1.0071557011394745]]],"stroke":[[2,0],[4,0],[1,0],[6,0],[5,0],[7,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14982414026754548178,{"inputs":[{"Node":{"node_id":13045580349734858212,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[4493274523708782092,{"inputs":[{"Node":{"node_id":15239301303367148581,"output_index":0,"lambda":false}},{"Node":{"node_id":12880230498984021417,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6973438081601736688,{"inputs":[{"Node":{"node_id":11630078441485655672,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4577638792388493935,{"inputs":[{"Node":{"node_id":3170924135668664007,"output_index":0,"lambda":false}},{"Node":{"node_id":6292009934909381201,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12131058586835568367,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.443655685420585,0.8388279058567918]],[2,[1.0389965338526328,0.5311836299154763]],[4,[0.022131022857413415,0.4190687668825941]],[1,[0.6081211287919952,-0.2081641356766983]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[1,2],[3,4],[2,3],[4,1]],"handle_primary":[[1,[0.297407817404018,0.05174926937677715]],[4,[0.021131345375600137,-0.27179882337964756]],[2,[-0.06483434986356718,0.26682960488486684]],[3,[-0.29501938196342326,-0.04735956037402645]]],"handle_end":[[1,[0.07365905854782184,-0.30314821587423946]],[2,[0.2950193819634199,0.04735956037402589]],[4,[-0.38805268271111915,-0.0675215701634326]],[3,[-0.02113134537560013,0.27179882337964756]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1157261387411722141,{"inputs":[{"Node":{"node_id":4577174813962563383,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11659756061767599421,{"inputs":[{"Node":{"node_id":8766106989344197438,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5140869461760168364,{"inputs":[{"Node":{"node_id":17118107476414252025,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8543051864256131356,{"inputs":[{"Node":{"node_id":5002654561220917457,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[16732130236852371275,{"inputs":[{"Node":{"node_id":4832236468224231783,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5185036609290210853,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[2,[697.9423868312758,64.79012345679013]],[18,[716.7736625514402,54.9135802469136]],[5,[705.102270995275,59.269013869836904]],[14,[711.9695168419447,48.57796067672611]],[6,[695.152568206066,67.34583142813594]],[15,[703.604938271605,68.21399176954733]],[12,[698.2935528120714,34.35573845450388]],[26,[722.5825331504344,57.31809175430575]],[1,[687.846364883402,65.58024691358025]],[20,[716.6907483615302,62.66361835086114]],[13,[706.9556470050298,39.272062185642426]],[27,[718.680688919372,68.71147690900777]],[10,[696.5925925925927,33.728395061728385]],[4,[704.9657064471878,54.25514403292179]],[11,[697.7283950617284,31.30864197530864]],[19,[705.9094650205762,70.25514403292182]],[28,[702.2539247065995,73.00350556317633]],[21,[716.1444901691814,49.82655083066605]],[17,[713.3351623228167,47.46593507087334]],[23,[711.5061728395062,69.99176954732509]],[3,[703.7366255144034,54.694101508916326]],[24,[719.0123456790122,66.6337448559671]],[22,[719.6171315348269,59.659198292943145]],[16,[713.7448559670781,60.37860082304528]],[7,[701.785703398872,67.26779454351473]],[9,[702.2222222222223,38.38683127572017]],[25,[719.8512421886905,54.19661636945587]],[29,[694.0600518213687,74.40816948635879]],[8,[709.8600823045268,50.83127572016461]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[21,21],[20,20],[7,7],[4,4],[10,10],[9,9],[25,25],[8,8],[28,28],[13,13],[19,19],[5,5],[27,27],[29,29],[14,14],[24,24],[17,17],[12,12],[11,11],[6,6],[15,15],[23,23],[16,16],[2,2],[1,1],[22,22],[18,18],[3,3],[26,26]],"end_point":[[11,12],[27,28],[9,10],[14,15],[5,6],[18,19],[21,22],[7,8],[4,5],[10,11],[13,14],[12,13],[22,23],[16,17],[8,9],[3,4],[26,27],[23,24],[1,2],[28,29],[15,16],[17,18],[20,21],[25,26],[19,20],[2,3],[24,25],[6,7],[29,1]],"handle_primary":[[22,[-1.7948483462886315,6.047858558146615]],[6,[0.0,0.0]],[9,[-3.823807346440958,-1.6387745770461848]],[7,[3.3946044810244302,-1.8728852309099435]],[4,[0.0,0.0]],[13,[2.1939750755697105,1.3128956217623369]],[27,[-4.128769232802142,3.294230770852593]],[18,[-0.7242798353908029,5.860082304526735]],[2,[1.5646505637769224,-1.2302214356413188]],[8,[1.1368683772161605e-13,-7.4135040390184415]],[5,[-1.1705532693187024,3.0044200579180043]],[17,[0.0,0.0]],[16,[2.9207548934437,-5.774876595401999]],[10,[-0.04481007342064913,-1.8372595419893116]],[15,[0.0,0.0]],[20,[2.536198750190465,-6.516079865874104]],[19,[0.0,0.0]],[1,[0.0,0.0]],[14,[0.9193720469440904,5.347965249199831]],[26,[0.8664211612748431,3.3573819999397045]],[3,[0.0,0.0]],[12,[1.5089163237310004,2.3850022862368547]],[24,[2.106995884773596,-3.0044200579180256]],[23,[0.0,0.0]],[11,[0.0,0.0]],[25,[0.0,0.0]],[28,[-7.920532726374063,-0.13055823175342596]],[29,[0.0,0.0]],[21,[0.0,0.0]]],"handle_end":[[9,[0.04481007342064913,1.837259541989333]],[14,[7.30864197530866,-5.333333333333336]],[17,[0.667740598959881,-5.402628482494777]],[8,[5.150019007352512,2.2071510031511608]],[25,[-0.6242950769700428,-2.419143423258646]],[16,[1.1705532693187024,1.8728852309099224]],[18,[9.169333942996444,-4.409083981100437]],[22,[2.731290961743639,-1.326627038561199]],[20,[1.638774577046206,1.5607376924249363]],[11,[-0.8654907204776237,-1.3679998781853442]],[4,[1.1705532693187024,-3.0044200579180043]],[13,[-0.7923207898123792,-4.608911119518574]],[26,[3.66773357719876,-2.926383173296756]],[3,[0.0,0.0]],[23,[-2.1028230213785264,2.9984698638176326]],[5,[6.516079865874076,-2.4581618655692807]],[7,[-1.1368683772161605e-13,8.389895136005812]],[24,[2.980033531474078,4.338363054412447]],[6,[-3.208476806721251,1.7701941002599142]],[21,[1.7948483462886315,-6.047858558146615]],[27,[7.101356500533598,0.11705532693187592]],[1,[-2.555707971345896,2.0094497789970944]],[19,[-2.536198750190465,6.516079865874104]],[10,[0.0,0.0]],[29,[0.009754610577488164,0.048773052888265056]],[15,[-3.84819387288519,7.608596250571544]],[2,[0.5267489711934559,6.320987654320987]],[12,[-3.679926840420876,-2.202103337905797]],[28,[0.0,0.0]]],"stroke":[[16,0],[17,0],[4,0],[19,0],[15,0],[12,0],[2,0],[1,0],[20,0],[3,0],[10,0],[27,0],[28,0],[6,0],[5,0],[24,0],[22,0],[26,0],[7,0],[13,0],[25,0],[18,0],[23,0],[9,0],[14,0],[11,0],[21,0],[29,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18190631752493248867,{"inputs":[{"Node":{"node_id":12428327489525325219,"output_index":0,"lambda":false}},{"Node":{"node_id":10375238420217738812,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8644924780109919177,{"inputs":[{"Node":{"node_id":10599660455959346550,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5020096817747898028,{"inputs":[{"Node":{"node_id":15286091228862934481,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2641530639940889619,{"inputs":[{"Node":{"node_id":5174744389209053970,"output_index":0,"lambda":false}},{"Node":{"node_id":14539627480594383748,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5326536612985524219,{"inputs":[{"Node":{"node_id":15798070933198867970,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":27.0},"exposed":false}},{"Value":{"tagged_value":{"U32":9},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11666664915283969027,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[802.3703703703703,580.9382716049382]],[2,[751.4074074074075,685.0370370370371]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,1]],"handle_primary":[[2,[20.740740740740534,-42.469135802469054]],[1,[0.0,0.0]]],"handle_end":[[2,null],[1,[27.259259259259125,-48.79012345678995]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3414873131936208778,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[761.7777777777777,737.3333333333333]],[2,[697.7777777777777,954.2222222222222]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[-40.0,81.33333333333326]],[1,[26.22222222222217,-158.66666666666652]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3686761601672683183,{"inputs":[{"Node":{"node_id":4859656512650360562,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16805628435335819723,{"inputs":[{"Node":{"node_id":10689298484366290551,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13557369662261607646,{"inputs":[{"Node":{"node_id":3535178979443201645,"output_index":0,"lambda":false}},{"Node":{"node_id":15177845878727456758,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16339345235172368839,{"inputs":[{"Node":{"node_id":14778750092903591172,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18214377096178867498,{"inputs":[{"Node":{"node_id":7747398671834040298,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[3955326429435439190,{"inputs":[{"Node":{"node_id":18207065424980079673,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2126710823743005151,{"inputs":[{"Node":{"node_id":14831840560430171946,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11804065810513502701,{"inputs":[{"Node":{"node_id":9782123335421401489,"output_index":0,"lambda":false}},{"Node":{"node_id":17133591775058457007,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7320676248579211727,{"inputs":[{"Node":{"node_id":14817659161913199655,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7654665057468818389,{"inputs":[{"Node":{"node_id":17378885078543074499,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10514847656270897393,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":16339345235172368839,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16434255153991868080,{"inputs":[{"Node":{"node_id":6124821161363551058,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17207349373429328029,{"inputs":[{"Node":{"node_id":17967471489196302183,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6867142265138950838,{"inputs":[{"Node":{"node_id":4784708315242877950,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14862049226133442027,{"inputs":[{"Node":{"node_id":16614450796751955858,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8814059393325469059,{"inputs":[{"Node":{"node_id":15492651270767932214,"output_index":0,"lambda":false}},{"Node":{"node_id":14035980686649077716,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17364155187784942740,{"inputs":[{"Node":{"node_id":1378578509112405,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9019608,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.9019608,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10586744777717861556,{"inputs":[{"Node":{"node_id":11417901103965737900,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[15656854169166220905,{"inputs":[{"Node":{"node_id":7821977654068146599,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-5.0,22.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4909350123806022131,{"inputs":[{"Node":{"node_id":15498700602024283966,"output_index":0,"lambda":false}},{"Node":{"node_id":16536768589601337644,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10190227675276560561,{"inputs":[{"Node":{"node_id":2682920349304670808,"output_index":0,"lambda":false}},{"Node":{"node_id":16434255153991868080,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10424806499648491677,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":17147975601187022720,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14598755603287563819,{"inputs":[{"Node":{"node_id":7466034304713056391,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8230694129617719636,{"inputs":[{"Node":{"node_id":4909350123806022131,"output_index":0,"lambda":false}},{"Node":{"node_id":16805628435335819723,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16175421708184657649,{"inputs":[{"Node":{"node_id":8698602280607307123,"output_index":0,"lambda":false}},{"Node":{"node_id":514796034658094296,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18422317423856403288,{"inputs":[{"Node":{"node_id":10133176481349663495,"output_index":0,"lambda":false}},{"Node":{"node_id":12594527670567285670,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15395954548128560685,{"inputs":[{"Node":{"node_id":13475705179546695973,"output_index":0,"lambda":false}},{"Node":{"node_id":16767482995096345179,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11464423670065789907,{"inputs":[{"Node":{"node_id":8644924780109919177,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[5269304445610080925,{"inputs":[{"Node":{"node_id":3686761601672683183,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[14012583111791538162,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[248.00000000000009,884.0]],[3,[603.3333333333335,744.6666666666666]],[2,[380.00000000000006,806.0]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[70.80694036316174,-19.49756328840681]]],"handle_end":[[2,[-71.33333333333326,24.0]],[1,[-92.00000000000006,25.333333333333258]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4784708315242877950,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[902.6666666666669,446.66666666666674]],[7,[807.0666666666666,680.1333333333332]],[6,[592.0,845.3333333333333]],[3,[592.4000000000001,852.3999999999999]],[4,[468.14814814814815,1025.382716049383]],[5,[464.5925925925926,1025.382716049383]],[2,[808.5333333333333,683.1555555555556]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[4,4],[5,5],[7,7],[6,6],[1,1],[2,2]],"end_point":[[3,4],[7,1],[2,3],[6,7],[1,2],[4,5],[5,6]],"handle_primary":[[1,[0.0,0.0]],[6,[93.94069526511169,-85.35957406301043]],[5,[0.0,0.0]],[2,[-81.33333333333337,100.88888888888891]],[7,[62.39957279246403,-72.271586423759]],[3,[-91.33798434535026,86.27035509501377]],[4,[0.0,0.0]]],"handle_end":[[7,[-3.466666666666697,51.33333333333326]],[2,[85.857044886376,-81.09351003138556]],[5,[-102.71604938271612,93.3333333333336]],[4,[0.0,0.0]],[3,[0.0,0.0]],[6,[-87.55555555555577,101.4074074074075]],[1,[97.81027061870486,-121.32749415544254]]],"stroke":[[3,0],[6,0],[1,0],[7,0],[2,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8375495949882478840,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[9,[662.1234567901236,66.9849108367627]],[3,[628.5871056241429,46.71808159325306]],[6,[662.1234567901236,64.96570644718793]],[10,[650.9056546258192,56.62876594015139]],[11,[641.3168724279836,48.02194787379973]],[4,[642.6077325610934,47.29035208047554]],[5,[650.6227709190673,52.93827160493828]],[1,[616.0751917898693,61.31097901742621]],[2,[617.4278311233043,51.042625616013815]],[7,[673.0096021947875,65.84362139917695]],[8,[675.3580246913581,68.74074074074075]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[2,2],[8,8],[1,1],[5,5],[6,6],[3,3],[4,4],[9,9],[7,7],[11,11],[10,10]],"end_point":[[10,11],[6,7],[9,10],[2,3],[11,1],[7,8],[8,9],[5,6],[3,4],[4,5],[1,2]],"handle_primary":[[8,[0.0,0.0]],[11,[-8.252400548696869,-0.8779149519890339]],[7,[0.0,0.0]],[5,[3.160493827160508,4.6529492455418335]],[3,[4.873654303444027,-0.3091793289098348]],[6,[5.4430727023319605,2.545953360768181]],[4,[2.784561671457709,0.5265657466421629]],[10,[-2.0025980353477735,-3.5689865976493422]],[9,[-4.389574759945162,-2.106995884773667]],[1,[-0.7315957933242316,0.01300614743686168]],[2,[2.1833209230284183,-3.0691100638496778]]],"handle_end":[[1,[-2.4595700304455477,3.4574354386312436]],[4,[-3.160493827160508,-4.6529492455418335]],[6,[0.0,0.0]],[11,[2.0257074632933154,-0.6893258141543512]],[5,[-5.4430727023319605,-2.545953360768181]],[3,[-2.7845616714574817,-0.5265657466421203]],[2,[-5.145487535686698,0.32642413354457744]],[10,[6.086554705109506,0.6475058196925048]],[7,[0.0,0.0]],[8,[4.389574759945162,2.106995884773667]],[9,[2.6272417822486887,4.682213077274824]]],"stroke":[[3,0],[5,0],[7,0],[2,0],[10,0],[11,0],[4,0],[9,0],[1,0],[8,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11677503666435782605,{"inputs":[{"Node":{"node_id":12049041947382267086,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16536768589601337644,{"inputs":[{"Node":{"node_id":4222034829755771252,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2087303479944421366,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[365.6296296296296,1025.4814814814813]],[3,[368.59259259259255,1025.1851851851852]],[2,[443.2592592592592,882.0740740740739]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-48.59259259259255,50.07407407407413]],[2,[31.111111111111143,-96.29629629629642]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17426609415699324395,{"inputs":[{"Node":{"node_id":15896921950407486754,"output_index":0,"lambda":false}},{"Node":{"node_id":11464423670065789907,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16450742929146919960,{"inputs":[{"Node":{"node_id":14887821801874852671,"output_index":0,"lambda":false}},{"Node":{"node_id":11899713172487274471,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8595304668947966919,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[810.1333333333333,731.4666666666668]],[2,[798.4000000000001,879.4666666666668]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[-18.13333333333333,82.66666666666674]],[1,[-1.8666666666665608,-67.46666666666658]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11451028343967836482,{"inputs":[{"Node":{"node_id":2422139482859833437,"output_index":0,"lambda":false}},{"Node":{"node_id":12531351117929704587,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[314278016428495768,{"inputs":[{"Node":{"node_id":6282972142629473139,"output_index":0,"lambda":false}},{"Node":{"node_id":5020096817747898028,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17971411534648521628,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14862049226133442027,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13014628586360765651,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":2175432926627256613,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14778750092903591172,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[146.5679012345679,204.44444444444449]],[2,[149.0793650793651,202.5537918871252]],[1,[155.98219408731924,204.757705978404]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[2,3],[1,2],[3,1]],"handle_primary":[[3,[0.9278738161427498,1.2447087777524644]],[2,[-2.2695727277346123,-0.643804298125275]],[1,[-2.6135873853791907,-0.8494167367814498]]],"handle_end":[[2,[-1.156966490299823,-1.5520282186949146]],[1,[1.7022700834823468,0.48287890620272833]],[3,[-0.32172621516085087,3.1233079488176827]]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18015048324114736039,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[24,[746.8641975308642,175.40740740740742]],[6,[617.283950617284,44.641975308641975]],[10,[597.530864197531,73.08641975308642]],[21,[805.925925925926,230.9135802469136]],[27,[722.1728395061729,147.1604938271605]],[7,[607.2098765432099,55.308641975308646]],[8,[613.3333333333334,44.24691358024691]],[14,[630.716049382716,132.3456790123457]],[4,[654.4197530864197,54.91358024691358]],[26,[752.1975308641976,172.83950617283952]],[29,[705.1851851851852,106.27160493827162]],[22,[785.9753086419753,197.13580246913585]],[12,[603.4567901234568,92.8395061728395]],[23,[760.8888888888889,175.80246913580248]],[28,[730.2716049382716,169.4814814814815]],[18,[799.2098765432099,253.23456790123456]],[3,[675.3580246913581,68.74074074074075]],[11,[596.9382716049383,85.13580246913581]],[15,[664.8888888888889,140.64197530864195]],[25,[737.7777777777778,170.07407407407408]],[13,[616.2962962962963,115.16049382716052]],[9,[609.3827160493827,43.65432098765433]],[20,[805.1358024691358,260.34567901234567]],[2,[683.0617283950618,104.2962962962963]],[1,[687.4074074074074,99.1604938271605]],[5,[639.8024691358025,44.24691358024691]],[19,[797.8271604938273,246.1234567901235]],[16,[672.5925925925926,176.5925925925926]],[17,[757.7283950617285,217.48148148148147]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[6,6],[10,10],[29,29],[19,19],[25,25],[14,14],[9,9],[13,13],[22,22],[26,26],[4,4],[20,20],[15,15],[18,18],[28,28],[24,24],[17,17],[1,1],[7,7],[16,16],[12,12],[11,11],[3,3],[27,27],[8,8],[2,2],[5,5],[23,23],[21,21]],"end_point":[[3,4],[14,15],[2,3],[18,19],[19,20],[21,22],[1,2],[9,10],[23,24],[26,27],[4,5],[7,8],[28,29],[15,16],[12,13],[5,6],[11,12],[27,28],[24,25],[8,9],[25,26],[6,7],[17,18],[10,11],[13,14],[29,1],[22,23],[16,17],[20,21]],"handle_primary":[[24,[-5.3333333333332575,-2.5679012345678984]],[5,[-9.48148148148141,0.9876543209876516]],[15,[6.913580246913625,9.87654320987656]],[20,[0.0,0.0]],[10,[-6.320987654320902,4.740740740740733]],[1,[-2.1728395061728634,1.5802469135802255]],[19,[4.543209876543187,5.925925925925952]],[16,[29.23456790123464,10.666666666666686]],[28,[0.0,0.0]],[27,[0.0,0.0]],[11,[3.3580246913580822,1.9753086419753176]],[7,[-0.9876543209876444,-4.740740740740733]],[13,[2.370370370370324,7.308641975308632]],[12,[5.728395061728406,16.98765432098766]],[25,[0.0,0.0]],[26,[0.0,0.0]],[6,[-8.09876543209873,4.740740740740733]],[22,[-7.506172839506121,-7.901234567901298]],[8,[-1.1851851851851052,-1.1851851851851904]],[3,[-15.209876543209816,-1.7777777777777717]],[23,[-2.5679012345678984,-0.592592592592581]],[4,[-2.3703703703704377,-3.555555555555557]],[18,[0.0,-2.172839506172835]],[14,[5.728395061728293,2.370370370370381]],[9,[-14.024691358024713,15.802469135802482]],[2,[-8.120713305898448,-14.573388203017842]],[21,[-2.5679012345678984,-9.481481481481469]],[29,[-13.234567901234527,-3.3580246913580396]],[17,[20.594048174910657,8.937919170354007]]],"handle_end":[[25,[-4.740740740740762,0.790123456790127]],[9,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[27,[-3.7530864197531177,-7.506172839506178]],[12,[0.0,0.0]],[13,[-5.728395061728293,-2.370370370370381]],[24,[0.0,0.0]],[10,[-3.3580246913580822,-1.9753086419753176]],[14,[-6.913580246913625,-9.876543209876502]],[23,[5.3333333333332575,2.5679012345678984]],[26,[19.35802469135808,26.864197530864203]],[3,[2.3703703703704377,3.555555555555557]],[18,[0.0,0.0]],[6,[0.0,0.0]],[21,[7.506172839506121,7.901234567901213]],[2,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[22,[2.5679012345678984,0.592592592592581]],[4,[9.48148148148141,-0.9876543209876444]],[28,[17.580246913580254,58.07407407407402]],[29,[0.0,0.0]],[17,[0.0,0.0]],[19,[0.0,0.0]],[16,[-20.59404817491054,-8.937919170353979]],[15,[0.0,0.0]],[20,[2.5679012345678984,9.481481481481438]],[11,[0.0,0.0]]],"stroke":[[27,0],[4,0],[24,0],[28,0],[16,0],[8,0],[26,0],[5,0],[6,0],[20,0],[25,0],[22,0],[29,0],[21,0],[18,0],[15,0],[2,0],[7,0],[17,0],[10,0],[19,0],[13,0],[9,0],[3,0],[12,0],[23,0],[14,0],[1,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13975451746581400000,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[835.7333333333332,786.4000000000001]],[2,[901.6,572.8]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,1]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[47.4666666666667,-108.26666666666664]],[1,[-22.399999999999977,109.06666666666648]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13035777574951374461,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[896.0,440.44444444444446]],[3,[696.8888888888889,697.3333333333333]],[2,[833.7777777777778,573.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[2,[-68.0,92.88888888888891]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[68.0,-92.88888888888891]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3827449344952693766,{"inputs":[{"Node":{"node_id":2440895173483452224,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11565160497886435388,{"inputs":[{"Node":{"node_id":7893851488963635918,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10336592647221792772,{"inputs":[{"Node":{"node_id":16051539163551573193,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3535178979443201645,{"inputs":[{"Node":{"node_id":12838133055063962839,"output_index":0,"lambda":false}},{"Node":{"node_id":8240895922641772563,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14675232891471617236,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[483.9506172839506,1026.7654320987656]],[2,[480.7407407407408,1026.6666666666663]],[1,[652.8888888888889,822.6666666666666]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[2,3],[3,1],[1,2]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[26.66666666666669,-58.666666666666515]],[3,[-143.85185185185185,150.07407407407413]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14035980686649077716,{"inputs":[{"Node":{"node_id":6666260895482068061,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[421715625023770179,{"inputs":[{"Node":{"node_id":3670529450440935325,"output_index":0,"lambda":false}},{"Node":{"node_id":3150436463719911922,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2044103368441997753,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[5,[793.6790123456792,258.7654320987655]],[7,[710.7160493827162,200.09876543209884]],[4,[796.4444444444446,278.12345679012356]],[3,[747.6543209876543,394.6666666666667]],[1,[710.5185185185186,302.2222222222223]],[8,[694.5185185185187,204.8395061728396]],[2,[723.3580246913581,337.97530864197535]],[6,[756.7407407407409,223.40740740740748]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[6,6],[2,2],[3,3],[4,4],[1,1],[7,7],[8,8],[5,5]],"end_point":[[2,3],[5,6],[6,7],[8,1],[1,2],[7,8],[4,5],[3,4]],"handle_primary":[[8,[0.0,0.0]],[4,[0.0,0.0]],[6,[-22.518518518518476,-12.641975308641976]],[7,[0.0,0.0]],[5,[-5.135802469135797,-10.271604938271594]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[7,[8.117474523314513,-0.7895812719984008]],[5,[22.518518518518476,12.641975308641976]],[3,[-12.049382716049422,68.54320987654324]],[8,[7.111111111110972,-82.76543209876547]],[6,[0.0,0.0]],[2,[-10.864197530864203,-35.5555555555556]],[1,[1.3827160493826796,-12.641975308641976]],[4,[5.135802469135797,10.271604938271594]]],"stroke":[[1,0],[4,0],[6,0],[3,0],[2,0],[5,0],[8,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6124821161363551058,{"inputs":[{"Node":{"node_id":10420981328998103391,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6749771744300551215,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[585.3333333333333,1025.7777777777778]],[4,[620.8888888888888,943.5555555555557]],[1,[589.3333333333333,1025.3333333333333]],[2,[660.4444444444443,878.2222222222222]],[3,[726.6666666666666,765.3333333333333]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[4,4],[3,3],[1,1],[2,2]],"end_point":[[4,5],[3,4],[2,3],[5,1],[1,2]],"handle_primary":[[5,[0.0,0.0]],[3,[0.0,0.0]],[4,[-29.333333333333258,59.11111111111097]],[2,[31.11111111111109,-50.66666666666663]],[1,[0.0,0.0]]],"handle_end":[[1,[-31.863450886870623,51.89190573004646]],[5,[-0.4444444444443434,0.8888888888889142]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[29.333333333333258,-59.1111111111112]]],"stroke":[[3,0],[5,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2440895173483452224,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[33.18518518518515,636.148148148148]],[1,[93.037037037037,526.8148148148147]],[2,[30.814814814814767,578.0740740740739]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,3]],"handle_primary":[[2,[-9.185185185185162,39.703703703703695]],[1,[0.0,0.0]]],"handle_end":[[1,[9.185185185185162,-39.703703703703695]],[2,[0.0,0.0]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11356586238302409958,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[783.1111111111111,348.74074074074065]],[4,[777.7777777777778,375.7037037037037]],[5,[811.8518518518518,273.18518518518516]],[3,[732.148148148148,432.2962962962963]],[6,[792.2962962962963,188.74074074074073]],[1,[811.5555555555555,250.96296296296296]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[4,4],[2,2],[3,3],[5,5]],"end_point":[[4,5],[2,3],[1,2],[5,6],[3,4]],"handle_primary":[[4,[10.310300340717504,-19.181954122264813]],[2,[-14.6604291210798,34.80924611318039]],[3,[0.0,0.0]],[1,[0.0,0.0]],[5,[3.7834358363461433,-27.565032521950258]]],"handle_end":[[4,[-4.148148148148152,30.22222222222223]],[1,[14.6604291210798,-34.809246113180336]],[3,[-12.740740740740875,23.703703703703695]],[2,[26.666666666666515,-35.555555555555486]],[5,[26.074074074074133,33.18518518518516]]],"stroke":[[2,0],[3,0],[5,0],[1,0],[4,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13231685386999438557,{"inputs":[{"Node":{"node_id":1659518581611333812,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9371909264427723282,{"inputs":[{"Node":{"node_id":8595304668947966919,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9782123335421401489,{"inputs":[{"Node":{"node_id":11656581020969095354,"output_index":0,"lambda":false}},{"Node":{"node_id":1019037285881657884,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2780251074492832077,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[654.5349442975197,224.51689533908117]],[1,[620.0443231093315,208.38630063890184]],[3,[679.189837009989,239.99177480754585]],[2,[644.0435005900861,214.94345295604788]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[-14.688021190407198,-10.884872846462486]],[2,[17.048596024579638,8.262011919603992]]],"handle_end":[[2,[-15.868308607493532,-9.835728475719122]],[3,[13.4932102981968,9.999432631699392]],[4,[0.1311430463429133,0.13114304634288487]],[1,[-9.660678057982182,-4.68171321271447]]],"stroke":[[3,0],[1,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17118107476414252025,{"inputs":[{"Node":{"node_id":6645255982686652881,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[74.2222222222222,480.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[40.0,40.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3627710206997006419,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[154.2366898148148,257.4780574845679]],[1,[152.49382716049382,262.71604938271605]],[2,[149.94787379972564,262.84773662551436]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[3,1],[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[-0.2633744855966995,-0.4389574759944139]],[3,[4.31137018907981,-2.5386217986682027]]],"handle_end":[[2,[-3.3775342902714556,1.988760370600971]],[1,[0.4650366425890411,0.7750610709815646]],[3,[2.8421709430404014e-14,0.0]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12838133055063962839,{"inputs":[{"Node":{"node_id":13644138583806412631,"output_index":0,"lambda":false}},{"Node":{"node_id":6973438081601736688,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7922156219537051964,{"inputs":[{"Node":{"node_id":13594670583065022897,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[15446793500614592278,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[2,[702.244170096022,76.11522633744856]],[7,[718.3100137174213,77.2565157750343]],[5,[718.2222222222222,97.09739368998628]],[6,[724.6310013717421,85.86008230452676]],[3,[722.3484224965707,77.2565157750343]],[1,[694.3429355281208,73.8326474622771]],[4,[725.5967078189301,90.3374485596708]],[8,[697.5034293552812,77.4320987654321]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[8,8],[5,5],[7,7],[3,3],[1,1],[6,6],[4,4],[2,2]],"end_point":[[4,5],[8,1],[6,7],[1,2],[2,3],[3,4],[7,8],[5,6]],"handle_primary":[[2,[5.267489711934218,-0.7023319615912129]],[6,[-0.7023319615914261,-5.091906721536347]],[5,[0.0,0.0]],[4,[-1.9392278971834005,5.143169640356035]],[8,[-3.5116598079559935,-1.6680384087791396]],[3,[3.456189131014753,3.3025807251918877]],[7,[-6.236870142765838,-1.74052190030676]],[1,[0.0,0.0]]],"handle_end":[[6,[3.7750342935527215,1.0534979423868265]],[7,[3.5116598079559935,1.6680384087791396]],[1,[-5.267489711934218,0.7023319615912129]],[2,[-3.950617283950578,-3.775034293552821]],[8,[0.08779149519887142,0.08779149519891405]],[3,[2.0192043895747247,-5.355281207133089]],[5,[0.6823799889585871,4.947254919948108]],[4,[0.0,0.0]]],"stroke":[[8,0],[3,0],[1,0],[5,0],[7,0],[6,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9684857454501250999,{"inputs":[{"Node":{"node_id":8699675339613677057,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13444661581815146533,{"inputs":[{"Node":{"node_id":16450742929146919960,"output_index":0,"lambda":false}},{"Node":{"node_id":10792166025753022402,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14993053984267866751,{"inputs":[{"Node":{"node_id":13907578809542898348,"output_index":0,"lambda":false}},{"Node":{"node_id":9863310024364795214,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16195626650123806176,{"inputs":[{"Node":{"node_id":14057307926677215422,"output_index":0,"lambda":false}},{"Node":{"node_id":1869448627329502330,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18279507457571359732,{"inputs":[{"Node":{"node_id":8697043784435445845,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3121275823460307102,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[2,[612.0,780.0]],[5,[595.5555555555555,791.1111111111111]],[3,[452.88888888888886,1025.3333333333333]],[4,[449.77777777777777,1025.7777777777778]],[1,[705.7777777777778,698.6666666666666]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[3,4],[4,5],[5,1],[2,3]],"handle_primary":[[2,[-35.111111111111086,34.66666666666663]],[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[54.93054949731868,-52.22097082256312]],[1,[0.0,0.0]]],"handle_end":[[5,[-1.1368683772161605e-13,-0.5925925925926094]],[2,[59.111111111111086,-144.8888888888889]],[1,[35.111111111111086,-34.66666666666663]],[4,[-99.11111111111104,94.22222222222229]],[3,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13269760558336088742,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[756.4444444444443,438.22222222222223]],[2,[447.1111111111111,332.44444444444446]],[3,[595.1111111111111,439.55555555555554]],[4,[698.2222222222222,483.1111111111111]],[1,[265.3333333333333,312.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[2,3],[4,5],[3,4],[1,2]],"handle_primary":[[2,[83.95959630801838,35.04735442215451]],[3,[20.8888888888888,20.444444444444457]],[4,[22.46059594926794,-9.800987323316916]],[1,[0.0,0.0]]],"handle_end":[[2,[-20.8888888888888,-20.444444444444457]],[1,[-96.88888888888886,-40.44444444444446]],[3,[-48.888888888888914,21.33333333333331]],[4,[-22.222222222222285,23.111111111111143]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11590691579869262546,{"inputs":[{"Node":{"node_id":11553850607251055696,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13481022631108980683,{"inputs":[{"Node":{"node_id":9182448229950585507,"output_index":0,"lambda":false}},{"Node":{"node_id":12224498203743157414,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14797986717815207528,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[868.0,380.44444444444446]],[4,[826.6666666666665,552.4444444444443]],[1,[80.0,557.0]],[2,[425.0,650.0]],[3,[665.7777777777778,658.6666666666667]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[4,5],[1,2],[2,3],[3,4]],"handle_primary":[[3,[0.0,0.0]],[4,[59.11111111111131,-70.66666666666652]],[2,[105.59298295237464,48.735222901095995]],[1,[134.0,-75.0]]],"handle_end":[[2,[0.0,0.0]],[1,[-104.0,-48.0]],[3,[-59.11111111111131,70.66666666666652]],[4,[0.0,0.0]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5861306074868809692,{"inputs":[{"Node":{"node_id":10190227675276560561,"output_index":0,"lambda":false}},{"Node":{"node_id":3636653585682494814,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13907578809542898348,{"inputs":[{"Node":{"node_id":12313564802550122052,"output_index":0,"lambda":false}},{"Node":{"node_id":15827578515555598997,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[581013017684525986,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[803.5555555555554,878.6666666666665]],[2,[852.0,631.1111111111111]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[-41.77777777777783,81.77777777777771]]],"handle_end":[[2,[0.0,-0.4444444444443434]],[1,[-37.77777777777783,80.88888888888903]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3670529450440935325,{"inputs":[{"Node":{"node_id":1384427686127078856,"output_index":0,"lambda":false}},{"Node":{"node_id":8543051864256131356,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12030171742672119253,{"inputs":[{"Node":{"node_id":12801133692316734622,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[7450965328305122110,{"inputs":[{"Node":{"node_id":2659768650911099730,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.4},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[1806828617441445250,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[395.3333333333333,758.0]],[3,[147.33333333333334,814.0000000000001]],[2,[304.6666666666667,765.3333333333333]],[4,[32.0,1025.3333333333333]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[1,2],[3,4],[2,3]],"handle_primary":[[2,[-32.666666666666686,0.6666666666667425]],[1,[0.0,0.0]],[3,[-50.13723402627032,36.301698579412914]]],"handle_end":[[2,[50.137234026270335,-36.301698579412914]],[3,[-0.6666666666666892,-122.66666666666686]],[1,[32.666666666666686,-0.6666666666667425]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13475705179546695973,{"inputs":[{"Node":{"node_id":11451028343967836482,"output_index":0,"lambda":false}},{"Node":{"node_id":501401493219507773,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2594533001540454577,{"inputs":[{"Node":{"node_id":15518174914032911052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9276497172451351253,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[605.1760402377686,111.78783721993597]],[1,[606.8928516994359,102.3453741807651]],[4,[605.9173906416706,103.71101966163694]],[2,[607.1269623532997,114.75323883554336]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[3,3],[2,2]],"end_point":[[1,2],[3,4],[4,1],[2,3]],"handle_primary":[[3,[-0.585276634659408,-2.419143423258646]],[4,[0.27360881696279193,-0.7182231445274425]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.585276634659408,2.4191434232586317]],[1,[-1.3656454808717626,-5.306508154244753]],[3,[-0.6242950769699291,1.6387745770462772]],[4,[0.0,0.03901844231063478]]],"stroke":[[2,0],[1,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7821977654068146599,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[917.0,471.6]],[3,[825.9524005971,863.6469292802573]],[2,[826.5068586621596,856.9308484975209]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[1,1],[2,2]],"end_point":[[2,3],[1,2],[3,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[94.89314133784036,-231.73084849752092]],[3,[-0.39999999999997726,191.19999999999985]],[2,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15126865253122550765,{"inputs":[{"Node":{"node_id":13014628586360765651,"output_index":0,"lambda":false}},{"Node":{"node_id":4307303572241320716,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2682920349304670808,{"inputs":[{"Node":{"node_id":10928540355449103287,"output_index":0,"lambda":false}},{"Node":{"node_id":16324258033206362312,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13368990606109678244,{"inputs":[{"Node":{"node_id":421715625023770179,"output_index":0,"lambda":false}},{"Node":{"node_id":15961046538654083626,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16290933138334939444,{"inputs":[{"Node":{"node_id":17426609415699324395,"output_index":0,"lambda":false}},{"Node":{"node_id":14888395629683671889,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12496143061817048445,{"inputs":[{"Node":{"node_id":7525593029671097583,"output_index":0,"lambda":false}},{"Node":{"node_id":7654665057468818389,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12880230498984021417,{"inputs":[{"Node":{"node_id":15949658764632267703,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[14883504161508594099,{"inputs":[{"Node":{"node_id":13368990606109678244,"output_index":0,"lambda":false}},{"Node":{"node_id":11025165626998987360,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7262199696924786895,{"inputs":[{"Node":{"node_id":14029368390543839187,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[952330505278607301,{"inputs":[{"Node":{"node_id":15038739378867834454,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5302437193964714993,{"inputs":[{"Node":{"node_id":1235106489581249820,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[10792166025753022402,{"inputs":[{"Node":{"node_id":2780251074492832077,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16649851742084147477,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[838.6666666666666,564.0]],[1,[870.6666666666665,383.55555555555554]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[16.000000000000227,37.33333333333337]]],"handle_end":[[1,[48.44444444444446,-91.11111111111109]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1272070255512697108,{"inputs":[{"Node":{"node_id":14012648643507848353,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17147975601187022720,{"inputs":[{"Node":{"node_id":18015048324114736039,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15518174914032911052,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[262.6666666666667,423.5555555555556]],[6,[129.77777777777777,406.2222222222222]],[2,[814.2222222222223,498.66666666666663]],[1,[851.5555555555557,370.66666666666663]],[4,[429.7777777777778,551.5555555555555]],[3,[639.1111111111112,614.6666666666666]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[1,1],[2,2],[5,5],[4,4]],"end_point":[[1,2],[5,6],[3,4],[4,5],[2,3]],"handle_primary":[[2,[-43.55555555555554,54.66666666666663]],[1,[0.0,0.0]],[5,[-58.2222222222222,-21.77777777777783]],[4,[-74.22222222222217,-57.77777777777783]],[3,[-83.11111111111109,3.111111111111086]]],"handle_end":[[5,[57.333333333333314,-5.777777777777828]],[1,[43.55555555555554,-54.66666666666663]],[3,[74.22222222222217,57.77777777777783]],[2,[83.11111111111109,-3.111111111111086]],[4,[66.87431172777582,25.01405553176352]]],"stroke":[[3,0],[2,0],[4,0],[5,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17078740291337047697,{"inputs":[{"Node":{"node_id":3406722917122601552,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84765625,"green":0.5384252,"blue":0.3874054,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.84765625,"green":0.5384252,"blue":0.3874054,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10264089084180279094,{"inputs":[{"Node":{"node_id":5213978458941436169,"output_index":0,"lambda":false}},{"Node":{"node_id":4332145463108161926,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":60.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[4859656512650360562,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[249.3333333333334,898.0]],[1,[163.33333333333343,1025.3333333333333]],[3,[416.66666666666663,803.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[2,[40.66666666666666,-40.666666666666515]],[1,[0.0,0.0]]],"handle_end":[[1,[-45.09988913511887,45.099889135118815]],[2,[-77.99999999999994,22.666666666666742]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13594670583065022897,{"inputs":[{"Node":{"node_id":13302269488061286120,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4265165189651403984,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":10264089084180279094,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12428327489525325219,{"inputs":[{"Node":{"node_id":14209241002058525241,"output_index":0,"lambda":false}},{"Node":{"node_id":1984475088429379731,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16767482995096345179,{"inputs":[{"Node":{"node_id":6532401937876437300,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5278509881589546420,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[824.4444444444445,850.2222222222223]],[1,[899.1111111111111,600.0000000000001]],[3,[823.7037037037037,861.8666666666667]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[-26.31111111111113,120.79999999999984]],[1,[39.55555555555554,-105.8222222222222]]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7659717355245331967,{"inputs":[{"Node":{"node_id":18422317423856403288,"output_index":0,"lambda":false}},{"Node":{"node_id":4479074488343511985,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8697043784435445845,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"delta":[[35,[680.888888888889,281.48148148148147]],[3,[679.9012345679013,198.716049382716]],[34,[647.5061728395062,240.79012345679013]],[19,[205.23456790123456,227.55555555555557]],[28,[278.9135802469136,223.80246913580248]],[6,[553.7777777777777,195.11111111111111]],[15,[155.85185185185185,253.03703703703707]],[9,[326.22222222222223,208.0]],[18,[195.1604938271605,228.54320987654324]],[21,[216.8888888888889,238.22222222222223]],[32,[526.0246913580247,240.79012345679013]],[17,[183.50617283950615,231.70370370370372]],[29,[369.3827160493828,240.19753086419755]],[10,[271.1111111111111,207.55555555555551]],[1,[699.5555555555554,303.55555555555554]],[23,[185.37661941777165,263.56957780826093]],[4,[647.5555555555554,171.55555555555557]],[7,[452.0,206.22222222222223]],[11,[208.44444444444443,212.0]],[13,[173.03703703703707,226.962962962963]],[20,[217.87654320987656,231.90123456790127]],[26,[227.55555555555557,246.51851851851853]],[14,[155.06172839506175,249.08641975308643]],[30,[425.4814814814815,246.71604938271605]],[22,[195.95061728395063,253.8271604938272]],[16,[172.44444444444446,239.40740740740745]],[2,[701.7777777777777,252.0]],[5,[616.4444444444443,170.22222222222223]],[25,[201.87654320987656,262.12345679012344]],[31,[463.01234567901247,246.71604938271605]],[33,[602.2716049382716,229.5308641975309]],[24,[188.90085842299663,268.4351595864769]],[27,[251.06172839506175,233.283950617284]],[8,[413.77777777777777,199.55555555555551]],[12,[199.11111111111111,214.51851851851853]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"start_point":[[35,35],[34,34],[9,9],[23,23],[31,31],[6,6],[16,16],[2,2],[1,1],[11,11],[27,27],[17,17],[24,24],[28,28],[29,29],[8,8],[21,21],[25,25],[30,30],[5,5],[7,7],[13,13],[10,10],[33,33],[3,3],[20,20],[15,15],[18,18],[12,12],[14,14],[32,32],[22,22],[19,19],[26,26],[4,4]],"end_point":[[7,8],[3,4],[18,19],[13,14],[9,10],[21,22],[14,15],[23,24],[30,31],[28,29],[2,3],[35,1],[12,13],[16,17],[8,9],[34,35],[26,27],[6,7],[1,2],[27,28],[22,23],[20,21],[15,16],[4,5],[10,11],[11,12],[25,26],[32,33],[31,32],[17,18],[33,34],[24,25],[5,6],[19,20],[29,30]],"handle_primary":[[4,[-10.222222222222172,-3.5555555555555713]],[13,[-9.28395061728395,7.703703703703695]],[11,[0.0,0.0]],[17,[2.7654320987654444,-0.790123456790127]],[31,[19.753086419753004,-4.543209876543159]],[5,[-12.0,3.555555555555543]],[21,[-3.753086419753061,3.5555555555555713]],[3,[-17.576025737442137,-14.306067460708704]],[25,[4.938271604938279,-3.160493827160451]],[19,[4.74074074074079,0.9876543209876728]],[10,[-12.888888888888856,1.7777777777778567]],[28,[14.81481481481478,1.9753086419753176]],[1,[0.0,0.0]],[35,[10.469135802469168,11.851851851851848]],[12,[-5.53086419753086,3.3580246913580254]],[22,[-8.16460905349794,4.4115226337448235]],[23,[-0.9364426154549506,2.4191434232586175]],[34,[10.074074074074131,11.85185185185182]],[6,[-23.11111111111109,9.777777777777771]],[27,[6.518518518518505,-6.518518518518562]],[33,[24.098765432098844,-2.5679012345678984]],[32,[23.90123456790127,-2.765432098765416]],[8,[-25.33333333333331,1.7777777777778567]],[16,[5.530864197530889,-7.111111111111143]],[24,[3.3430068414448044,-0.5735531240474074]],[30,[11.061728395061778,0.7901234567900985]],[14,[-1.61975308641982,1.935802469135723]],[9,[-30.22222222222223,1.3333333333333712]],[2,[-2.913580246913398,-22.66666666666669]],[18,[4.148148148148124,-1.3827160493827364]],[29,[29.4320987654321,3.358024691358054]],[26,[8.493827160493822,-2.765432098765416]],[7,[-8.444444444444457,-2.2222222222222285]],[15,[3.7530864197531177,-1.580246913580254]],[20,[2.3703703703704093,1.185185185185162]]],"handle_end":[[7,[25.33333333333331,-1.777777777777743]],[32,[-24.098765432098844,2.5679012345678984]],[25,[-8.493827160493822,2.765432098765416]],[12,[9.283950617283978,-7.703703703703695]],[5,[23.11111111111109,-9.777777777777745]],[28,[-29.4320987654321,-3.358024691357997]],[33,[-10.074074074074131,-11.851851851851848]],[29,[-11.061728395061778,-0.790123456790127]],[27,[-14.81481481481478,-1.9753086419753176]],[10,[20.88888888888889,-1.4814814814814952]],[13,[1.4782632300064904,-1.7667048358613044]],[9,[12.888888888888856,-1.777777777777743]],[22,[0.752878950104872,-1.9449372877709263]],[21,[9.952891875905069,-5.377772223271279]],[1,[2.822923929132685,21.961391245287817]],[8,[30.22222222222223,-1.3333333333333712]],[26,[-6.518518518518505,6.518518518518505]],[35,[0.0,5.684341886080804e-14]],[34,[-10.469135802469168,-11.851851851851848]],[4,[12.0,-3.555555555555543]],[11,[5.530864197530917,-3.3580246913580254]],[15,[-5.530864197530889,7.111111111111086]],[24,[-4.938271604938279,3.160493827160451]],[19,[-2.3703703703704093,-1.185185185185162]],[17,[-4.148148148148152,1.3827160493827648]],[2,[8.493827160493879,6.913580246913597]],[3,[10.222222222222172,3.5555555555555713]],[31,[-23.90123456790127,2.7654320987653875]],[23,[-1.24660051630255,0.213876804468498]],[18,[-4.740740740740705,-0.9876543209876728]],[14,[-3.7530864197531177,1.580246913580254]],[6,[8.444444444444457,2.222222222222257]],[20,[3.753086419753089,-3.5555555555556]],[16,[-2.765432098765416,0.790123456790127]],[30,[-19.753086419753004,4.543209876543187]]],"stroke":[[13,0],[24,0],[4,0],[33,0],[3,0],[18,0],[17,0],[20,0],[14,0],[30,0],[15,0],[34,0],[32,0],[5,0],[21,0],[31,0],[26,0],[8,0],[25,0],[11,0],[16,0],[35,0],[19,0],[6,0],[22,0],[9,0],[12,0],[29,0],[10,0],[23,0],[28,0],[27,0],[7,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":35}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4236845268521674740,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[397.6296296296296,1025.185185185185]],[3,[393.1851851851852,1025.4814814814813]],[2,[568.8888888888889,785.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[33.777777777777885,-150.22222222222194]],[3,null],[1,[-153.1851851851851,112.88888888888891]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1984475088429379731,{"inputs":[{"Node":{"node_id":1621196991038859321,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[9271343782272072828,{"inputs":[{"Node":{"node_id":4078100635676202528,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[514796034658094296,{"inputs":[{"Node":{"node_id":13352561089252322209,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8698602280607307123,{"inputs":[{"Node":{"node_id":14098374807212007572,"output_index":0,"lambda":false}},{"Node":{"node_id":14285767317419627814,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10770443343193024138,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[4,[656.6913580246915,28.049382716049383]],[6,[656.4609053497943,30.375857338820303]],[3,[634.172839506173,30.814814814814817]],[7,[634.1618655692731,33.7997256515775]],[5,[671.3086419753088,28.641975308641975]],[1,[616.0987654320988,23.01234567901235]],[2,[621.0370370370372,23.01234567901235]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[7,7],[4,4],[2,2],[1,1],[5,5],[3,3]],"end_point":[[1,2],[5,6],[3,4],[2,3],[7,1],[6,7],[4,5]],"handle_primary":[[7,[-6.408779149519887,-0.8340192043895769]],[2,[1.1851851851851052,1.5802469135802468]],[1,[0.0,0.0]],[4,[4.345679012345727,-0.39506172839505993]],[6,[-10.31550068587103,2.4142661179698237]],[5,[0.0,0.0]],[3,[6.024691358024711,0.4938271604938329]]],"handle_end":[[1,[-1.1851851851851052,-1.5802469135802468]],[6,[6.408779149519887,0.8340192043895769]],[3,[-4.345679012345727,0.39506172839506704]],[7,[4.455418381344316,5.4759945130315515]],[5,[10.31550068587103,-2.4142661179698237]],[2,[-6.024691358024711,-0.49382716049382935]],[4,[-0.39506172839503506,-0.5925925925925917]]],"stroke":[[7,0],[4,0],[5,0],[2,0],[6,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1019037285881657884,{"inputs":[{"Node":{"node_id":11481949351661484921,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[8410534738018320047,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[762.5185185185184,667.5061728395063]],[1,[834.6666666666665,551.8024691358028]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[44.88888888888857,-64.49382716049388]]],"handle_end":[[1,[47.85185185185162,-63.160493827160394]],[2,null]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2397243911096708995,{"inputs":[{"Node":{"node_id":10587073897090054035,"output_index":0,"lambda":false}},{"Node":{"node_id":7505360855062237520,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[541002100261582638,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[536.8888888888889,544.4444444444445]],[1,[456.88888888888886,483.55555555555554]],[4,[648.4444444444443,543.5555555555555]],[3,[609.7777777777777,559.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[3,[20.0,-7.555555555555543]],[2,[25.777777777777715,11.555555555555545]]],"handle_end":[[2,[-20.0,7.555555555555543]],[3,[0.0,0.0]],[1,[-25.777777777777715,-11.555555555555545]]],"stroke":[[3,0],[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5009664118231399060,{"inputs":[{"Node":{"node_id":3226457726231232839,"output_index":0,"lambda":false}},{"Node":{"node_id":17207895962122263432,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1378578509112405,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[593.3924706599604,60.59564090839812]],[2,[599.5281207133061,50.3923182441701]],[1,[602.6886145404666,50.91906721536352]],[3,[590.4855967078191,66.80932784636488]],[4,[594.6410608139003,75.57872275567746]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[1,1],[4,4],[5,5],[2,2]],"end_point":[[5,1],[4,5],[1,2],[2,3],[3,4]],"handle_primary":[[2,[-1.843621399176982,0.5267489711934203]],[1,[0.0,0.0]],[3,[1.9314128943758533,7.3257125438195345]],[4,[0.0,0.0]],[5,[1.248590153939972,-3.9798811156835896]]],"handle_end":[[3,[0.0,0.0]],[2,[-2.7532629181224593,-10.4429315732828]],[1,[1.843621399176982,-0.5267489711934203]],[4,[-1.704168058538812,5.432035686592322]],[5,[-4.379820149367788,0.9754610577655498]]],"stroke":[[5,0],[2,0],[1,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[501401493219507773,{"inputs":[{"Node":{"node_id":9425359632144678256,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1235106489581249820,{"inputs":[{"Node":{"node_id":3970516859959908758,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2394762731964337494,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4422453582814483232,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,1024.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4341772758799935306,{"inputs":[{"Node":{"node_id":1785173043494067496,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3226457726231232839,{"inputs":[{"Node":{"node_id":4493274523708782092,"output_index":0,"lambda":false}},{"Node":{"node_id":7922156219537051964,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6645255982686652881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]],[1,[0.27589238888950707,0.0]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1162381870526064378,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":9271343782272072828,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7447657690776686262,{"inputs":[{"Node":{"node_id":3649809135741361946,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9698363115186534174,{"inputs":[{"Node":{"node_id":1661691009086487874,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[5471152581000334146,{"inputs":[{"Node":{"node_id":12761901161949743155,"output_index":0,"lambda":false}},{"Node":{"node_id":952330505278607301,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15827578515555598997,{"inputs":[{"Node":{"node_id":15656854169166220905,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14539627480594383748,{"inputs":[{"Node":{"node_id":581013017684525986,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2282726379014798660,{"inputs":[{"Node":{"node_id":454416440369338250,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11417901103965737900,{"inputs":[{"Node":{"node_id":13269760558336088742,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15637103575662751567,{"inputs":[{"Node":{"node_id":314278016428495768,"output_index":0,"lambda":false}},{"Node":{"node_id":4350324834849900949,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10375238420217738812,{"inputs":[{"Node":{"node_id":2282726379014798660,"output_index":0,"lambda":false}},{"Node":{"node_id":17078740291337047697,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[11632506522064533635,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13352561089252322209,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9371909264427723282,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12219771677493189964,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1984475088429379731,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8644924780109919177,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2959546142916532439,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15578929303912288394,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12030171742672119253,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14345191642063772510,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8934999452649011837,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,130]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[581013017684525986,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1713644030979611623,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12876462860151722087,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14831840560430171946,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11590691579869262546,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10127467043900015225,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15239301303367148581,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9374264173303233490,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4493274523708782092,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4105711298139980122,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4859656512650360562,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9271343782272072828,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5040278174920511484,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14012648643507848353,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16051539163551573193,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15961046538654083626,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2878992817082507910,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13035777574951374461,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6292009934909381201,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,88]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2594533001540454577,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5326536612985524219,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6749771744300551215,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[501401493219507773,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1162381870526064378,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3170924135668664007,{"persistent_metadata":{"reference":"Merge","display_name":"Pointing Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18279507457571359732,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3121275823460307102,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12062649793560663566,{"persistent_metadata":{"reference":"Merge","display_name":"Solid Red Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16796171662855500935,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7747398671834040298,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16732130236852371275,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13644138583806412631,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1806828617441445250,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9782123335421401489,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13014628586360765651,{"persistent_metadata":{"reference":"Merge","display_name":"Dotted Aura","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4372998635946271235,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4350324834849900949,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7893851488963635918,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5269304445610080925,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17891208858820401648,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9954843247420111867,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[314278016428495768,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14098374807212007572,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15656854169166220905,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8698602280607307123,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15949658764632267703,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11194653561109699287,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1019037285881657884,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3165571685352930240,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8699675339613677057,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13594670583065022897,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1204243038352113866,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12554368619682347699,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10264089084180279094,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12428327489525325219,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11479098559726891734,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10860592954464951000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17364155187784942740,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3970516859959908758,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12131058586835568367,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15492651270767932214,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7141088190930752823,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13163272246010991228,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1384427686127078856,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5302437193964714993,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[615144098061106242,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10432831427187785843,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11565160497886435388,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3955326429435439190,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9529195152569434392,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2394762731964337494,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-3,1]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9425359632144678256,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12224498203743157414,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14057307926677215422,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3649809135741361946,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16434255153991868080,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6645255982686652881,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14991324592500870173,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10792166025753022402,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13481022631108980683,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13045580349734858212,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6672826052605647592,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15038739378867834454,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11899713172487274471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15446793500614592278,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12387541320114693418,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17336535036064625290,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2175432926627256613,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,328]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11417901103965737900,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11666664915283969027,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18422317423856403288,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[514796034658094296,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11659756061767599421,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11481949351661484921,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10375238420217738812,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3971837674569123876,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16536768589601337644,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7654665057468818389,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3636653585682494814,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10689298484366290551,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1785173043494067496,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16614450796751955858,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17967471489196302183,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3150436463719911922,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15827578515555598997,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2659768650911099730,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7262199696924786895,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16339345235172368839,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10190227675276560561,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5278509881589546420,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14539627480594383748,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11021243031011826737,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17378885078543074499,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6532401937876437300,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4332145463108161926,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,292]}}},"network_metadata":null}}],[9863310024364795214,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8240895922641772563,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5555007473125503522,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8410534738018320047,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2422139482859833437,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14817659161913199655,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17324767436949538365,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2282726379014798660,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7450965328305122110,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4909350123806022131,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14887821801874852671,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16649851742084147477,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18319784717194273926,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14035980686649077716,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14797986717815207528,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6867142265138950838,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7525593029671097583,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14675232891471617236,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14862049226133442027,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11058365317860779469,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15735375935164094402,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6416452251137958677,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13907578809542898348,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4479074488343511985,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4572557574846980832,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15857077552290328068,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7385465194555106679,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,211]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4832236468224231783,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11677503666435782605,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5471152581000334146,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14946189826912398678,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4663768795652429571,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10270446074640675342,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[172538270105470471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7505360855062237520,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2682920349304670808,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3992858139802231032,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3535178979443201645,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13261814586176172586,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12531351117929704587,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15303587427289959766,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[542361600097372754,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1869448627329502330,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17699121037850769131,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11573595155909211511,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2660652185019504730,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9778375740427894463,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3627710206997006419,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8543051864256131356,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[454416440369338250,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14894569344576297448,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8230694129617719636,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11616089678400336955,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9698363115186534174,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15460109068588328521,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[421715625023770179,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2440895173483452224,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11451028343967836482,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6580280438672662494,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6988349135757634271,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1621196991038859321,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12313564802550122052,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5174744389209053970,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2126710823743005151,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1235106489581249820,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17064046832210629373,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17147975601187022720,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13269760558336088742,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15815816861435910950,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15637103575662751567,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7466034304713056391,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13557369662261607646,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17815494794630739611,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3827449344952693766,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7320676248579211727,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9182448229950585507,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17207349373429328029,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10619788176782820865,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17133591775058457007,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[431994205232245356,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,7]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10795820039540504703,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18015048324114736039,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10336592647221792772,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4265165189651403984,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5009664118231399060,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2641530639940889619,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14079496619264986678,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8697043784435445845,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11356586238302409958,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8413863870096329943,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17118107476414252025,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7447657690776686262,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1157261387411722141,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4453139144069993994,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16137033772363318157,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16450742929146919960,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17494926338451345058,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13014916927589286309,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10770443343193024138,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4577174813962563383,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6282972142629473139,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10253927692147706615,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18214377096178867498,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5140869461760168364,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12385950900718181935,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5455777299776842371,{"persistent_metadata":{"reference":"Merge","display_name":"Beaded Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2780251074492832077,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13302269488061286120,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17426609415699324395,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4307303572241320716,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,319]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14225285635863713990,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14012583111791538162,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3414873131936208778,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2698266912167150713,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17971411534648521628,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14778750092903591172,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11025165626998987360,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16530658574540156160,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15466714490303763249,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12496143061817048445,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15126865253122550765,{"persistent_metadata":{"reference":"Merge","display_name":"Dotted Bodice","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11553850607251055696,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[907841922684377912,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4248321400839848160,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,124]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9276497172451351253,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14598755603287563819,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16446146761452576438,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16805628435335819723,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15498700602024283966,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5213978458941436169,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11656581020969095354,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15798070933198867970,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1659518581611333812,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10514847656270897393,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13231685386999438557,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1272070255512697108,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9470742171134780193,{"persistent_metadata":{"reference":"Merge","display_name":"Dotted Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":81}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14888395629683671889,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14883504161508594099,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,295]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1378578509112405,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4222034829755771252,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13475705179546695973,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4577638792388493935,{"persistent_metadata":{"reference":"Merge","display_name":"Head and Neck","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17529660518597229229,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18067513817508158001,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6973438081601736688,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7659717355245331967,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1661691009086487874,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16290933138334939444,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17078740291337047697,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,208]}}},"network_metadata":null}}],[10421722418968896452,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10133176481349663495,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4341772758799935306,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[541002100261582638,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6666260895482068061,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2087303479944421366,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11464423670065789907,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12761901161949743155,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14993053984267866751,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13368990606109678244,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13444661581815146533,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,97]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16324258033206362312,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12594527670567285670,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6124821161363551058,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14285767317419627814,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15518174914032911052,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8375495949882478840,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8091904580702893317,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9684857454501250999,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9847383247226990698,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5861306074868809692,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[952330505278607301,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11630078441485655672,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10086073308516686449,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5020096817747898028,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15286091228862934481,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16175421708184657649,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3670529450440935325,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14029368390543839187,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2044103368441997753,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14982414026754548178,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10420981328998103391,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12049041947382267086,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12473080738469616517,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8595304668947966919,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13045087323693407920,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9740500978584792725,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3802858053991775169,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3686761601672683183,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4078100635676202528,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11268046366284173800,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2397243911096708995,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15177845878727456758,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17945736750161448391,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14209241002058525241,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4422453582814483232,{"persistent_metadata":{"reference":"Merge","display_name":"Hair and Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-7,4]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10928540355449103287,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10599660455959346550,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1689789805659535712,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1889157037801767612,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18190631752493248867,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10587073897090054035,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8814059393325469059,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16551385471328831128,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15982852655074258238,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10586744777717861556,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8766106989344197438,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10424806499648491677,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4131094614457622424,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10918055532782314571,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12801133692316734622,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10415872992231003638,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15896921950407486754,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16767482995096345179,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16195626650123806176,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4784708315242877950,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13975451746581400000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16756940771483104467,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11199691961479466803,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12838133055063962839,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14537754528543289381,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7821977654068146599,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5002654561220917457,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_min":1.0,"range_max":100.0,"min":0.01,"mode":"Range"},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4787732047489141819,{"persistent_metadata":{"reference":"Merge","display_name":"Tucked Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":24}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4236845268521674740,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5185036609290210853,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12880230498984021417,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3406722917122601552,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,208]}}},"network_metadata":null}}],[15395954548128560685,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7922156219537051964,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1167210731467447244,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17207895962122263432,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18207065424980079673,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11804065810513502701,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3226457726231232839,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[737.4067596403,-6318.358748666366],"tilt":0.0,"zoom":0.6328125,"flip":false},"node_graph_to_viewport":[0.6328125,0.0,0.0,0.6328125,1457.0,-3418.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[3457800614598085282],[17426704671299246894],[2699408592782313690],[4493274523708782092],[14031411536409518176],[13263961817794116841],[835795066714655983],[11477846841203274509],[727544715487174952],[6480666310383891203],[15086626938904467381],[12994398686940961368],[15086626938904467381],[],[12994398686940961368],[],[5140869461760168364],[11677503666435782605],[776454851019809551],[],[10662978266497754900],[],[13201515093260842314],[],[3932608775253338292],[],[8090442493082590595],[],[17545135276965178247],[4332145463108161926],[],[4332145463108161926],[],[4332145463108161926],[],[11356586238302409958,10086073308516686449],[],[4332145463108161926],[],[3406722917122601552],[4332145463108161926],[],[4332145463108161926],[],[10086073308516686449],[17545135276965178247],[],[17078740291337047697],[3457800614598085282],[3457800614598085282,17426704671299246894],[3457800614598085282,17426704671299246894,2699408592782313690],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440,14480644719732559657],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440,14480644719732559657,3601587624047636241],[],[17078740291337047697],[3406722917122601552],[],[9470742171134780193],[14883504161508594099],[],[13163272246010991228],[],[4332145463108161926],[17078740291337047697],[],[],[17078740291337047697,3406722917122601552],[],[9470742171134780193],[13368990606109678244],[9470742171134780193],[14883504161508594099],[421715625023770179],[3670529450440935325],[4265165189651403984],[]],"selection_redo_history":[]}}},"collapsed":[4422453582814483233,4577638792388493936,3170924135668664008,4787732047489141820,12062649793560663567,5455777299776842372,9470742171134780194,15126865253122550766,13014628586360765652],"name":"red-dress.graphite","commit_hash":"8fa46ba63a69bb5fa18a49194cf112d963a2d43b","document_ptz":{"pan":[-512.5,-515.648496025349],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":2394762731964337494,"output_index":0}}],"nodes":[[10127467043900015225,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[644.0,726.6666666666666]],[1,[258.00000000000006,994.6666666666664]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-328.66666666666674,129.33333333333337]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15961046538654083626,{"inputs":[{"Node":{"node_id":1889157037801767612,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17378885078543074499,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[823.2222222222221,660.4444444444445]],[4,[709.5555555555554,1026.6666666666667]],[3,[707.5,1026.5]],[6,[725.7777777777779,1026.370370370371]],[7,[727.5555555555554,1026.6666666666663]],[5,[740.4444444444443,857.1111111111111]],[2,[745.5,826.0]],[8,[746.0000000000001,842.9999999999999]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[7,7],[4,4],[6,6],[5,5],[2,2],[3,3],[8,8]],"end_point":[[5,6],[2,3],[3,4],[1,2],[8,1],[4,5],[7,8],[6,7]],"handle_primary":[[3,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[8,[17.33333333333337,-84.99999999999989]],[2,[-24.5,85.0]],[7,[0.0,0.0]]],"handle_end":[[4,[-23.11111111111109,90.44444444444456]],[5,[-7.555555555555884,-59.25925925925992]],[2,[0.0,0.0]],[1,[24.5,-85.0]],[8,[1.772016460905547,0.9591220850479658]],[6,[0.0,0.0]],[7,[-26.8034437596026,131.4399645903585]],[3,[0.0,0.0]]],"stroke":[[5,0],[8,0],[4,0],[2,0],[1,0],[3,0],[7,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14537754528543289381,{"inputs":[{"Node":{"node_id":1689789805659535712,"output_index":0}},{"Node":{"node_id":17364155187784942740,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11656581020969095354,{"inputs":[{"Node":{"node_id":8413863870096329943,"output_index":0}},{"Node":{"node_id":9698363115186534174,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4350324834849900949,{"inputs":[{"Node":{"node_id":6672826052605647592,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15857077552290328068,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[820.8888888888889,395.55555555555554]],[4,[702.2222222222222,621.3333333333333]],[3,[740.0,516.0]],[1,[848.8888888888889,330.66666666666663]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[2,3],[3,4],[1,2]],"handle_primary":[[3,[-17.77777777777783,35.55555555555554]],[2,[-15.111111111111086,22.66666666666663]],[1,[0.0,0.0]]],"handle_end":[[2,[17.77777777777783,-35.55555555555554]],[3,[6.222222222222172,-38.66666666666674]],[1,[15.111111111111086,-22.66666666666663]]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15735375935164094402,{"inputs":[{"Node":{"node_id":3414873131936208778,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15239301303367148581,{"inputs":[{"Node":{"node_id":11268046366284173800,"output_index":0}},{"Node":{"node_id":5269304445610080925,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[615144098061106242,{"inputs":[{"Node":{"node_id":14675232891471617236,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11058365317860779469,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[181.0,1023.0]],[4,[397.3333333333333,770.6666666666666]],[6,[368.0,902.6666666666669]],[5,[479.00000000000006,817.0]],[7,[311.3333333333333,1018.6666666666666]],[3,[352.0,833.0]],[2,[242.0,917.0]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[4,4],[1,1],[7,7],[2,2],[3,3],[5,5],[6,6]],"end_point":[[6,7],[7,1],[2,3],[4,5],[3,4],[5,6],[1,2]],"handle_primary":[[7,[0.0,0.0]],[4,[0.0,0.0]],[5,[-35.31654570364651,23.463149348287175]],[6,[0.0,0.0]],[1,[0.0,0.0]],[3,[37.4110841377784,-16.935189837826556]],[2,[40.0718943376238,-39.16116946631416]]],"handle_end":[[5,[45.99999999999994,-52.00000000000023]],[6,[18.0,-55.33333333333326]],[3,[0.0,0.0]],[1,[-40.071894337623746,39.16116946631416]],[7,[0.0,1.3333333333337123]],[2,[-37.4110841377784,16.935189837826556]],[4,[35.31654570364611,-23.463149348286947]]],"stroke":[[6,0],[5,0],[1,0],[3,0],[7,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14946189826912398678,{"inputs":[{"Node":{"node_id":10086073308516686449,"output_index":0}},{"Node":{"node_id":12030171742672119253,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11553850607251055696,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[2,[596.631001371742,112.37311385459536]],[1,[597.5967078189302,96.04389574759946]],[4,[608.570644718793,131.2482853223594]],[5,[619.2812071330591,124.6639231824417]],[3,[594.085048010974,128.61454046639233]],[6,[609.9753086419754,133.5308641975309]],[7,[591.5390946502059,128.7023319615912]],[8,[594.962962962963,111.93415637860085]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[3,3],[2,2],[8,8],[6,6],[5,5],[4,4],[7,7],[1,1]],"end_point":[[4,5],[8,1],[5,6],[2,3],[1,2],[3,4],[7,8],[6,7]],"handle_primary":[[3,[3.5534615822588194,4.6302681223374975]],[5,[0.0,0.0]],[7,[-2.3703703703704377,-6.057613168724245]],[6,[-7.286694101508829,3.0727023319615796]],[1,[0.0,0.0]],[2,[-4.126200274348321,7.1111111111111]],[8,[4.1262002743484345,-6.935528120713329]],[4,[4.038408779149563,-1.492455418381354]]],"handle_end":[[8,[-0.0877914951989851,0.08779149519889984]],[5,[7.286694101508829,-3.0727023319615796]],[3,[-4.038408779149563,1.492455418381354]],[2,[-2.8971193415636662,-3.7750342935528063]],[7,[-4.1262002743484345,6.935528120713272]],[1,[4.126200274348321,-7.111111111111114]],[4,[0.0,0.0]],[6,[2.3703703703704377,6.057613168724259]]],"stroke":[[2,0],[7,0],[4,0],[6,0],[1,0],[8,0],[3,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4453139144069993994,{"inputs":[{"Node":{"node_id":11804065810513502701,"output_index":0}},{"Node":{"node_id":3955326429435439190,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5040278174920511484,{"inputs":[{"Node":{"node_id":14345191642063772510,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4577174813962563383,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[682.7287205627164,97.04177207029592]],[1,[681.3689965686843,65.32157692417977]],[2,[681.8346756482305,95.35045043533154]],[4,[683.6813083078299,66.11925839089211]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[3,3],[4,4]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[4,[-1.0406539360374154,-1.1405457962673182]],[3,[-1.544754703853414,-12.605862910106907]],[2,[0.0,0.0]]],"handle_end":[[1,[-2.6406503472093164,-12.592334294499352]],[2,[-0.5302752037773644,-0.69223185792994]],[3,null],[4,[-1.1368683772161605e-13,-1.4210854715202004e-14]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14225285635863713990,{"inputs":[{"Node":{"node_id":8410534738018320047,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[25.333333333333485,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11899713172487274471,{"inputs":[{"Node":{"node_id":9954843247420111867,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6580280438672662494,{"inputs":[{"Node":{"node_id":15395954548128560685,"output_index":0}},{"Node":{"node_id":14598755603287563819,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17967471489196302183,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[568.8888888888889,785.4814814814813]],[3,[334.8148148148148,1025.4814814814813]],[1,[339.25925925925924,1025.185185185185]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[-209.77777777777777,108.44444444444468]],[2,[42.07407407407419,-157.6296296296293]],[3,null]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10086073308516686449,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":3971837674569123876,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4222034829755771252,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[165.5308641975309,250.07407407407408]],[3,[152.49382716049382,262.71604938271605]],[4,[161.6241426611797,258.3703703703704]],[2,[155.25925925925927,256.7901234567901]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[3,4],[1,2],[4,1],[2,3]],"handle_primary":[[3,[0.0,0.0]],[2,[-1.9753086419753176,0.790123456790127]],[4,[2.7654320987654444,-3.950617283950635]],[1,[0.0,0.0]]],"handle_end":[[3,[-2.7654320987654444,3.950617283950635]],[4,[0.0,0.0]],[1,[1.9753086419753176,-0.790123456790127]],[2,[-0.3950617283950919,-1.7777777777777717]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4307303572241320716,{"inputs":[{"Node":{"node_id":4265165189651403984,"output_index":0}},{"Node":{"node_id":4572557574846980832,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2878992817082507910,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[777.4814814814814,867.5555555555555]],[3,[741.6296296296296,1027.5555555555557]],[2,[738.074074074074,1027.2592592592591]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[2,3],[3,1],[1,2]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[-25.185185185185105,132.14814814814804]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9863310024364795214,{"inputs":[{"Node":{"node_id":5278509881589546420,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11025165626998987360,{"inputs":[{"Node":{"node_id":5326536612985524219,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-15.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[15982852655074258238,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[798.222222222222,639.8024691358025]],[1,[837.9999999999998,535.8024691358025]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[2,[31.037037037037067,-61.11111111111131]],[1,[0.0,0.0]]],"handle_end":[[1,[34.000000000000114,-59.77777777777783]],[2,null]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17699121037850769131,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[158.22222222222223,332.0]],[3,[282.2222222222222,277.3333333333333]],[2,[429.33333333333326,295.1111111111111]],[1,[531.1111111111111,364.0]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[3,[-33.333333333333286,6.666666666666686]],[2,[-56.8888888888888,-24.0]]],"handle_end":[[3,[60.0,-41.77777777777777]],[1,[56.8888888888888,24.0]],[2,[33.333333333333314,-6.666666666666686]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5174744389209053970,{"inputs":[{"Node":{"node_id":12385950900718181935,"output_index":0}},{"Node":{"node_id":5040278174920511484,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1689789805659535712,{"inputs":[{"Node":{"node_id":15637103575662751567,"output_index":0}},{"Node":{"node_id":11590691579869262546,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9778375740427894463,{"inputs":[{"Node":{"node_id":16137033772363318157,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5002654561220917457,{"inputs":[{"Node":{"node_id":11632506522064533635,"output_index":0}},{"Value":{"tagged_value":{"F64":35.0},"exposed":false}},{"Value":{"tagged_value":{"U32":206},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8699675339613677057,{"inputs":[{"Node":{"node_id":15982852655074258238,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[40.2222222222224,-10.469135802469168]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18207065424980079673,{"inputs":[{"Node":{"node_id":13035777574951374461,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2660652185019504730,{"inputs":[{"Node":{"node_id":1806828617441445250,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2959546142916532439,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[3,[0.5,1.0]],[2,[1.0,0.5]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[2,2],[4,4],[3,3]],"end_point":[[4,1],[1,2],[2,3],[3,4]],"handle_primary":[[3,[-0.275892388889507,0.0]],[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[1,[0.27589238888950707,0.0]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]]],"stroke":[[3,0],[1,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11479098559726891734,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[6,[717.9588477366254,99.32144490169182]],[5,[718.310013717421,90.01554641060812]],[2,[669.2053040695015,63.20987654320987]],[11,[694.9574759945133,76.78829446730683]],[10,[712.047553726566,86.56241426611797]],[4,[704.5560128029263,81.29492455418381]],[7,[710.5648529187624,103.39887212315196]],[3,[686.5294924554183,63.38545953360767]],[9,[717.5491540923639,95.80978509373573]],[8,[709.979576284103,102.93065081542449]],[12,[683.3104709647919,64.0877914951989]],[1,[660.660265203475,61.39551897576588]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[10,10],[3,3],[7,7],[5,5],[6,6],[4,4],[11,11],[9,9],[2,2],[1,1],[12,12],[8,8]],"end_point":[[10,11],[2,3],[4,5],[6,7],[7,8],[8,9],[1,2],[11,12],[3,4],[9,10],[5,6],[12,1]],"handle_primary":[[6,[-1.9184335509834227,1.995170893022717]],[10,[-4.096936442615174,-1.872885230909901]],[2,[5.4430727023319605,-0.6438042981252892]],[12,[-12.8760859625055,-0.4682213077274682]],[3,[3.4531321444902687,2.1655235482396193]],[7,[-0.585276634659408,-0.4682213077274753]],[11,[-5.618655692729931,-7.257430269775952]],[1,[0.0,0.0]],[4,[8.369455875628773,2.867855509830818]],[8,[0.0,0.0]],[5,[1.1120256058526363,1.9314128943758817]],[9,[0.17558299039785652,-3.5116598079561214]]],"handle_end":[[9,[4.0931309699032,1.8711455862415676]],[8,[-0.17558299039785652,3.511659807956093]],[7,null],[2,[-3.4853769593560173,-2.1857448728164144]],[12,[4.9748513946045705,5.91129401005945]],[1,[-5.4430727023319605,0.6438042981252892]],[3,[-8.369455875628773,-2.867855509830818]],[11,[4.036165212980222,0.14676964410837456]],[4,[-1.8416562954789697,-3.1986661974113133]],[10,[5.464020763447934,7.057693486120044]],[6,[1.706505264591101,-0.4025776799149554]],[5,[2.926383173296813,-3.043438500228561]]],"stroke":[[7,0],[2,0],[1,0],[5,0],[9,0],[4,0],[12,0],[10,0],[3,0],[8,0],[6,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6282972142629473139,{"inputs":[{"Node":{"node_id":15815816861435910950,"output_index":0}},{"Node":{"node_id":15578929303912288394,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3406722917122601552,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[1167210731467447244,{"inputs":[{"Node":{"node_id":16551385471328831128,"output_index":0}},{"Node":{"node_id":10432831427187785843,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16530658574540156160,{"inputs":[{"Node":{"node_id":11666664915283969027,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[23.70370370370381,12.641975308641918]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4248321400839848160,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":13231685386999438557,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[907841922684377912,{"inputs":[{"Node":{"node_id":17336535036064625290,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12219771677493189964,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":5140869461760168364,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9954843247420111867,{"inputs":[{"Node":{"node_id":6988349135757634271,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.14046639231827385,0.1473642955124319]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10619788176782820865,{"inputs":[{"Node":{"node_id":2397243911096708995,"output_index":0}},{"Node":{"node_id":1157261387411722141,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14285767317419627814,{"inputs":[{"Node":{"node_id":6749771744300551215,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12049041947382267086,{"inputs":[{"Node":{"node_id":2959546142916532439,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[25.77777777777777,508.44444444444446]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[8.0,8.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11573595155909211511,{"inputs":[{"Node":{"node_id":10127467043900015225,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17891208858820401648,{"inputs":[{"Node":{"node_id":1204243038352113866,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-7.407407407407391,4.740740740740762]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15949658764632267703,{"inputs":[{"Node":{"node_id":14012583111791538162,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13352561089252322209,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[612.0,1025.3333333333333]],[4,[615.5555555555555,1025.7777777777778]],[3,[752.4444444444443,739.1111111111111]],[2,[749.7777777777777,741.7777777777778]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[2,3],[1,2],[3,4],[4,1]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[-112.0,179.55555555555577]],[3,[28.000000000000114,-107.55555555555544]],[4,[-0.4444444444444571,0.0]]],"stroke":[[3,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10689298484366290551,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[151.22962962962964,252.1283950617284]],[3,[155.85185185185185,253.03703703703707]],[1,[156.93571992954355,246.07901729349]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[3,[1.0949818244169762,-0.3546380887060252]],[2,[-0.4744436253241133,1.2651830008642833]],[1,[-2.071522398679349,1.8617234472507391]]],"handle_end":[[3,[1.9215307714004553,1.0902372408288272]],[1,[0.9481481481481068,-2.5283950617284177]],[2,[-1.0949818244169762,0.3546380887060252]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1785173043494067496,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[712.0,519.1111111111111]],[1,[566.6666666666666,576.0]],[4,[770.2222222222222,459.1111111111111]],[2,[636.4444444444443,579.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[1,1],[3,3]],"end_point":[[3,4],[1,2],[2,3]],"handle_primary":[[3,[18.22222222222217,-21.777777777777715]],[2,[31.1111111111112,-17.33333333333337]],[1,[0.0,0.0]]],"handle_end":[[2,[-18.22222222222217,21.777777777777715]],[1,[-31.1111111111112,17.33333333333337]],[3,[0.0,0.0]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12554368619682347699,{"inputs":[{"Node":{"node_id":2594533001540454577,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[13261814586176172586,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"delta":[[6,[775.5061728395061,429.23456790123464]],[5,[829.8271604938273,345.08641975308643]],[7,[680.4331323644109,506.0568995183343]],[3,[851.1111111111111,237.7777777777778]],[11,[719.9999999999999,460.8395061728396]],[13,[736.8888888888889,432.2962962962963]],[2,[827.2592592592594,206.41975308641975]],[15,[817.4814814814815,272.2962962962963]],[4,[858.6666666666666,268.88888888888886]],[16,[809.1851851851852,207.1111111111111]],[9,[758.716049382716,441.8765432098765]],[10,[755.3580246913581,432.5925925925926]],[8,[686.5302034429451,490.6109861193811]],[12,[715.8518518518517,452.14814814814815]],[1,[799.1111111111112,188.14814814814815]],[14,[782.8148148148148,378.96296296296293]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"remove":[],"start_point":[[16,16],[7,7],[10,10],[14,14],[1,1],[9,9],[11,11],[8,8],[15,15],[4,4],[5,5],[2,2],[3,3],[13,13],[6,6],[12,12]],"end_point":[[4,5],[9,10],[8,9],[2,3],[14,15],[15,16],[7,8],[13,14],[16,1],[10,11],[1,2],[12,13],[3,4],[11,12],[6,7],[5,6]],"handle_primary":[[9,[0.0,0.0]],[5,[-31.06481223802939,48.93526760703577]],[6,[-36.541158121167314,42.67873357730855]],[11,[0.0,0.0]],[15,[5.925925925925867,-34.96296296296299]],[14,[20.148148148148152,-33.481481481481524]],[16,[0.0,0.0]],[13,[0.0,0.0]],[1,[0.0,0.0]],[3,[9.086419753086489,9.086419753086432]],[12,[0.0,0.0]],[7,null],[8,[37.39536928167615,-11.787670751832536]],[2,[0.0,0.0]],[10,[0.0,0.0]],[4,[-2.5679012345678984,17.77777777777777]]],"handle_end":[[15,[6.51851851851859,11.851851851851848]],[9,[0.0,0.0]],[13,[-20.148148148148152,33.481481481481524]],[6,[22.320987654321016,-14.222222222222342]],[16,[0.0,0.0]],[2,[-9.086419753086489,-9.086419753086432]],[1,[0.0,0.0]],[8,[-11.555555555555657,17.18518518518522]],[14,[-5.925925925925867,34.96296296296299]],[5,[18.3855550289378,-21.473654506216747]],[4,[31.06481223802939,-48.93526760703571]],[11,[0.0,0.0]],[10,[0.0,0.0]],[12,[0.0,0.0]],[7,null],[3,[2.5679012345678984,-17.77777777777777]]],"stroke":[[6,0],[13,0],[4,0],[12,0],[11,0],[8,0],[14,0],[2,0],[9,0],[1,0],[5,0],[15,0],[7,0],[16,0],[3,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":16}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11616089678400336955,{"inputs":[{"Node":{"node_id":2660652185019504730,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.8},"exposed":false}},{"Value":{"tagged_value":{"F64":3.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17336535036064625290,{"inputs":[{"Node":{"node_id":10421722418968896452,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[49.47996245659249,5.913900401382151]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9277405532359332,0.9277405532359332]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1621196991038859321,{"inputs":[{"Node":{"node_id":15857077552290328068,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3150436463719911922,{"inputs":[{"Node":{"node_id":18214377096178867498,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5455777299776842371,{"inputs":[{"Node":{"node_id":9470742171134780193,"output_index":0}},{"Node":{"node_id":7385465194555106679,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13045580349734858212,{"inputs":[{"Node":{"node_id":10795820039540504703,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10432831427187785843,{"inputs":[{"Node":{"node_id":2087303479944421366,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14209241002058525241,{"inputs":[{"Node":{"node_id":16290933138334939444,"output_index":0}},{"Node":{"node_id":10918055532782314571,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9374264173303233490,{"inputs":[{"Node":{"node_id":1713644030979611623,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8934999452649011837,{"inputs":[{"Node":{"node_id":16796171662855500935,"output_index":0}},{"Node":{"node_id":16756940771483104467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4787732047489141819,{"inputs":[{"Node":{"node_id":12062649793560663566,"output_index":0}},{"Node":{"node_id":4248321400839848160,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16614450796751955858,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[902.6666666666666,446.6666666666667]],[2,[757.1358024691358,661.5308641975308]],[6,[845.3333333333333,842.0000000000001]],[3,[481.33333333333337,826.6666666666666]],[5,[807.3333333333334,1026.0]],[4,[327.3333333333333,1024.6666666666663]],[7,[918.6666666666664,604.6666666666666]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[7,7],[3,3],[5,5],[4,4],[1,1],[2,2]],"end_point":[[4,5],[5,6],[2,3],[1,2],[3,4],[7,1],[6,7]],"handle_primary":[[1,[0.0,0.0]],[3,[-131.33333333333337,78.66666666666652]],[2,[-138.41983388553547,108.26897897977506]],[6,[49.4943341398548,-116.98660796692934]],[5,[0.0,0.0]],[4,[0.0,0.0]],[7,[16.000000000000227,-89.99999999999989]]],"handle_end":[[4,[0.0,0.0]],[7,[3.3333333333333712,32.00000000000006]],[6,[-16.71260304301461,94.00839211695676]],[2,[143.2366194125077,-85.79655375977609]],[5,[-36.66666666666663,86.66666666666652]],[1,[134.66666666666686,-105.33333333333326]],[3,[0.0,0.0]]],"stroke":[[4,0],[6,0],[7,0],[2,0],[1,0],[5,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6666260895482068061,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[646.4033730994855,154.80329633678198]],[2,[645.6821893629258,155.3850506865855]],[1,[643.0921942512911,135.30336230847865]],[4,[645.3845450388659,135.9012345679012]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[1,1],[2,2]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[2,[0.0,0.0]],[3,[-0.2558402858584259,-10.083527774255913]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[-0.3446760851414865,0.611494768909921]],[1,[-0.05703059647760256,-13.444628325495556]],[3,[0.0,0.0]],[4,[1.68322954928135,-0.022087435068414152]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7893851488963635918,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[24.0,486.0]],[1,[125.0,420.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[23.0,-70.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3802858053991775169,{"inputs":[{"Node":{"node_id":11058365317860779469,"output_index":0}},{"Value":{"tagged_value":{"F64":25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11199691961479466803,{"inputs":[{"Node":{"node_id":7141088190930752823,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[7141088190930752823,{"inputs":[{"Node":{"node_id":541002100261582638,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18319784717194273926,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[1,[172.22222222222217,564.7777777777779]],[12,[437.99999999999994,690.0]],[3,[167.0,691.0]],[5,[418.2222222222222,754.6666666666666]],[2,[150.22222222222223,568.4444444444445]],[6,[443.1111111111111,783.1111111111111]],[10,[610.6666666666666,712.4444444444443]],[8,[706.6666666666666,687.5555555555554]],[7,[558.6666666666666,749.7777777777778]],[11,[595.0,690.0]],[4,[574.6666666666666,712.4444444444443]],[9,[828.0,570.2222222222221]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[7,7],[12,12],[9,9],[1,1],[6,6],[10,10],[3,3],[2,2],[5,5],[11,11],[8,8],[4,4]],"end_point":[[11,12],[7,8],[1,2],[12,1],[5,6],[9,10],[10,11],[8,9],[3,4],[2,3],[4,5],[6,7]],"handle_primary":[[9,[0.0,0.0]],[12,[-98.22222222222224,-28.0]],[4,[0.0,0.0]],[2,[18.111111111111057,85.22222222222229]],[6,[0.0,0.0]],[7,[32.888888888888914,-13.333333333333483]],[10,[0.0,0.0]],[8,[60.44444444444446,-39.55555555555566]],[1,[0.0,0.0]],[11,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[3,[-128.44444444444446,26.22222222222217]],[4,[54.22222222222223,-9.333333333333371]],[1,null],[12,[161.33333333333337,34.66666666666674]],[6,[-32.888888888888914,13.333333333333483]],[9,[145.77777777777771,-61.777777777777715]],[7,[-60.44444444444446,39.55555555555566]],[11,[98.22222222222224,28.0]],[10,[-1.3333333333333712,21.77777777777783]],[5,[-18.66666666666663,-4.888888888888914]],[2,null],[8,[0.0,0.0]]],"stroke":[[11,0],[3,0],[4,0],[2,0],[5,0],[1,0],[12,0],[7,0],[10,0],[9,0],[8,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4479074488343511985,{"inputs":[{"Node":{"node_id":11479098559726891734,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6156863,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6156863,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16137033772363318157,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[720.1360768175583,181.58792866941016]],[2,[720.417009602195,178.00603566529497]],[1,[688.566255144033,175.3371742112483]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[3,1],[1,2],[2,3]],"handle_primary":[[3,[-1.1237311385458495,-3.125377229080982]],[2,[1.8041152263373303,2.00164609053499]],[1,[29.423007364946784,-0.024697364703285984]]],"handle_end":[[3,[12.04499314128941,0.8076817558298615]],[1,null],[2,null]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3170924135668664007,{"inputs":[{"Node":{"node_id":4787732047489141819,"output_index":0}},{"Node":{"node_id":13444661581815146533,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16051539163551573193,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[3,[514.6666666666666,1025.7777777777778]],[5,[588.0,930.6666666666666]],[2,[609.7777777777777,896.0]],[4,[519.1111111111111,1026.2222222222222]],[1,[708.0000000000001,769.3333333333333]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1],[5,5]],"end_point":[[4,5],[1,2],[5,1],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[5,[24.0,-29.77777777777783]],[3,[0.0,0.0]],[2,[-54.66666666666663,69.33333333333314]]],"handle_end":[[1,[54.66666666666663,-69.33333333333326]],[4,[-24.0,29.777777777777715]],[5,[-28.44444444444457,47.111111111111086]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[5,0],[1,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6292009934909381201,{"inputs":[{"Node":{"node_id":10424806499648491677,"output_index":0}},{"Node":{"node_id":9778375740427894463,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1204243038352113866,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[837.3333333333334,653.6296296296296]],[1,[808.8888888888889,832.2962962962965]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[2,[-26.22222222222217,80.29629629629608]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,-0.4444444444443434]],[1,[-22.22222222222217,79.40740740740739]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12062649793560663566,{"inputs":[{"Node":{"node_id":5455777299776842371,"output_index":0}},{"Node":{"node_id":8934999452649011837,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4572557574846980832,{"inputs":[{"Node":{"node_id":13014916927589286309,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-60.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[3992858139802231032,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[634.615454961134,135.08184727937814]],[4,[645.384545038866,135.90123456790124]],[3,[648.9547325102881,151.8792866941015]],[2,[635.8445358939186,153.225422953818]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[1,1],[4,4],[3,3]],"end_point":[[2,3],[1,2],[4,1],[3,4]],"handle_primary":[[3,[1.8143575674440624,-2.575217192501128]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[6.203932327389111,7.491540923639718]]],"handle_end":[[1,[-6.203932327389111,-7.491540923639718]],[3,[6.730681298582454,7.257430269775966]],[4,[9.247370827617717,-0.3511659807956278]],[2,[-1.8143575674440624,2.575217192501128]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17494926338451345058,{"inputs":[{"Node":{"node_id":1167210731467447244,"output_index":0}},{"Node":{"node_id":9529195152569434392,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14098374807212007572,{"inputs":[{"Node":{"node_id":17494926338451345058,"output_index":0}},{"Node":{"node_id":10336592647221792772,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8091904580702893317,{"inputs":[{"Node":{"node_id":15446793500614592278,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15492651270767932214,{"inputs":[{"Node":{"node_id":6580280438672662494,"output_index":0}},{"Node":{"node_id":2698266912167150713,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10918055532782314571,{"inputs":[{"Node":{"node_id":7447657690776686262,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[18067513817508158001,{"inputs":[{"Node":{"node_id":16649851742084147477,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1661691009086487874,{"inputs":[{"Node":{"node_id":14797986717815207528,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14029368390543839187,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[668.4444444444445,516.4444444444443]],[3,[808.0,413.33333333333337]],[1,[604.8888888888889,523.5555555555557]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[23.1111111111112,-9.7777777777776]]],"handle_end":[[2,[-59.111111111111086,58.22222222222223]],[1,[-23.1111111111112,9.7777777777776]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15896921950407486754,{"inputs":[{"Node":{"node_id":13163272246010991228,"output_index":0}},{"Node":{"node_id":11199691961479466803,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15466714490303763249,{"inputs":[{"Node":{"node_id":10514847656270897393,"output_index":0}},{"Node":{"node_id":11659756061767599421,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2659768650911099730,{"inputs":[{"Node":{"node_id":13045087323693407920,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12224498203743157414,{"inputs":[{"Node":{"node_id":2878992817082507910,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13045087323693407920,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[227.0,496.0]],[1,[19.0,494.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-98.0,-55.0]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8240895922641772563,{"inputs":[{"Node":{"node_id":16530658574540156160,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13644138583806412631,{"inputs":[{"Node":{"node_id":2641530639940889619,"output_index":0}},{"Node":{"node_id":12473080738469616517,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11021243031011826737,{"inputs":[{"Node":{"node_id":16446146761452576438,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17064046832210629373,{"inputs":[{"Node":{"node_id":12219771677493189964,"output_index":0}},{"Node":{"node_id":11677503666435782605,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10420981328998103391,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[694.2222222222222,623.5555555555554]],[1,[859.5555555555554,375.1111111111111]],[2,[844.4444444444443,460.44444444444434]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[2,[-11.999999999999886,30.6666666666668]],[1,[0.0,0.0]]],"handle_end":[[1,[11.055745483535702,-28.253571791258253]],[2,[76.88888888888891,-30.666666666666742]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15460109068588328521,{"inputs":[{"Node":{"node_id":5185036609290210853,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9019608,"green":0.8,"blue":0.6,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9019608,"green":0.8,"blue":0.6,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17815494794630739611,{"inputs":[{"Node":{"node_id":14079496619264986678,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4131094614457622424,{"inputs":[{"Node":{"node_id":11356586238302409958,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10860592954464951000,{"inputs":[{"Node":{"node_id":4236845268521674740,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12387541320114693418,{"inputs":[{"Node":{"node_id":5471152581000334146,"output_index":0}},{"Node":{"node_id":15460109068588328521,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9182448229950585507,{"inputs":[{"Node":{"node_id":12496143061817048445,"output_index":0}},{"Node":{"node_id":7320676248579211727,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[431994205232245356,{"inputs":[{"Node":{"node_id":12387541320114693418,"output_index":0}},{"Node":{"node_id":14894569344576297448,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12594527670567285670,{"inputs":[{"Node":{"node_id":4663768795652429571,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14345191642063772510,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[838.2222222222222,766.6666666666669]],[1,[880.8888888888888,556.4444444444443]],[3,[813.3557395833334,961.1454375]],[2,[833.7777777777777,780.4444444444443]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[3,4],[1,2],[2,3],[4,1]],"handle_primary":[[1,[0.0,0.0]],[4,[10.643023589139377,-58.51588472312813]],[2,[-9.333333333333371,54.66666666666674]],[3,[0.0,0.0]]],"handle_end":[[3,[-10.643023589139377,58.51588472312813]],[2,[0.0,0.0]],[4,[-0.4444444444444571,-0.8888888888888005]],[1,[9.333333333333371,-54.66666666666674]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12531351117929704587,{"inputs":[{"Node":{"node_id":11194653561109699287,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12801133692316734622,{"inputs":[{"Node":{"node_id":17699121037850769131,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12385950900718181935,{"inputs":[{"Node":{"node_id":4372998635946271235,"output_index":0}},{"Node":{"node_id":615144098061106242,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1713644030979611623,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[404.0,882.6666666666666]],[2,[321.33333333333326,1022.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[30.96296296296316,-100.2222222222224]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3649809135741361946,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[787.1111111111111,414.66666666666663]],[2,[841.3333333333333,336.8888888888889]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-21.333333333333258,48.888888888888914]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5213978458941436169,{"inputs":[{"Node":{"node_id":13261814586176172586,"output_index":0}},{"Value":{"tagged_value":{"F64":7.0},"exposed":false}},{"Value":{"tagged_value":{"U32":10},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4663768795652429571,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[691.7530864197531,86.91358024691357]],[6,[706.633744855967,98.10699588477364]],[3,[708.8285322359397,101.48696844993144]],[2,[696.6255144032922,96.92181069958846]],[5,[710.8379820149368,102.96966925773508]],[4,[713.0620332266423,107.3007163542143]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[6,6],[2,2],[5,5],[1,1],[3,3]],"end_point":[[4,5],[3,4],[6,1],[5,6],[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[6,[-6.847736625514244,-2.3703703703703525]],[5,[-0.8974241731443726,-2.770309404054231]],[3,[1.7753391251332005,4.7992684042066]],[2,[6.057613168724288,1.9753086419753032]],[4,[0.0,0.0]]],"handle_end":[[5,[2.9051419934493197,1.005626074655538]],[1,[-6.057613168724288,-1.9753086419753032]],[4,[0.786301337230384,2.4272780410153985]],[3,[-0.9218106995884908,-0.3950617283950635]],[2,[-0.7886938944185431,-2.1320736046921525]],[6,[1.1851851851849915,8.823045267489718]]],"stroke":[[6,0],[3,0],[5,0],[2,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10599660455959346550,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[745.3333333333333,471.55555555555554]],[2,[572.0,570.2222222222222]],[1,[478.2222222222222,515.1111111111111]],[3,[654.6666666666666,546.6666666666666]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[2,3],[3,4],[1,2]],"handle_primary":[[2,[31.555555555555543,7.555555555555543]],[1,[0.0,0.0]],[3,[26.222222222222285,-16.0]]],"handle_end":[[1,[-31.555555555555543,-7.555555555555543]],[3,[0.0,0.0]],[2,[-26.222222222222285,16.0]]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16756940771483104467,{"inputs":[{"Node":{"node_id":13975451746581400000,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17207895962122263432,{"inputs":[{"Node":{"node_id":11573595155909211511,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2175432926627256613,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14982414026754548178,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17945736750161448391,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[687.6968543916372,70.6398816184091]],[1,[689.4327280262556,73.68042956754955]],[2,[688.3433248095167,92.67923984990472]],[3,[687.4660700953133,94.52064202140812]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[4,[0.0,0.0]],[1,[-1.460603632035259,12.298077567102167]],[3,[-0.975596082205584,-10.16276974584038]],[2,[0.0,0.0]]],"handle_end":[[4,[-0.3670368206467174,-1.6914035044494111]],[1,null],[2,[0.6631784948407358,-0.4471776104951459]],[3,[0.0,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16324258033206362312,{"inputs":[{"Node":{"node_id":16732130236852371275,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[14079496619264986678,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[609.2839506172841,76.74074074074073]],[2,[608.9876543209878,75.25925925925925]],[1,[597.2345679012346,77.92592592592592]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[8.09876543209873,0.2962962962962763]],[1,[-6.222222222222172,-0.9876543209876588]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10253927692147706615,{"inputs":[{"Node":{"node_id":7262199696924786895,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[9529195152569434392,{"inputs":[{"Node":{"node_id":3121275823460307102,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12876462860151722087,{"inputs":[{"Node":{"node_id":10619788176782820865,"output_index":0}},{"Node":{"node_id":10415872992231003638,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11268046366284173800,{"inputs":[{"Node":{"node_id":4453139144069993994,"output_index":0}},{"Node":{"node_id":11616089678400336955,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15303587427289959766,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[818.2222222222222,566.2222222222222]],[1,[610.6666666666666,706.6666666666666]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-82.66666666666674,97.77777777777771]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12761901161949743155,{"inputs":[{"Node":{"node_id":7659717355245331967,"output_index":0}},{"Node":{"node_id":8091904580702893317,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14887821801874852671,{"inputs":[{"Node":{"node_id":8230694129617719636,"output_index":0}},{"Node":{"node_id":18279507457571359732,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6416452251137958677,{"inputs":[{"Node":{"node_id":9374264173303233490,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[11194653561109699287,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[602.0316509633005,90.5516059992284]],[1,[604.3716161316235,95.4260819221956]],[2,[607.4000914494741,86.85505258344766]],[3,[623.4951989026065,81.23639689071788]],[4,[605.761316872428,82.28989483310471]],[6,[603.4567901234567,92.83950617283948]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[3,3],[5,5],[6,6],[4,4],[1,1]],"end_point":[[4,5],[3,4],[6,1],[1,2],[2,3],[5,6]],"handle_primary":[[3,[-0.7803688462123546,-2.7117817405883216]],[2,[3.687242798354191,-3.4531321444901835]],[6,[0.3965701826469967,0.8240731861035471]],[5,[0.0,0.0]],[4,[-3.2460274482192517,2.85650415443304]],[1,[0.0,0.0]]],"handle_end":[[1,[-3.3249738510837687,3.113864400221118]],[5,[-0.3896135191956773,-0.8096172333722365]],[3,[4.389574759945049,-3.862825788751721]],[6,[-2.273736754432321e-13,-4.263256414560601e-14]],[4,[-0.10095077423932251,-1.27829797882373]],[2,[-1.0144795000761633,1.6192653558908745]]],"stroke":[[3,0],[6,0],[5,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7747398671834040298,{"inputs":[{"Node":{"node_id":18319784717194273926,"output_index":0}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":47},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1869448627329502330,{"inputs":[{"Node":{"node_id":3827449344952693766,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[16796171662855500935,{"inputs":[{"Node":{"node_id":14993053984267866751,"output_index":0}},{"Node":{"node_id":9371909264427723282,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14012648643507848353,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[610.080658436214,28.760493827160495]],[3,[615.7168724279835,33.05349794238683]],[2,[613.7152263374486,29.076543209876547]],[4,[613.6098765432099,30.393415637860084]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[3,[0.0,0.0]],[2,[1.5990193552247547,1.4582133097558128]],[1,[0.0,0.0]],[4,[-1.3168724279836397,-1.343209876543213]]],"handle_end":[[3,[0.7962610294339356,0.812186250022549]],[4,[0.05267489711934559,0.02633744855966924]],[1,[-1.447323438899616,-1.3198753943965968]],[2,[-0.05267489711934559,-0.9218106995884768]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7525593029671097583,{"inputs":[{"Node":{"node_id":16175421708184657649,"output_index":0}},{"Node":{"node_id":15735375935164094402,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14894569344576297448,{"inputs":[{"Node":{"node_id":5555007473125503522,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15578929303912288394,{"inputs":[{"Node":{"node_id":10770443343193024138,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10133176481349663495,{"inputs":[{"Node":{"node_id":12876462860151722087,"output_index":0}},{"Node":{"node_id":11021243031011826737,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4332145463108161926,{"inputs":[{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9740500978584792725,{"inputs":[{"Node":{"node_id":14946189826912398678,"output_index":0}},{"Node":{"node_id":10586744777717861556,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10421722418968896452,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[677.8673982624599,66.19478737997257]],[3,[691.7384545038866,78.07590306355738]],[2,[683.3689986282578,99.49702789208962]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[2,[0.34676700844204333,0.512429191350904]],[1,[-0.49434169374126213,0.7369041683249975]],[3,[0.12630166293718048,-1.7247569518707309]]],"handle_end":[[1,[-7.636184307015128,-11.284244620129414]],[2,[-1.4537474229852023,19.852161212683583]],[3,[5.6142033131263815,-8.368968014727507]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16551385471328831128,{"inputs":[{"Node":{"node_id":14991324592500870173,"output_index":0}},{"Node":{"node_id":17207349373429328029,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6532401937876437300,{"inputs":[{"Node":{"node_id":3992858139802231032,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3971837674569123876,{"inputs":[{"Node":{"node_id":4131094614457622424,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":3.3528},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[6988349135757634271,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[188.0493827160494,269.116049382716]],[1,[189.14614932392712,263.9984322947286]],[4,[184.5962505715592,263.55006858710567]],[3,[183.0891632373113,268.771154223006]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[1,[1.552958476004363,1.9059035841873424]],[4,[1.697261300324044,-1.9917992948792855]],[2,[-1.9972565157751203,0.9588085439937686]],[3,[-0.9800640224909783,-1.3570273385153655]]],"handle_end":[[3,[-1.5959762231368018,1.872937487752267]],[4,[-1.464617942413156,-1.7974856565980986]],[2,[1.0091841400482906,1.3973479652491392]],[1,[3.459421910557637,-1.6607397492127802]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1384427686127078856,{"inputs":[{"Node":{"node_id":17064046832210629373,"output_index":0}},{"Node":{"node_id":17529660518597229229,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14057307926677215422,{"inputs":[{"Node":{"node_id":5861306074868809692,"output_index":0}},{"Node":{"node_id":7450965328305122110,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4832236468224231783,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[232.44444444444443,332.8888888888889]],[2,[369.77777777777777,381.7777777777778]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-73.77777777777777,-53.77777777777777]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14991324592500870173,{"inputs":[{"Node":{"node_id":542361600097372754,"output_index":0}},{"Node":{"node_id":10860592954464951000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11630078441485655672,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[751.4074074074075,685.0370370370371]],[1,[760.6913580246915,657.5802469135803]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[4.543209876543187,-10.271604938271594]]],"handle_end":[[2,null],[1,[7.111111111110972,-8.44444444444457]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3970516859959908758,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[78.22222222222219,579.2592592592591]],[3,[170.96296296296293,544.5925925925925]],[1,[49.77777777777773,636.148148148148]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,3]],"handle_primary":[[2,[27.259259259259252,-24.88888888888891]],[1,[0.0,0.0]]],"handle_end":[[2,[-21.62962962962962,-2.0740740740740193]],[1,[-27.259259259259267,24.88888888888891]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13302269488061286120,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[565.3333333333335,756.6666666666666]],[1,[262.66666666666674,903.3333333333331]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-200.66666666666652,64.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1889157037801767612,{"inputs":[{"Node":{"node_id":17324767436949538365,"output_index":0}},{"Value":{"tagged_value":{"F64":30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":18},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10270446074640675342,{"inputs":[{"Node":{"node_id":14883504161508594099,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4078100635676202528,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"delta":[[2,[603.4962962962964,36.977777777777774]],[15,[677.925925925926,46.222222222222214]],[4,[627.9111111111112,43.73333333333333]],[22,[607.6312757201646,47.64444444444445]],[11,[665.4814814814815,56.05925925925925]],[19,[613.4518518518519,26.429629629629623]],[1,[606.3407407407408,47.76296296296296]],[25,[604.6288065843622,39.321810699588475]],[9,[642.4888888888889,44.44444444444444]],[3,[613.4518518518519,35.43703703703703]],[23,[608.5794238683127,44.82633744855967]],[10,[653.1555555555556,49.89629629629629]],[24,[605.998353909465,33.79094650205761]],[17,[639.762962962963,37.45185185185185]],[14,[698.3111111111111,43.61481481481481]],[21,[605.3925925925926,49.42222222222222]],[12,[683.3777777777777,50.48888888888889]],[8,[667.2592592592594,52.029629629629625]],[20,[601.2444444444444,36.859259259259254]],[16,[661.0962962962963,35.792592592592584]],[26,[607.3152263374486,46.38024691358025]],[18,[621.2740740740741,37.21481481481481]],[13,[707.0814814814814,53.33333333333333]],[7,[684.4444444444445,46.1037037037037]],[5,[653.9851851851852,38.99259259259259]],[6,[676.2666666666667,48.47407407407407]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"remove":[],"start_point":[[14,14],[3,3],[20,20],[13,13],[26,26],[15,15],[23,23],[10,10],[19,19],[12,12],[18,18],[9,9],[2,2],[6,6],[1,1],[16,16],[17,17],[24,24],[7,7],[8,8],[25,25],[4,4],[22,22],[11,11],[5,5],[21,21]],"end_point":[[24,25],[19,20],[9,10],[18,19],[14,15],[21,22],[20,21],[1,2],[17,18],[3,4],[8,9],[25,26],[15,16],[6,7],[11,12],[26,1],[4,5],[13,14],[5,6],[23,24],[2,3],[10,11],[12,13],[22,23],[7,8],[16,17]],"handle_primary":[[19,[-3.3185185185185446,-1.1851851851851831]],[18,[-3.437037037037044,-4.148148148148145]],[2,[2.1333333333333258,-5.68888888888889]],[26,[0.0,0.0]],[10,[2.251851851851825,2.2518518518518533]],[16,[-5.214814814814758,-1.3037037037037038]],[9,[0.0,0.0]],[14,[-10.90370370370374,-2.6074074074074076]],[11,[3.318518518518431,-0.11851851851851336]],[12,[6.9925925925927,-4.740740740740748]],[22,[0.0,0.0]],[23,[-2.2123456790121736,-2.3967078189300537]],[24,[0.0,0.0]],[17,[-6.992592592592587,2.962962962962962]],[13,[0.0,0.0]],[21,[0.0,0.0]],[15,[-2.844444444444548,-0.829629629629629]],[20,[-1.5407407407407163,8.651851851851852]],[5,[10.311111111111131,0.5925925925925952]],[25,[0.18814026836287212,2.510418336797158]],[7,[0.0,0.0]],[3,[2.9629629629629335,4.385185185185186]],[6,[4.5037037037037635,1.1851851851851831]],[4,[6.992592592592587,-0.23703703703703383]],[1,[0.0,0.0]],[8,[-10.666666666666629,-0.7111111111111157]]],"handle_end":[[19,[1.5407407407407163,-8.651851851851855]],[26,[0.0,0.0]],[7,[10.666666666666629,0.7111111111111086]],[21,[0.0,0.0]],[25,[0.0,0.0]],[9,[-2.251851851851825,-2.2518518518518533]],[18,[3.3185185185185446,1.1851851851851831]],[2,[-2.9629629629629335,-4.385185185185186]],[12,[-3.0814814814815463,-9.48148148148148]],[22,null],[6,[0.0,0.0]],[14,[2.844444444444548,0.829629629629629]],[13,[10.90370370370374,2.6074074074074076]],[8,[9.36296296296291,-2.4888888888888943]],[20,[0.0,0.0]],[1,[-2.1333333333333258,5.68888888888889]],[4,[-10.311111111111131,-0.5925925925925952]],[24,[-0.13898543393838736,-1.8545289902200464]],[16,[6.992592592592587,-2.962962962962962]],[11,[-6.9925925925927,4.740740740740748]],[17,[3.437037037037044,4.148148148148145]],[23,[0.0,0.0]],[10,[-3.318518518518431,0.11851851851851336]],[3,[-6.992592592592587,0.23703703703703383]],[15,[5.214814814814758,1.3037037037037038]],[5,[-4.5037037037037635,-1.1851851851851904]]],"stroke":[[6,0],[21,0],[18,0],[17,0],[15,0],[3,0],[13,0],[5,0],[12,0],[11,0],[23,0],[1,0],[25,0],[24,0],[8,0],[14,0],[10,0],[20,0],[16,0],[19,0],[26,0],[2,0],[22,0],[7,0],[4,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":26}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2422139482859833437,{"inputs":[{"Node":{"node_id":14537754528543289381,"output_index":0}},{"Node":{"node_id":172538270105470471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4372998635946271235,{"inputs":[{"Node":{"node_id":13481022631108980683,"output_index":0}},{"Node":{"node_id":2126710823743005151,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[542361600097372754,{"inputs":[{"Node":{"node_id":17971411534648521628,"output_index":0}},{"Node":{"node_id":6867142265138950838,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14888395629683671889,{"inputs":[{"Node":{"node_id":4341772758799935306,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2698266912167150713,{"inputs":[{"Node":{"node_id":3165571685352930240,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17324767436949538365,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[158.66666666666669,419.55555555555554]],[2,[362.22222222222223,512.0]],[1,[503.11111111111114,614.6666666666666]],[6,[289.7777777777778,503.1111111111111]],[4,[150.22222222222223,429.3333333333333]],[5,[119.1111111111111,456.44444444444446]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[5,5],[1,1],[3,3],[2,2],[4,4],[6,6]],"end_point":[[1,2],[2,3],[6,1],[5,6],[4,5],[3,4]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[6,[89.85096850895411,61.20347364650138]],[5,[0.0,0.0]],[2,[-52.888888888888914,-48.44444444444446]],[1,[0.0,0.0]]],"handle_end":[[4,[7.1111111111111,-35.55555555555554]],[5,[-89.85096850895414,-61.20347364650138]],[6,[0.8888888888888005,-0.4444444444444571]],[3,[0.0,0.0]],[1,[52.888888888888914,48.44444444444446]],[2,[76.0,-1.7777777777777717]]],"stroke":[[5,0],[4,0],[3,0],[2,0],[1,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1659518581611333812,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[15,[872.9108367626887,333.08093278463645]],[9,[838.4526748971191,213.46502057613168]],[3,[917.991769547325,333.4320987654321]],[13,[872.1207133058986,331.2373113854595]],[11,[865.1851851851853,248.6255144032922]],[14,[885.9039780521264,331.0617283950617]],[2,[913.2510288065844,355.55555555555554]],[16,[854.5185185185187,346.46913580246917]],[12,[858.1618655692731,310.6063100137174]],[1,[889.8106995884773,368.4609053497942]],[6,[812.2469135802468,182.5185185185185]],[17,[866.172839506173,375.11111111111114]],[5,[838.3209876543208,205.6954732510288]],[4,[869.1358024691356,247.17695473251027]],[7,[773.7942386831274,177.119341563786]],[8,[809.349794238683,192.0]],[10,[856.2304526748969,234.40329218106996]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[13,13],[11,11],[6,6],[17,17],[8,8],[16,16],[5,5],[9,9],[12,12],[15,15],[1,1],[14,14],[10,10],[4,4],[3,3],[2,2],[7,7]],"end_point":[[16,17],[9,10],[2,3],[1,2],[8,9],[4,5],[5,6],[6,7],[17,1],[3,4],[13,14],[7,8],[10,11],[14,15],[11,12],[15,16],[12,13]],"handle_primary":[[1,[9.349794238683105,-4.213991769547306]],[12,[6.935528120713343,13.080932784636502]],[16,[0.0,0.0]],[9,[6.189300411522595,6.97942386831275]],[4,[-8.03292181069969,-10.008230452674894]],[15,[-5.267489711934104,1.4924554183813257]],[2,[7.637860082304428,-3.423868312757179]],[8,[14.748971193415628,7.242798353909478]],[5,[-6.320987654321016,-8.164609053497912]],[14,[-5.267489711934104,0.0]],[7,[6.584362139917744,1.0534979423868265]],[11,[1.9314128943758533,32.395061728395035]],[3,[-10.72985850116538,-29.20905925317203]],[10,[7.506172839506121,6.452674897119351]],[17,[4.279835390946232,0.32921810699582466]],[6,[-10.930041152263357,-4.213991769547334]],[13,[7.111111111111086,-2.72153635116598]]],"handle_end":[[8,[-6.189300411522595,-6.97942386831275]],[16,[-8.098765432098958,-2.1728395061728634]],[11,[0.0,0.0]],[5,[10.930041152263357,4.213991769547334]],[2,[7.1111111111111995,19.35802469135808]],[14,[5.267489711934104,-1.4924554183813257]],[9,[-7.506172839506121,-6.452674897119351]],[6,[0.0,0.0]],[13,[0.0,0.0]],[1,[-7.637860082304542,3.423868312757179]],[3,[8.03292181069969,10.008230452674894]],[7,[-14.748971193415628,-7.242798353909478]],[17,[-9.349794238683105,4.213991769547306]],[15,[0.0,0.0]],[12,[0.0,0.0]],[10,[0.0,0.0]],[4,[6.320987654321016,8.164609053497912]]],"stroke":[[12,0],[16,0],[17,0],[3,0],[4,0],[6,0],[8,0],[10,0],[13,0],[5,0],[1,0],[7,0],[11,0],[9,0],[14,0],[15,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3636653585682494814,{"inputs":[{"Node":{"node_id":11565160497886435388,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[10415872992231003638,{"inputs":[{"Node":{"node_id":8375495949882478840,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11481949351661484921,{"inputs":[{"Node":{"node_id":15303587427289959766,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[172538270105470471,{"inputs":[{"Node":{"node_id":9276497172451351253,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10587073897090054035,{"inputs":[{"Node":{"node_id":8814059393325469059,"output_index":0}},{"Node":{"node_id":907841922684377912,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8766106989344197438,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[153.58712172411558,204.8434307274338]],[1,[197.33333333333337,212.5432098765432]],[4,[146.5679012345679,204.44444444444449]],[6,[184.49382716049385,218.2716049382716]],[5,[155.85185185185185,211.55555555555557]],[2,[172.64197530864195,208.98765432098767]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[5,5],[4,4],[2,2],[1,1],[3,3]],"end_point":[[1,2],[6,1],[5,6],[2,3],[3,4],[4,5]],"handle_primary":[[5,[8.493827160493822,2.3703703703703525]],[3,[-5.834035304362487,0.7861989021958493]],[1,[0.0,0.0]],[4,[0.0,0.0]],[6,[3.160493827160479,-0.9876543209876444]],[2,[-7.703703703703667,-1.1851851851851904]]],"handle_end":[[1,[7.703703703703724,1.1851851851852189]],[6,[-3.160493827160479,1.9753086419753456]],[4,[-8.493827160493794,-2.370370370370381]],[3,[0.0,0.0]],[2,[5.834035304362487,-0.7861989021958493]],[5,[-3.1604938271605363,0.9876543209877012]]],"stroke":[[6,0],[3,0],[2,0],[5,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10928540355449103287,{"inputs":[{"Node":{"node_id":18190631752493248867,"output_index":0}},{"Node":{"node_id":12554368619682347699,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4105711298139980122,{"inputs":[{"Node":{"node_id":1162381870526064378,"output_index":0}},{"Node":{"node_id":1272070255512697108,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4422453582814483232,{"inputs":[{"Node":{"node_id":4577638792388493935,"output_index":0}},{"Node":{"node_id":431994205232245356,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7505360855062237520,{"inputs":[{"Node":{"node_id":17945736750161448391,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15498700602024283966,{"inputs":[{"Node":{"node_id":15466714490303763249,"output_index":0}},{"Node":{"node_id":9847383247226990698,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14831840560430171946,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[893.7613168724276,509.6296296296296]],[5,[833.4814814814815,746.3703703703703]],[3,[889.7777777777777,516.8888888888889]],[6,[793.7777777777777,1027.2592592592591]],[1,[791.5555555555555,1026.6666666666663]],[2,[831.5555555555555,737.3333333333334]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[1,1],[3,3],[4,4],[6,6],[5,5]],"end_point":[[3,4],[2,3],[6,1],[5,6],[4,5],[1,2]],"handle_primary":[[1,[0.0,0.0]],[5,[-24.0,92.44444444444446]],[6,[0.0,0.0]],[3,[0.0,0.0]],[2,[19.555555555555543,-74.66666666666674]],[4,[0.0,0.0]]],"handle_end":[[6,[-0.14814814814815236,0.29629629629675946]],[5,[0.0,0.0]],[1,[-26.4188207246807,100.8718609487812]],[4,[24.0,-92.44444444444446]],[3,[0.0,0.0]],[2,[-22.22222222222217,89.77777777777783]]],"stroke":[[3,0],[1,0],[6,0],[4,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9470742171134780193,{"inputs":[{"Node":{"node_id":15126865253122550765,"output_index":0}},{"Node":{"node_id":10270446074640675342,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10795820039540504703,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[3,[590.2222222222222,113.18518518518518]],[19,[540.4444444444445,70.22222222222221]],[8,[447.7037037037037,131.25925925925924]],[10,[396.14814814814815,88.29629629629629]],[1,[569.1851851851852,61.629629629629605]],[14,[418.0913936876638,12.121582398270874]],[6,[518.2222222222222,175.7037037037037]],[11,[350.8679463145693,59.25925925925925]],[17,[478.3481748953775,55.407407407407405]],[7,[485.6296296296296,153.48148148148147]],[12,[332.131357712622,16.970215357579164]],[9,[418.074074074074,116.14814814814814]],[5,[574.5185185185185,169.18518518518516]],[15,[432.1308820290171,20.740740740740748]],[13,[376.7623479921926,0.4130988647245317]],[4,[604.4444444444445,138.96296296296293]],[18,[498.66666666666663,63.70370370370368]],[2,[591.1111111111111,92.44444444444444]],[16,[451.9827338808689,43.25925925925927]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[4,4],[9,9],[5,5],[10,10],[19,19],[14,14],[16,16],[1,1],[11,11],[13,13],[7,7],[17,17],[2,2],[8,8],[15,15],[3,3],[6,6],[12,12],[18,18]],"end_point":[[14,15],[19,1],[12,13],[11,12],[8,9],[15,16],[9,10],[17,18],[7,8],[6,7],[1,2],[13,14],[10,11],[5,6],[18,19],[4,5],[2,3],[16,17],[3,4]],"handle_primary":[[6,[-14.222222222222172,-11.851851851851848]],[11,[-11.259259259259125,-10.962962962962962]],[13,[41.32904569547122,11.708483533546342]],[18,[13.333333333333371,4.148148148148152]],[7,[-15.407407407407447,4.444444444444457]],[5,[-13.629629629629562,5.925925925925924]],[8,[-9.481481481481524,-12.740740740740762]],[17,[10.962962962963047,12.148148148148124]],[15,[20.148148148148152,6.8148148148148096]],[12,[4.019883543587866,-14.744727738229416]],[16,[7.703703703703695,6.814814814814817]],[19,[11.555555555555545,-3.851851851851848]],[14,[0.0,0.0]],[10,[-13.333333333333371,-8.59259259259261]],[1,[12.848891737595522,5.11227609582204]],[3,[-6.518518518518476,13.3333333333333]],[4,[18.370370370370324,0.2962962962963047]],[2,[0.0,0.0]],[9,[-13.629629629629562,-7.407407407407419]]],"handle_end":[[12,null],[8,[13.629629629629562,7.407407407407419]],[1,[-24.88888888888891,-10.666666666666655]],[19,[-12.030418259761518,-4.786624476892754]],[7,[9.481481481481524,12.740740740740762]],[17,[-13.333333333333371,-4.148148148148152]],[3,[-18.370370370370324,-0.2962962962963047]],[11,[-2.7704748413796665,10.16196036497552]],[14,[-20.14814814814821,-6.814814814814827]],[10,[11.259259259259238,10.962962962963076]],[6,[15.407407407407334,-4.444444444444457]],[15,[-7.703703703703695,-6.8148148148148096]],[18,[-11.555555555555545,3.851851851851848]],[5,[14.222222222222172,11.85185185185182]],[9,[13.333333333333371,8.59259259259261]],[4,[13.629629629629562,-5.925925925925924]],[2,[6.518518518518476,-13.333333333333314]],[16,[-10.96296296296299,-12.148148148148188]],[13,null]],"stroke":[[8,0],[10,0],[2,0],[7,0],[16,0],[11,0],[13,0],[18,0],[6,0],[17,0],[3,0],[9,0],[12,0],[15,0],[5,0],[19,0],[4,0],[1,0],[14,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14817659161913199655,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[796.148148148148,723.8518518518517]],[2,[725.3333333333333,985.7777777777776]],[3,[726.8148148148148,1023.9999999999998]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[2,3],[1,2],[3,1]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[-75.55555555555566,240.59259259259304]],[1,[9.777777777777828,-73.18518518518522]]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12313564802550122052,{"inputs":[{"Node":{"node_id":13557369662261607646,"output_index":0}},{"Node":{"node_id":9684857454501250999,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8413863870096329943,{"inputs":[{"Node":{"node_id":16195626650123806176,"output_index":0}},{"Node":{"node_id":5302437193964714993,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9847383247226990698,{"inputs":[{"Node":{"node_id":3627710206997006419,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11632506522064533635,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[145.33333333333331,1022.6666666666666]],[5,[336.66666666666663,799.3333333333334]],[4,[397.3333333333333,770.6666666666666]],[3,[299.33333333333326,775.3333333333333]],[1,[40.66666666666663,1022.6666666666666]],[6,[208.0,903.0]],[2,[113.33333333333331,859.3333333333333]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[3,3],[4,4],[7,7],[2,2],[1,1],[5,5]],"end_point":[[7,1],[5,6],[4,5],[6,7],[2,3],[3,4],[1,2]],"handle_primary":[[5,[-40.66666666666663,12.0]],[1,[0.0,0.0]],[3,[65.33333333333337,-6.0]],[6,[0.0,0.0]],[2,[58.666666666666686,-57.33333333333326]],[4,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[2,[-65.33333333333337,6.0]],[7,[0.0,1.3333333333333712]],[5,[35.666666666666686,-46.66666666666674]],[3,[0.0,0.0]],[1,[-58.666666666666686,57.333333333333144]],[4,[40.66666666666663,-12.0]],[6,[18.00000000000003,-55.33333333333326]]],"stroke":[[3,0],[4,0],[1,0],[7,0],[2,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12473080738469616517,{"inputs":[{"Node":{"node_id":17891208858820401648,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17133591775058457007,{"inputs":[{"Node":{"node_id":18067513817508158001,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[13163272246010991228,{"inputs":[{"Node":{"node_id":9740500978584792725,"output_index":0}},{"Node":{"node_id":10253927692147706615,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15286091228862934481,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[637.0589849108368,29.980795610425247]],[3,[638.5953360768175,27.56652949245542]],[4,[665.7229080932784,23.79149519890261]],[5,[684.554183813443,27.654320987654327]],[1,[623.1001371742112,22.694101508916333]],[6,[661.2894375857338,26.381344307270236]],[2,[627.0946502057614,23.00137174211249]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[7,7],[1,1],[3,3],[4,4],[5,5],[2,2]],"end_point":[[2,3],[6,7],[1,2],[4,5],[3,4],[5,6],[7,1]],"handle_primary":[[2,[2.150891632373032,1.5802469135802468]],[4,[6.672153635116501,-0.35116598079560646]],[7,[-6.089851956901498,-0.48236451143773706]],[6,[-11.456790123456813,0.9657064471879302]],[3,[5.3991769547326385,0.13168724279836042]],[5,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[-2.150891632373032,-1.5802469135802468]],[5,[11.456790123456813,-0.9657064471879336]],[2,[-5.486565700800156,-0.13381867562927496]],[6,[4.433470507544598,0.35116598079561]],[4,[-0.9218106995884908,-1.0534979423868336]],[3,[-6.672153635116501,0.35116598079560646]],[7,[2.194787379972581,3.906721536351163]]],"stroke":[[1,0],[2,0],[5,0],[7,0],[3,0],[4,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3165571685352930240,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[642.0732703685807,156.78028060137643]],[4,[641.1783537148203,135.11412115589184]],[1,[639.0431812985823,135.02706332876082]],[2,[641.3926773385256,156.76403071818197]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[3,[-0.4020858660272779,-10.361367902183218]],[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[-0.08991158554488266,-10.211393405397416]],[3,null],[2,[-0.29793124344723765,0.12588207707705124]],[4,[1.0850699611588652,-0.2123114466060372]]],"stroke":[[2,0],[1,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7466034304713056391,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[636.4372010299622,153.9035515500083]],[1,[635.2478000597847,135.0597939750059]],[2,[635.5072483424783,152.80078149291265]],[4,[637.4252384335797,135.01742888696126]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[2,2],[1,1]],"end_point":[[1,2],[3,4],[4,1],[2,3]],"handle_primary":[[2,[0.0,0.0]],[3,[1.020097146128478,-12.422679731687992]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.4153244360613826,-11.397946559213551]],[3,null],[4,[1.1169817316086892,-0.21205734949143107]],[2,[-0.5579820762119425,-0.504231587867622]]],"stroke":[[4,0],[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13014916927589286309,{"inputs":[{"Node":{"node_id":2044103368441997753,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15815816861435910950,{"inputs":[{"Node":{"node_id":4105711298139980122,"output_index":0}},{"Node":{"node_id":17815494794630739611,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15798070933198867970,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[2,[642.2222222222222,536.8888888888889]],[10,[508.88888888888886,389.33333333333337]],[4,[536.0,522.2222222222221]],[3,[598.6666666666666,547.1111111111111]],[6,[438.18064449587104,508.2403828865154]],[7,[384.7140020398532,440.0243218219409]],[11,[588.6666666666665,453.3333333333333]],[1,[595.1111111111111,513.3333333333333]],[5,[449.99999999999994,445.3333333333333]],[9,[424.44444444444446,340.0]],[12,[660.0,500.66666666666663]],[8,[350.6666666666667,340.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[12,12],[6,6],[1,1],[11,11],[3,3],[7,7],[8,8],[4,4],[9,9],[10,10],[5,5],[2,2]],"end_point":[[10,11],[2,3],[8,9],[9,10],[1,2],[11,12],[3,4],[4,5],[7,8],[12,1],[6,7],[5,6]],"handle_primary":[[5,[0.0,0.0]],[7,[5.531031978208716,-44.24825582567013]],[6,[0.0,0.0]],[11,[22.666666666666856,18.0]],[9,[24.0,8.0]],[3,[-18.370370370370324,2.1728395061728634]],[4,[-25.28395061728401,-13.827160493827025]],[8,[-46.969945387028645,-26.215783471829923]],[1,[0.0,0.0]],[2,[0.0,0.0]],[10,[25.481481481481467,20.4444444444444]],[12,[-31.999999999999886,10.666666666666686]]],"handle_end":[[8,[-24.0,-8.0]],[5,[0.0,0.0]],[12,null],[3,[25.283950617284063,13.827160493827025]],[2,[18.370370370370324,-2.1728395061728634]],[6,[-4.764895727801786,38.11916582241446]],[11,[-17.185185185185105,5.925925925925867]],[4,[0.0,0.0]],[1,[-58.22222222222217,-1.3333333333332575]],[10,[-23.199803616588156,-18.42337346023163]],[7,[28.6666666666668,16.000000000000057]],[9,[-25.481481481481467,-20.4444444444444]]],"stroke":[[10,0],[4,0],[3,0],[8,0],[6,0],[9,0],[7,0],[2,0],[12,0],[1,0],[5,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6672826052605647592,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[11,[599.381801554641,127.00502972107913]],[4,[600.0548696844994,115.53360768175584]],[2,[614.2716726786227,123.52371759047573]],[12,[613.7991159884164,125.99055022100288]],[10,[599.4403292181071,108.68587105624144]],[9,[593.3827160493829,85.77229080932784]],[1,[617.5253772290811,122.03017832647464]],[3,[605.4979423868314,125.19067215363512]],[7,[591.0123456790125,60.40054869684499]],[6,[594.172839506173,82.87517146776406]],[8,[585.8326474622772,72.60356652949247]],[5,[603.127572016461,99.64334705075449]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[9,9],[6,6],[1,1],[5,5],[4,4],[2,2],[11,11],[8,8],[12,12],[7,7],[3,3],[10,10]],"end_point":[[4,5],[1,2],[12,1],[6,7],[10,11],[3,4],[5,6],[11,12],[8,9],[7,8],[9,10],[2,3]],"handle_primary":[[8,[0.6346981736430735,5.019885555177211]],[6,[-6.145404663923159,-8.076817558299041]],[12,[2.3801249809480396,-1.7168114616673904]],[2,[-1.2820759681926577,0.7008681959453185]],[5,[-0.8779149519890552,-4.477366255144048]],[11,[3.960543177125487,4.094798878044912]],[10,[-2.575217192501441,8.77914951989024]],[3,[-4.594421582076166,-1.1705532693187024]],[7,[0.0,0.0]],[4,[0.8779149519890552,-4.477366255144034]],[1,[0.0,0.0]],[9,[3.599451303154978,4.477366255144034]]],"handle_end":[[11,[-2.036412917146322,1.4688880058104417]],[4,[0.8779149519890552,4.47736625514402]],[9,[3.3684073442221916,-11.48320685530176]],[3,[-0.8779149519890552,4.477366255144034]],[2,[3.396564570446685,0.8653667695405147]],[5,[6.145404663923159,8.076817558299041]],[7,[-0.9657064471879266,-7.637860082304528]],[6,[-6.057613168724288,9.305898491083669]],[10,[-4.118548609866821,-4.258160427150372]],[1,[1.3006147436874471,-0.7110027265491681]],[12,[0.0,0.0]],[8,[-3.599451303154978,-4.477366255144034]]],"stroke":[[5,0],[7,0],[11,0],[1,0],[4,0],[6,0],[2,0],[8,0],[10,0],[3,0],[9,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7385465194555106679,{"inputs":[{"Node":{"node_id":5009664118231399060,"output_index":0}},{"Node":{"node_id":6416452251137958677,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9425359632144678256,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[610.2608816540582,107.73159867034722]],[2,[615.0086877000457,93.76131687242795]],[3,[622.6042778031804,84.90413046791649]],[4,[612.3749428440786,88.61088248742568]],[5,[606.9918024691358,101.68414814814815]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[4,4],[3,3],[2,2],[1,1]],"end_point":[[5,1],[1,2],[3,4],[2,3],[4,5]],"handle_primary":[[5,[0.0,0.0]],[4,[-3.0889600162577153,2.952395468170536]],[2,[3.21902149062646,-3.511659807956093]],[1,[0.0,0.0]],[3,[-0.6242950769699291,-0.9364426154549648]]],"handle_end":[[2,[0.15607376924265282,0.7543565513387165]],[3,[2.992367941940074,-2.86007378029646]],[4,[-0.5623782142248501,-6.258066225952547]],[5,[-2.1454520955559246,-3.1101486881290583]],[1,[-3.21902149062646,3.5116598079561214]]],"stroke":[[5,0],[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15177845878727456758,{"inputs":[{"Node":{"node_id":14225285635863713990,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5555007473125503522,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[5,[726.0551745160798,67.30681298582532]],[3,[723.7140679774425,72.106081390032]],[4,[725.0797134583142,72.96448712086573]],[7,[722.6215515927449,59.58116140832189]],[6,[724.0262155159273,62.468526139308025]],[2,[724.7285474775185,66.64349946654472]],[1,[721.7241274196006,63.248894985520494]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[2,2],[3,3],[5,5],[7,7],[6,6],[1,1],[4,4]],"end_point":[[4,5],[1,2],[6,7],[7,1],[2,3],[5,6],[3,4]],"handle_primary":[[1,[0.0,0.0]],[4,[0.6633135192806776,-0.8584057308337094]],[6,[-0.03901844231063478,-1.2485901539399509]],[7,[-1.014479500076277,0.3901844231062413]],[3,[-1.287608596250493,1.7558299039780536]],[2,[0.546258192348887,2.106995884773667]],[5,[-0.585276634659408,-3.8628257887517066]]],"handle_end":[[1,[-0.501794076076294,-1.9354914362939013]],[7,[0.07803688462126956,-0.03901844231062768]],[5,[0.03901844231063478,1.2485901539399509]],[3,[-0.6633135192806776,0.8584057308337094]],[2,[1.852405339488314,-2.526007281120613]],[6,[1.014479500076277,-0.39018442310623414]],[4,[0.585276634659408,3.8628257887517066]]],"stroke":[[6,0],[4,0],[5,0],[3,0],[2,0],[7,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17529660518597229229,{"inputs":[{"Node":{"node_id":3802858053991775169,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"F64":40.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-30.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[16446146761452576438,{"inputs":[{"Node":{"node_id":12131058586835568367,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[619.1444612416404,54.266956717585614]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.6118784},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.617278800347149,2.5068847538738956]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.1858656806102035e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[454416440369338250,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[733.7777777777778,518.6666666666666]],[1,[696.0,593.3333333333333]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[0.0,0.0]]],"handle_end":[[1,[-18.666666666666515,26.66666666666663]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15038739378867834454,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[662.3868312757203,59.61042524005489]],[2,[667.4787379972565,58.20576131687244]],[5,[704.6145404663924,55.39643347050756]],[6,[687.4951989026064,54.518518518518526]],[1,[654.3978052126201,51.621399176954746]],[4,[704.965706447188,54.25514403292181]],[3,[691.5336076817558,52.14814814814816]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[1,1],[5,5],[4,4],[2,2],[3,3],[7,7]],"end_point":[[5,6],[3,4],[7,1],[6,7],[1,2],[4,5],[2,3]],"handle_primary":[[2,[6.145404663923159,-1.0534979423868336]],[4,[0.0,0.0]],[3,[7.723134415788309,-0.2640387834457485]],[7,[-4.546573253919632,-2.2347563451469625]],[6,[-10.156808190486911,1.6663513437517778]],[5,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[6,[5.179698216735233,2.5459533607681664]],[3,null],[7,[0.0,0.08779149519890694]],[4,[0.0,0.0]],[2,[-10.271604938271594,0.35116598079560646]],[5,[11.237311385459408,-1.8436213991769537]],[1,[-5.875074923313605,1.0071557011394745]]],"stroke":[[7,0],[2,0],[4,0],[3,0],[5,0],[6,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14982414026754548178,{"inputs":[{"Node":{"node_id":13045580349734858212,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-25.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[4493274523708782092,{"inputs":[{"Node":{"node_id":15239301303367148581,"output_index":0}},{"Node":{"node_id":12880230498984021417,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6973438081601736688,{"inputs":[{"Node":{"node_id":11630078441485655672,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4577638792388493935,{"inputs":[{"Node":{"node_id":3170924135668664007,"output_index":0}},{"Node":{"node_id":6292009934909381201,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12131058586835568367,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.022131022857413415,0.4190687668825941]],[2,[1.0389965338526328,0.5311836299154763]],[3,[0.443655685420585,0.8388279058567918]],[1,[0.6081211287919952,-0.2081641356766983]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[4,[0.021131345375600137,-0.27179882337964756]],[1,[0.297407817404018,0.05174926937677715]],[2,[-0.06483434986356718,0.26682960488486684]],[3,[-0.29501938196342326,-0.04735956037402645]]],"handle_end":[[3,[-0.02113134537560013,0.27179882337964756]],[2,[0.2950193819634199,0.04735956037402589]],[1,[0.07365905854782184,-0.30314821587423946]],[4,[-0.38805268271111915,-0.0675215701634326]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1157261387411722141,{"inputs":[{"Node":{"node_id":4577174813962563383,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11659756061767599421,{"inputs":[{"Node":{"node_id":8766106989344197438,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5140869461760168364,{"inputs":[{"Node":{"node_id":17118107476414252025,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8543051864256131356,{"inputs":[{"Node":{"node_id":5002654561220917457,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[16732130236852371275,{"inputs":[{"Node":{"node_id":4832236468224231783,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5185036609290210853,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[14,[711.9695168419447,48.57796067672611]],[4,[704.9657064471878,54.25514403292179]],[24,[719.0123456790122,66.6337448559671]],[28,[702.2539247065995,73.00350556317633]],[11,[697.7283950617284,31.30864197530864]],[6,[695.152568206066,67.34583142813594]],[13,[706.9556470050298,39.272062185642426]],[16,[713.7448559670781,60.37860082304528]],[15,[703.604938271605,68.21399176954733]],[1,[687.846364883402,65.58024691358025]],[22,[719.6171315348269,59.659198292943145]],[9,[702.2222222222223,38.38683127572017]],[19,[705.9094650205762,70.25514403292182]],[8,[709.8600823045268,50.83127572016461]],[18,[716.7736625514402,54.9135802469136]],[25,[719.8512421886905,54.19661636945587]],[12,[698.2935528120714,34.35573845450388]],[29,[694.0600518213687,74.40816948635879]],[21,[716.1444901691814,49.82655083066605]],[7,[701.785703398872,67.26779454351473]],[10,[696.5925925925927,33.728395061728385]],[27,[718.680688919372,68.71147690900777]],[17,[713.3351623228167,47.46593507087334]],[23,[711.5061728395062,69.99176954732509]],[5,[705.102270995275,59.269013869836904]],[2,[697.9423868312758,64.79012345679013]],[26,[722.5825331504344,57.31809175430575]],[3,[703.7366255144034,54.694101508916326]],[20,[716.6907483615302,62.66361835086114]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[25,25],[9,9],[17,17],[18,18],[24,24],[3,3],[11,11],[15,15],[7,7],[5,5],[29,29],[13,13],[10,10],[12,12],[22,22],[28,28],[14,14],[21,21],[4,4],[2,2],[6,6],[26,26],[1,1],[20,20],[27,27],[23,23],[16,16],[19,19],[8,8]],"end_point":[[29,1],[23,24],[14,15],[4,5],[26,27],[16,17],[25,26],[9,10],[13,14],[17,18],[8,9],[5,6],[11,12],[24,25],[1,2],[6,7],[28,29],[7,8],[20,21],[27,28],[18,19],[19,20],[12,13],[3,4],[21,22],[22,23],[15,16],[10,11],[2,3]],"handle_primary":[[13,[2.1939750755697105,1.3128956217623369]],[7,[3.3946044810244302,-1.8728852309099435]],[15,[0.0,0.0]],[18,[-0.7242798353908029,5.860082304526735]],[4,[0.0,0.0]],[19,[0.0,0.0]],[3,[0.0,0.0]],[20,[2.536198750190465,-6.516079865874104]],[11,[0.0,0.0]],[27,[-4.128769232802142,3.294230770852593]],[1,[0.0,0.0]],[25,[0.0,0.0]],[22,[-1.7948483462886315,6.047858558146615]],[5,[-1.1705532693187024,3.0044200579180043]],[23,[0.0,0.0]],[10,[-0.04481007342064913,-1.8372595419893116]],[21,[0.0,0.0]],[14,[0.9193720469440904,5.347965249199831]],[2,[1.5646505637769224,-1.2302214356413188]],[29,[0.0,0.0]],[6,[0.0,0.0]],[24,[2.106995884773596,-3.0044200579180256]],[16,[2.9207548934437,-5.774876595401999]],[8,[1.1368683772161605e-13,-7.4135040390184415]],[9,[-3.823807346440958,-1.6387745770461848]],[17,[0.0,0.0]],[26,[0.8664211612748431,3.3573819999397045]],[12,[1.5089163237310004,2.3850022862368547]],[28,[-7.920532726374063,-0.13055823175342596]]],"handle_end":[[14,[7.30864197530866,-5.333333333333336]],[9,[0.04481007342064913,1.837259541989333]],[11,[-0.8654907204776237,-1.3679998781853442]],[5,[6.516079865874076,-2.4581618655692807]],[16,[1.1705532693187024,1.8728852309099224]],[1,[-2.555707971345896,2.0094497789970944]],[28,[0.0,0.0]],[10,[0.0,0.0]],[25,[-0.6242950769700428,-2.419143423258646]],[4,[1.1705532693187024,-3.0044200579180043]],[8,[5.150019007352512,2.2071510031511608]],[2,[0.5267489711934559,6.320987654320987]],[15,[-3.84819387288519,7.608596250571544]],[24,[2.980033531474078,4.338363054412447]],[13,[-0.7923207898123792,-4.608911119518574]],[6,[-3.208476806721251,1.7701941002599142]],[21,[1.7948483462886315,-6.047858558146615]],[12,[-3.679926840420876,-2.202103337905797]],[23,[-2.1028230213785264,2.9984698638176326]],[20,[1.638774577046206,1.5607376924249363]],[29,[0.009754610577488164,0.048773052888265056]],[19,[-2.536198750190465,6.516079865874104]],[7,[-1.1368683772161605e-13,8.389895136005812]],[17,[0.667740598959881,-5.402628482494777]],[27,[7.101356500533598,0.11705532693187592]],[3,[0.0,0.0]],[18,[9.169333942996444,-4.409083981100437]],[26,[3.66773357719876,-2.926383173296756]],[22,[2.731290961743639,-1.326627038561199]]],"stroke":[[20,0],[23,0],[5,0],[18,0],[24,0],[15,0],[11,0],[27,0],[7,0],[3,0],[21,0],[9,0],[6,0],[26,0],[28,0],[25,0],[1,0],[14,0],[19,0],[12,0],[10,0],[22,0],[4,0],[17,0],[8,0],[2,0],[13,0],[29,0],[16,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18190631752493248867,{"inputs":[{"Node":{"node_id":12428327489525325219,"output_index":0}},{"Node":{"node_id":10375238420217738812,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8644924780109919177,{"inputs":[{"Node":{"node_id":10599660455959346550,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5020096817747898028,{"inputs":[{"Node":{"node_id":15286091228862934481,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2641530639940889619,{"inputs":[{"Node":{"node_id":5174744389209053970,"output_index":0}},{"Node":{"node_id":14539627480594383748,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5326536612985524219,{"inputs":[{"Node":{"node_id":15798070933198867970,"output_index":0}},{"Value":{"tagged_value":{"F64":27.0},"exposed":false}},{"Value":{"tagged_value":{"U32":9},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":2}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::PoissonDiskPointsNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11666664915283969027,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[751.4074074074075,685.0370370370371]],[1,[802.3703703703703,580.9382716049382]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[20.740740740740534,-42.469135802469054]]],"handle_end":[[1,[27.259259259259125,-48.79012345678995]],[2,null]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3414873131936208778,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[761.7777777777777,737.3333333333333]],[2,[697.7777777777777,954.2222222222222]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,1]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[-40.0,81.33333333333326]],[1,[26.22222222222217,-158.66666666666652]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3686761601672683183,{"inputs":[{"Node":{"node_id":4859656512650360562,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16805628435335819723,{"inputs":[{"Node":{"node_id":10689298484366290551,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13557369662261607646,{"inputs":[{"Node":{"node_id":3535178979443201645,"output_index":0}},{"Node":{"node_id":15177845878727456758,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16339345235172368839,{"inputs":[{"Node":{"node_id":14778750092903591172,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18214377096178867498,{"inputs":[{"Node":{"node_id":7747398671834040298,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":300.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[3955326429435439190,{"inputs":[{"Node":{"node_id":18207065424980079673,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[2126710823743005151,{"inputs":[{"Node":{"node_id":14831840560430171946,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11804065810513502701,{"inputs":[{"Node":{"node_id":9782123335421401489,"output_index":0}},{"Node":{"node_id":17133591775058457007,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7320676248579211727,{"inputs":[{"Node":{"node_id":14817659161913199655,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7654665057468818389,{"inputs":[{"Node":{"node_id":17378885078543074499,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10514847656270897393,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":16339345235172368839,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16434255153991868080,{"inputs":[{"Node":{"node_id":6124821161363551058,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[17207349373429328029,{"inputs":[{"Node":{"node_id":17967471489196302183,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6867142265138950838,{"inputs":[{"Node":{"node_id":4784708315242877950,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14862049226133442027,{"inputs":[{"Node":{"node_id":16614450796751955858,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8814059393325469059,{"inputs":[{"Node":{"node_id":15492651270767932214,"output_index":0}},{"Node":{"node_id":14035980686649077716,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17364155187784942740,{"inputs":[{"Node":{"node_id":1378578509112405,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.9019608,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.9019608,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10586744777717861556,{"inputs":[{"Node":{"node_id":11417901103965737900,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[15656854169166220905,{"inputs":[{"Node":{"node_id":7821977654068146599,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-5.0,22.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4909350123806022131,{"inputs":[{"Node":{"node_id":15498700602024283966,"output_index":0}},{"Node":{"node_id":16536768589601337644,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10190227675276560561,{"inputs":[{"Node":{"node_id":2682920349304670808,"output_index":0}},{"Node":{"node_id":16434255153991868080,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10424806499648491677,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":17147975601187022720,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14598755603287563819,{"inputs":[{"Node":{"node_id":7466034304713056391,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8230694129617719636,{"inputs":[{"Node":{"node_id":4909350123806022131,"output_index":0}},{"Node":{"node_id":16805628435335819723,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16175421708184657649,{"inputs":[{"Node":{"node_id":8698602280607307123,"output_index":0}},{"Node":{"node_id":514796034658094296,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18422317423856403288,{"inputs":[{"Node":{"node_id":10133176481349663495,"output_index":0}},{"Node":{"node_id":12594527670567285670,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15395954548128560685,{"inputs":[{"Node":{"node_id":13475705179546695973,"output_index":0}},{"Node":{"node_id":16767482995096345179,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11464423670065789907,{"inputs":[{"Node":{"node_id":8644924780109919177,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[5269304445610080925,{"inputs":[{"Node":{"node_id":3686761601672683183,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[14012583111791538162,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[248.00000000000009,884.0]],[2,[380.00000000000006,806.0]],[3,[603.3333333333335,744.6666666666666]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[2,[70.80694036316174,-19.49756328840681]],[1,[0.0,0.0]]],"handle_end":[[2,[-71.33333333333326,24.0]],[1,[-92.00000000000006,25.333333333333258]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4784708315242877950,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[2,[808.5333333333333,683.1555555555556]],[7,[807.0666666666666,680.1333333333332]],[5,[464.5925925925926,1025.382716049383]],[1,[902.6666666666669,446.66666666666674]],[6,[592.0,845.3333333333333]],[3,[592.4000000000001,852.3999999999999]],[4,[468.14814814814815,1025.382716049383]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[4,4],[5,5],[7,7],[6,6],[1,1],[3,3],[2,2]],"end_point":[[6,7],[5,6],[2,3],[3,4],[1,2],[4,5],[7,1]],"handle_primary":[[6,[93.94069526511169,-85.35957406301043]],[1,[0.0,0.0]],[7,[62.39957279246403,-72.271586423759]],[5,[0.0,0.0]],[2,[-81.33333333333337,100.88888888888891]],[4,[0.0,0.0]],[3,[-91.33798434535026,86.27035509501377]]],"handle_end":[[7,[-3.466666666666697,51.33333333333326]],[4,[0.0,0.0]],[3,[0.0,0.0]],[5,[-102.71604938271612,93.3333333333336]],[1,[97.81027061870486,-121.32749415544254]],[2,[85.857044886376,-81.09351003138556]],[6,[-87.55555555555577,101.4074074074075]]],"stroke":[[6,0],[4,0],[5,0],[3,0],[2,0],[7,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8375495949882478840,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[616.0751917898693,61.31097901742621]],[11,[641.3168724279836,48.02194787379973]],[5,[650.6227709190673,52.93827160493828]],[6,[662.1234567901236,64.96570644718793]],[9,[662.1234567901236,66.9849108367627]],[7,[673.0096021947875,65.84362139917695]],[10,[650.9056546258192,56.62876594015139]],[4,[642.6077325610934,47.29035208047554]],[2,[617.4278311233043,51.042625616013815]],[8,[675.3580246913581,68.74074074074075]],[3,[628.5871056241429,46.71808159325306]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[7,7],[4,4],[8,8],[6,6],[10,10],[3,3],[11,11],[2,2],[5,5],[9,9],[1,1]],"end_point":[[4,5],[2,3],[11,1],[8,9],[1,2],[5,6],[7,8],[3,4],[9,10],[6,7],[10,11]],"handle_primary":[[7,[0.0,0.0]],[10,[-2.0025980353477735,-3.5689865976493422]],[6,[5.4430727023319605,2.545953360768181]],[8,[0.0,0.0]],[3,[4.873654303444027,-0.3091793289098348]],[11,[-8.252400548696869,-0.8779149519890339]],[4,[2.784561671457709,0.5265657466421629]],[5,[3.160493827160508,4.6529492455418335]],[2,[2.1833209230284183,-3.0691100638496778]],[9,[-4.389574759945162,-2.106995884773667]],[1,[-0.7315957933242316,0.01300614743686168]]],"handle_end":[[10,[6.086554705109506,0.6475058196925048]],[7,[0.0,0.0]],[8,[4.389574759945162,2.106995884773667]],[2,[-5.145487535686698,0.32642413354457744]],[4,[-3.160493827160508,-4.6529492455418335]],[9,[2.6272417822486887,4.682213077274824]],[6,[0.0,0.0]],[3,[-2.7845616714574817,-0.5265657466421203]],[11,[2.0257074632933154,-0.6893258141543512]],[5,[-5.4430727023319605,-2.545953360768181]],[1,[-2.4595700304455477,3.4574354386312436]]],"stroke":[[10,0],[2,0],[5,0],[1,0],[9,0],[4,0],[6,0],[3,0],[11,0],[7,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11677503666435782605,{"inputs":[{"Node":{"node_id":12049041947382267086,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16536768589601337644,{"inputs":[{"Node":{"node_id":4222034829755771252,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2087303479944421366,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[365.6296296296296,1025.4814814814813]],[3,[368.59259259259255,1025.1851851851852]],[2,[443.2592592592592,882.0740740740739]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[-48.59259259259255,50.07407407407413]],[2,[31.111111111111143,-96.29629629629642]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17426609415699324395,{"inputs":[{"Node":{"node_id":15896921950407486754,"output_index":0}},{"Node":{"node_id":11464423670065789907,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16450742929146919960,{"inputs":[{"Node":{"node_id":14887821801874852671,"output_index":0}},{"Node":{"node_id":11899713172487274471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8595304668947966919,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[798.4000000000001,879.4666666666668]],[1,[810.1333333333333,731.4666666666668]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[-18.13333333333333,82.66666666666674]],[1,[-1.8666666666665608,-67.46666666666658]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11451028343967836482,{"inputs":[{"Node":{"node_id":2422139482859833437,"output_index":0}},{"Node":{"node_id":12531351117929704587,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[314278016428495768,{"inputs":[{"Node":{"node_id":6282972142629473139,"output_index":0}},{"Node":{"node_id":5020096817747898028,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17971411534648521628,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14862049226133442027,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13014628586360765651,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":2175432926627256613,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14778750092903591172,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[155.98219408731924,204.757705978404]],[2,[149.0793650793651,202.5537918871252]],[3,[146.5679012345679,204.44444444444449]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[3,1],[1,2],[2,3]],"handle_primary":[[1,[-2.6135873853791907,-0.8494167367814498]],[3,[0.9278738161427498,1.2447087777524644]],[2,[-2.2695727277346123,-0.643804298125275]]],"handle_end":[[1,[1.7022700834823468,0.48287890620272833]],[2,[-1.156966490299823,-1.5520282186949146]],[3,[-0.32172621516085087,3.1233079488176827]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18015048324114736039,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"delta":[[12,[603.4567901234568,92.8395061728395]],[6,[617.283950617284,44.641975308641975]],[9,[609.3827160493827,43.65432098765433]],[21,[805.925925925926,230.9135802469136]],[26,[752.1975308641976,172.83950617283952]],[20,[805.1358024691358,260.34567901234567]],[22,[785.9753086419753,197.13580246913585]],[15,[664.8888888888889,140.64197530864195]],[16,[672.5925925925926,176.5925925925926]],[13,[616.2962962962963,115.16049382716052]],[5,[639.8024691358025,44.24691358024691]],[25,[737.7777777777778,170.07407407407408]],[2,[683.0617283950618,104.2962962962963]],[10,[597.530864197531,73.08641975308642]],[7,[607.2098765432099,55.308641975308646]],[8,[613.3333333333334,44.24691358024691]],[14,[630.716049382716,132.3456790123457]],[11,[596.9382716049383,85.13580246913581]],[18,[799.2098765432099,253.23456790123456]],[3,[675.3580246913581,68.74074074074075]],[4,[654.4197530864197,54.91358024691358]],[28,[730.2716049382716,169.4814814814815]],[17,[757.7283950617285,217.48148148148147]],[19,[797.8271604938273,246.1234567901235]],[1,[687.4074074074074,99.1604938271605]],[29,[705.1851851851852,106.27160493827162]],[23,[760.8888888888889,175.80246913580248]],[24,[746.8641975308642,175.40740740740742]],[27,[722.1728395061729,147.1604938271605]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"remove":[],"start_point":[[11,11],[26,26],[24,24],[14,14],[3,3],[6,6],[20,20],[23,23],[1,1],[4,4],[2,2],[18,18],[8,8],[5,5],[28,28],[22,22],[17,17],[27,27],[25,25],[21,21],[19,19],[7,7],[12,12],[15,15],[16,16],[10,10],[9,9],[29,29],[13,13]],"end_point":[[17,18],[18,19],[20,21],[7,8],[19,20],[27,28],[24,25],[8,9],[2,3],[21,22],[26,27],[16,17],[29,1],[12,13],[15,16],[28,29],[11,12],[4,5],[10,11],[1,2],[3,4],[5,6],[22,23],[6,7],[25,26],[9,10],[23,24],[13,14],[14,15]],"handle_primary":[[2,[-8.120713305898448,-14.573388203017842]],[13,[2.370370370370324,7.308641975308632]],[22,[-7.506172839506121,-7.901234567901298]],[24,[-5.3333333333332575,-2.5679012345678984]],[3,[-15.209876543209816,-1.7777777777777717]],[21,[-2.5679012345678984,-9.481481481481469]],[5,[-9.48148148148141,0.9876543209876516]],[1,[-2.1728395061728634,1.5802469135802255]],[26,[0.0,0.0]],[9,[-14.024691358024713,15.802469135802482]],[23,[-2.5679012345678984,-0.592592592592581]],[28,[0.0,0.0]],[19,[4.543209876543187,5.925925925925952]],[16,[29.23456790123464,10.666666666666686]],[12,[5.728395061728406,16.98765432098766]],[27,[0.0,0.0]],[4,[-2.3703703703704377,-3.555555555555557]],[15,[6.913580246913625,9.87654320987656]],[25,[0.0,0.0]],[7,[-0.9876543209876444,-4.740740740740733]],[29,[-13.234567901234527,-3.3580246913580396]],[8,[-1.1851851851851052,-1.1851851851851904]],[6,[-8.09876543209873,4.740740740740733]],[11,[3.3580246913580822,1.9753086419753176]],[18,[0.0,-2.172839506172835]],[20,[0.0,0.0]],[17,[20.594048174910657,8.937919170354007]],[10,[-6.320987654320902,4.740740740740733]],[14,[5.728395061728293,2.370370370370381]]],"handle_end":[[8,[0.0,0.0]],[7,[0.0,0.0]],[29,[0.0,0.0]],[19,[0.0,0.0]],[14,[-6.913580246913625,-9.876543209876502]],[10,[-3.3580246913580822,-1.9753086419753176]],[18,[0.0,0.0]],[26,[19.35802469135808,26.864197530864203]],[2,[0.0,0.0]],[21,[7.506172839506121,7.901234567901213]],[5,[0.0,0.0]],[28,[17.580246913580254,58.07407407407402]],[25,[-4.740740740740762,0.790123456790127]],[22,[2.5679012345678984,0.592592592592581]],[1,[0.0,0.0]],[23,[5.3333333333332575,2.5679012345678984]],[12,[0.0,0.0]],[13,[-5.728395061728293,-2.370370370370381]],[20,[2.5679012345678984,9.481481481481438]],[17,[0.0,0.0]],[27,[-3.7530864197531177,-7.506172839506178]],[6,[0.0,0.0]],[9,[0.0,0.0]],[3,[2.3703703703704377,3.555555555555557]],[24,[0.0,0.0]],[15,[0.0,0.0]],[16,[-20.59404817491054,-8.937919170353979]],[4,[9.48148148148141,-0.9876543209876444]],[11,[0.0,0.0]]],"stroke":[[2,0],[28,0],[18,0],[21,0],[14,0],[24,0],[5,0],[27,0],[9,0],[25,0],[22,0],[13,0],[17,0],[23,0],[4,0],[11,0],[16,0],[1,0],[15,0],[20,0],[7,0],[29,0],[8,0],[3,0],[19,0],[26,0],[12,0],[10,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":29}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13975451746581400000,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[835.7333333333332,786.4000000000001]],[2,[901.6,572.8]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,1],[1,2]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[-22.399999999999977,109.06666666666648]],[2,[47.4666666666667,-108.26666666666664]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13035777574951374461,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[696.8888888888889,697.3333333333333]],[1,[896.0,440.44444444444446]],[2,[833.7777777777778,573.3333333333333]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[-68.0,92.88888888888891]]],"handle_end":[[1,[68.0,-92.88888888888891]],[2,[0.0,0.0]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3827449344952693766,{"inputs":[{"Node":{"node_id":2440895173483452224,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11565160497886435388,{"inputs":[{"Node":{"node_id":7893851488963635918,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10336592647221792772,{"inputs":[{"Node":{"node_id":16051539163551573193,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3535178979443201645,{"inputs":[{"Node":{"node_id":12838133055063962839,"output_index":0}},{"Node":{"node_id":8240895922641772563,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14675232891471617236,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[480.7407407407408,1026.6666666666663]],[1,[652.8888888888889,822.6666666666666]],[3,[483.9506172839506,1026.7654320987656]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[2,3],[1,2],[3,1]],"handle_primary":[[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[-143.85185185185185,150.07407407407413]],[1,[26.66666666666669,-58.666666666666515]],[2,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14035980686649077716,{"inputs":[{"Node":{"node_id":6666260895482068061,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[421715625023770179,{"inputs":[{"Node":{"node_id":3670529450440935325,"output_index":0}},{"Node":{"node_id":3150436463719911922,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2044103368441997753,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[710.5185185185186,302.2222222222223]],[7,[710.7160493827162,200.09876543209884]],[6,[756.7407407407409,223.40740740740748]],[5,[793.6790123456792,258.7654320987655]],[8,[694.5185185185187,204.8395061728396]],[2,[723.3580246913581,337.97530864197535]],[3,[747.6543209876543,394.6666666666667]],[4,[796.4444444444446,278.12345679012356]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[4,4],[1,1],[3,3],[6,6],[7,7],[8,8],[2,2],[5,5]],"end_point":[[4,5],[8,1],[2,3],[1,2],[6,7],[5,6],[3,4],[7,8]],"handle_primary":[[2,[0.0,0.0]],[6,[-22.518518518518476,-12.641975308641976]],[1,[0.0,0.0]],[7,[0.0,0.0]],[4,[0.0,0.0]],[8,[0.0,0.0]],[3,[0.0,0.0]],[5,[-5.135802469135797,-10.271604938271594]]],"handle_end":[[4,[5.135802469135797,10.271604938271594]],[6,[0.0,0.0]],[7,[8.117474523314513,-0.7895812719984008]],[1,[1.3827160493826796,-12.641975308641976]],[8,[7.111111111110972,-82.76543209876547]],[3,[-12.049382716049422,68.54320987654324]],[2,[-10.864197530864203,-35.5555555555556]],[5,[22.518518518518476,12.641975308641976]]],"stroke":[[5,0],[7,0],[2,0],[4,0],[6,0],[1,0],[3,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6124821161363551058,{"inputs":[{"Node":{"node_id":10420981328998103391,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6749771744300551215,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[3,[726.6666666666666,765.3333333333333]],[5,[585.3333333333333,1025.7777777777778]],[1,[589.3333333333333,1025.3333333333333]],[4,[620.8888888888888,943.5555555555557]],[2,[660.4444444444443,878.2222222222222]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[2,2],[3,3],[4,4],[1,1]],"end_point":[[2,3],[3,4],[4,5],[1,2],[5,1]],"handle_primary":[[5,[0.0,0.0]],[2,[31.11111111111109,-50.66666666666663]],[4,[-29.333333333333258,59.11111111111097]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[-31.863450886870623,51.89190573004646]],[5,[-0.4444444444443434,0.8888888888889142]],[3,[29.333333333333258,-59.1111111111112]],[4,[0.0,0.0]]],"stroke":[[2,0],[4,0],[5,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2440895173483452224,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[30.814814814814767,578.0740740740739]],[1,[93.037037037037,526.8148148148147]],[3,[33.18518518518515,636.148148148148]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[2,[-9.185185185185162,39.703703703703695]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[9.185185185185162,-39.703703703703695]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11356586238302409958,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[811.8518518518518,273.18518518518516]],[1,[811.5555555555555,250.96296296296296]],[6,[792.2962962962963,188.74074074074073]],[2,[783.1111111111111,348.74074074074065]],[4,[777.7777777777778,375.7037037037037]],[3,[732.148148148148,432.2962962962963]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[4,4],[2,2],[5,5],[1,1],[3,3]],"end_point":[[1,2],[3,4],[2,3],[5,6],[4,5]],"handle_primary":[[1,[0.0,0.0]],[5,[3.7834358363461433,-27.565032521950258]],[2,[-14.6604291210798,34.80924611318039]],[4,[10.310300340717504,-19.181954122264813]],[3,[0.0,0.0]]],"handle_end":[[3,[-12.740740740740875,23.703703703703695]],[1,[14.6604291210798,-34.809246113180336]],[4,[-4.148148148148152,30.22222222222223]],[5,[26.074074074074133,33.18518518518516]],[2,[26.666666666666515,-35.555555555555486]]],"stroke":[[1,0],[3,0],[5,0],[4,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13231685386999438557,{"inputs":[{"Node":{"node_id":1659518581611333812,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9371909264427723282,{"inputs":[{"Node":{"node_id":8595304668947966919,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.84705883,"green":0.5372549,"blue":0.38431373,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9782123335421401489,{"inputs":[{"Node":{"node_id":11656581020969095354,"output_index":0}},{"Node":{"node_id":1019037285881657884,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2780251074492832077,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[679.189837009989,239.99177480754585]],[2,[644.0435005900861,214.94345295604788]],[4,[654.5349442975197,224.51689533908117]],[1,[620.0443231093315,208.38630063890184]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[3,4],[2,3],[1,2],[4,1]],"handle_primary":[[1,[0.0,0.0]],[4,[-14.688021190407198,-10.884872846462486]],[3,[0.0,0.0]],[2,[17.048596024579638,8.262011919603992]]],"handle_end":[[2,[-15.868308607493532,-9.835728475719122]],[1,[-9.660678057982182,-4.68171321271447]],[4,[0.1311430463429133,0.13114304634288487]],[3,[13.4932102981968,9.999432631699392]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17118107476414252025,{"inputs":[{"Node":{"node_id":6645255982686652881,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[74.2222222222222,480.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[40.0,40.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3627710206997006419,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[149.94787379972564,262.84773662551436]],[3,[154.2366898148148,257.4780574845679]],[1,[152.49382716049382,262.71604938271605]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[3,1],[1,2],[2,3]],"handle_primary":[[2,[-0.2633744855966995,-0.4389574759944139]],[3,[4.31137018907981,-2.5386217986682027]],[1,[0.0,0.0]]],"handle_end":[[3,[2.8421709430404014e-14,0.0]],[2,[-3.3775342902714556,1.988760370600971]],[1,[0.4650366425890411,0.7750610709815646]]],"stroke":[[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12838133055063962839,{"inputs":[{"Node":{"node_id":13644138583806412631,"output_index":0}},{"Node":{"node_id":6973438081601736688,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7922156219537051964,{"inputs":[{"Node":{"node_id":13594670583065022897,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[15446793500614592278,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[694.3429355281208,73.8326474622771]],[5,[718.2222222222222,97.09739368998628]],[4,[725.5967078189301,90.3374485596708]],[7,[718.3100137174213,77.2565157750343]],[6,[724.6310013717421,85.86008230452676]],[8,[697.5034293552812,77.4320987654321]],[3,[722.3484224965707,77.2565157750343]],[2,[702.244170096022,76.11522633744856]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[5,5],[7,7],[3,3],[2,2],[8,8],[6,6],[4,4]],"end_point":[[1,2],[3,4],[6,7],[5,6],[4,5],[8,1],[2,3],[7,8]],"handle_primary":[[5,[0.0,0.0]],[6,[-0.7023319615914261,-5.091906721536347]],[2,[5.267489711934218,-0.7023319615912129]],[8,[-3.5116598079559935,-1.6680384087791396]],[4,[-1.9392278971834005,5.143169640356035]],[7,[-6.236870142765838,-1.74052190030676]],[3,[3.456189131014753,3.3025807251918877]],[1,[0.0,0.0]]],"handle_end":[[8,[0.08779149519887142,0.08779149519891405]],[2,[-3.950617283950578,-3.775034293552821]],[6,[3.7750342935527215,1.0534979423868265]],[5,[0.6823799889585871,4.947254919948108]],[1,[-5.267489711934218,0.7023319615912129]],[4,[0.0,0.0]],[7,[3.5116598079559935,1.6680384087791396]],[3,[2.0192043895747247,-5.355281207133089]]],"stroke":[[3,0],[8,0],[2,0],[7,0],[1,0],[6,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9684857454501250999,{"inputs":[{"Node":{"node_id":8699675339613677057,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13444661581815146533,{"inputs":[{"Node":{"node_id":16450742929146919960,"output_index":0}},{"Node":{"node_id":10792166025753022402,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14993053984267866751,{"inputs":[{"Node":{"node_id":13907578809542898348,"output_index":0}},{"Node":{"node_id":9863310024364795214,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16195626650123806176,{"inputs":[{"Node":{"node_id":14057307926677215422,"output_index":0}},{"Node":{"node_id":1869448627329502330,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18279507457571359732,{"inputs":[{"Node":{"node_id":8697043784435445845,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3121275823460307102,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[3,[452.88888888888886,1025.3333333333333]],[1,[705.7777777777778,698.6666666666666]],[4,[449.77777777777777,1025.7777777777778]],[2,[612.0,780.0]],[5,[595.5555555555555,791.1111111111111]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[4,4],[1,1],[2,2],[5,5]],"end_point":[[1,2],[5,1],[4,5],[3,4],[2,3]],"handle_primary":[[5,[54.93054949731868,-52.22097082256312]],[2,[-35.111111111111086,34.66666666666663]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[5,[-1.1368683772161605e-13,-0.5925925925926094]],[4,[-99.11111111111104,94.22222222222229]],[1,[35.111111111111086,-34.66666666666663]],[3,[0.0,0.0]],[2,[59.111111111111086,-144.8888888888889]]],"stroke":[[2,0],[3,0],[1,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13269760558336088742,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[698.2222222222222,483.1111111111111]],[3,[595.1111111111111,439.55555555555554]],[5,[756.4444444444443,438.22222222222223]],[2,[447.1111111111111,332.44444444444446]],[1,[265.3333333333333,312.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[2,3],[3,4],[1,2],[4,5]],"handle_primary":[[3,[20.8888888888888,20.444444444444457]],[2,[83.95959630801838,35.04735442215451]],[4,[22.46059594926794,-9.800987323316916]],[1,[0.0,0.0]]],"handle_end":[[1,[-96.88888888888886,-40.44444444444446]],[3,[-48.888888888888914,21.33333333333331]],[4,[-22.222222222222285,23.111111111111143]],[2,[-20.8888888888888,-20.444444444444457]]],"stroke":[[2,0],[4,0],[1,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11590691579869262546,{"inputs":[{"Node":{"node_id":11553850607251055696,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13481022631108980683,{"inputs":[{"Node":{"node_id":9182448229950585507,"output_index":0}},{"Node":{"node_id":12224498203743157414,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14797986717815207528,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[2,[425.0,650.0]],[5,[868.0,380.44444444444446]],[4,[826.6666666666665,552.4444444444443]],[1,[80.0,557.0]],[3,[665.7777777777778,658.6666666666667]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[4,4],[2,2]],"end_point":[[1,2],[2,3],[3,4],[4,5]],"handle_primary":[[2,[105.59298295237464,48.735222901095995]],[3,[0.0,0.0]],[4,[59.11111111111131,-70.66666666666652]],[1,[134.0,-75.0]]],"handle_end":[[4,[0.0,0.0]],[3,[-59.11111111111131,70.66666666666652]],[2,[0.0,0.0]],[1,[-104.0,-48.0]]],"stroke":[[4,0],[1,0],[2,0],[3,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5861306074868809692,{"inputs":[{"Node":{"node_id":10190227675276560561,"output_index":0}},{"Node":{"node_id":3636653585682494814,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13907578809542898348,{"inputs":[{"Node":{"node_id":12313564802550122052,"output_index":0}},{"Node":{"node_id":15827578515555598997,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[581013017684525986,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[852.0,631.1111111111111]],[1,[803.5555555555554,878.6666666666665]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[2,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[-41.77777777777783,81.77777777777771]]],"handle_end":[[1,[-37.77777777777783,80.88888888888903]],[2,[0.0,-0.4444444444443434]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3670529450440935325,{"inputs":[{"Node":{"node_id":1384427686127078856,"output_index":0}},{"Node":{"node_id":8543051864256131356,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12030171742672119253,{"inputs":[{"Node":{"node_id":12801133692316734622,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[7450965328305122110,{"inputs":[{"Node":{"node_id":2659768650911099730,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.4},"exposed":false}},{"Value":{"tagged_value":{"F64":2.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[1806828617441445250,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[395.3333333333333,758.0]],[4,[32.0,1025.3333333333333]],[3,[147.33333333333334,814.0000000000001]],[2,[304.6666666666667,765.3333333333333]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[2,3],[3,4],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[-32.666666666666686,0.6666666666667425]],[3,[-50.13723402627032,36.301698579412914]]],"handle_end":[[3,[-0.6666666666666892,-122.66666666666686]],[2,[50.137234026270335,-36.301698579412914]],[1,[32.666666666666686,-0.6666666666667425]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13475705179546695973,{"inputs":[{"Node":{"node_id":11451028343967836482,"output_index":0}},{"Node":{"node_id":501401493219507773,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2594533001540454577,{"inputs":[{"Node":{"node_id":15518174914032911052,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":8.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9276497172451351253,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[606.8928516994359,102.3453741807651]],[4,[605.9173906416706,103.71101966163694]],[2,[607.1269623532997,114.75323883554336]],[3,[605.1760402377686,111.78783721993597]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[3,[-0.585276634659408,-2.419143423258646]],[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.27360881696279193,-0.7182231445274425]]],"handle_end":[[2,[0.585276634659408,2.4191434232586317]],[1,[-1.3656454808717626,-5.306508154244753]],[4,[0.0,0.03901844231063478]],[3,[-0.6242950769699291,1.6387745770462772]]],"stroke":[[4,0],[2,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7821977654068146599,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[825.9524005971,863.6469292802573]],[1,[917.0,471.6]],[2,[826.5068586621596,856.9308484975209]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[1,1],[2,2]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[94.89314133784036,-231.73084849752092]],[3,[-0.39999999999997726,191.19999999999985]]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15126865253122550765,{"inputs":[{"Node":{"node_id":13014628586360765651,"output_index":0}},{"Node":{"node_id":4307303572241320716,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2682920349304670808,{"inputs":[{"Node":{"node_id":10928540355449103287,"output_index":0}},{"Node":{"node_id":16324258033206362312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13368990606109678244,{"inputs":[{"Node":{"node_id":421715625023770179,"output_index":0}},{"Node":{"node_id":15961046538654083626,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16290933138334939444,{"inputs":[{"Node":{"node_id":17426609415699324395,"output_index":0}},{"Node":{"node_id":14888395629683671889,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12496143061817048445,{"inputs":[{"Node":{"node_id":7525593029671097583,"output_index":0}},{"Node":{"node_id":7654665057468818389,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12880230498984021417,{"inputs":[{"Node":{"node_id":15949658764632267703,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[14883504161508594099,{"inputs":[{"Node":{"node_id":13368990606109678244,"output_index":0}},{"Node":{"node_id":11025165626998987360,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7262199696924786895,{"inputs":[{"Node":{"node_id":14029368390543839187,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[952330505278607301,{"inputs":[{"Node":{"node_id":15038739378867834454,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5302437193964714993,{"inputs":[{"Node":{"node_id":1235106489581249820,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[10792166025753022402,{"inputs":[{"Node":{"node_id":2780251074492832077,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16649851742084147477,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[1,[870.6666666666665,383.55555555555554]],[2,[838.6666666666666,564.0]]]},"segments":{"add":[1],"remove":[],"start_point":[[1,1]],"end_point":[[1,2]],"handle_primary":[[1,[16.000000000000227,37.33333333333337]]],"handle_end":[[1,[48.44444444444446,-91.11111111111109]]],"stroke":[[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1272070255512697108,{"inputs":[{"Node":{"node_id":14012648643507848353,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17147975601187022720,{"inputs":[{"Node":{"node_id":18015048324114736039,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15518174914032911052,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[129.77777777777777,406.2222222222222]],[1,[851.5555555555557,370.66666666666663]],[3,[639.1111111111112,614.6666666666666]],[2,[814.2222222222223,498.66666666666663]],[5,[262.6666666666667,423.5555555555556]],[4,[429.7777777777778,551.5555555555555]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4],[5,5]],"end_point":[[5,6],[2,3],[3,4],[1,2],[4,5]],"handle_primary":[[3,[-83.11111111111109,3.111111111111086]],[2,[-43.55555555555554,54.66666666666663]],[1,[0.0,0.0]],[5,[-58.2222222222222,-21.77777777777783]],[4,[-74.22222222222217,-57.77777777777783]]],"handle_end":[[5,[57.333333333333314,-5.777777777777828]],[2,[83.11111111111109,-3.111111111111086]],[1,[43.55555555555554,-54.66666666666663]],[3,[74.22222222222217,57.77777777777783]],[4,[66.87431172777582,25.01405553176352]]],"stroke":[[1,0],[3,0],[4,0],[5,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17078740291337047697,{"inputs":[{"Node":{"node_id":3406722917122601552,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.84765625,"green":0.5384252,"blue":0.3874054,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.84765625,"green":0.5384252,"blue":0.3874054,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10264089084180279094,{"inputs":[{"Node":{"node_id":5213978458941436169,"output_index":0}},{"Node":{"node_id":4332145463108161926,"output_index":0}},{"Value":{"tagged_value":{"F64":1.0},"exposed":false}},{"Value":{"tagged_value":{"F64":60.0},"exposed":false}},{"Value":{"tagged_value":{"F64":-100.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[4859656512650360562,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[416.66666666666663,803.3333333333333]],[1,[163.33333333333343,1025.3333333333333]],[2,[249.3333333333334,898.0]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[2,3],[1,2]],"handle_primary":[[2,[40.66666666666666,-40.666666666666515]],[1,[0.0,0.0]]],"handle_end":[[1,[-45.09988913511887,45.099889135118815]],[2,[-77.99999999999994,22.666666666666742]]],"stroke":[[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13594670583065022897,{"inputs":[{"Node":{"node_id":13302269488061286120,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4265165189651403984,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":10264089084180279094,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12428327489525325219,{"inputs":[{"Node":{"node_id":14209241002058525241,"output_index":0}},{"Node":{"node_id":1984475088429379731,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16767482995096345179,{"inputs":[{"Node":{"node_id":6532401937876437300,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5278509881589546420,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[899.1111111111111,600.0000000000001]],[3,[823.7037037037037,861.8666666666667]],[2,[824.4444444444445,850.2222222222223]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[1,1],[2,2]],"end_point":[[3,1],[2,3],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[39.55555555555554,-105.8222222222222]],[3,[-26.31111111111113,120.79999999999984]]],"stroke":[[1,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7659717355245331967,{"inputs":[{"Node":{"node_id":18422317423856403288,"output_index":0}},{"Node":{"node_id":4479074488343511985,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8697043784435445845,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"delta":[[12,[199.11111111111111,214.51851851851853]],[4,[647.5555555555554,171.55555555555557]],[19,[205.23456790123456,227.55555555555557]],[21,[216.8888888888889,238.22222222222223]],[16,[172.44444444444446,239.40740740740745]],[7,[452.0,206.22222222222223]],[18,[195.1604938271605,228.54320987654324]],[30,[425.4814814814815,246.71604938271605]],[25,[201.87654320987656,262.12345679012344]],[33,[602.2716049382716,229.5308641975309]],[5,[616.4444444444443,170.22222222222223]],[26,[227.55555555555557,246.51851851851853]],[22,[195.95061728395063,253.8271604938272]],[34,[647.5061728395062,240.79012345679013]],[14,[155.06172839506175,249.08641975308643]],[11,[208.44444444444443,212.0]],[23,[185.37661941777165,263.56957780826093]],[10,[271.1111111111111,207.55555555555551]],[28,[278.9135802469136,223.80246913580248]],[2,[701.7777777777777,252.0]],[24,[188.90085842299663,268.4351595864769]],[32,[526.0246913580247,240.79012345679013]],[9,[326.22222222222223,208.0]],[6,[553.7777777777777,195.11111111111111]],[27,[251.06172839506175,233.283950617284]],[31,[463.01234567901247,246.71604938271605]],[29,[369.3827160493828,240.19753086419755]],[17,[183.50617283950615,231.70370370370372]],[35,[680.888888888889,281.48148148148147]],[20,[217.87654320987656,231.90123456790127]],[8,[413.77777777777777,199.55555555555551]],[1,[699.5555555555554,303.55555555555554]],[3,[679.9012345679013,198.716049382716]],[13,[173.03703703703707,226.962962962963]],[15,[155.85185185185185,253.03703703703707]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"remove":[],"start_point":[[20,20],[1,1],[29,29],[3,3],[30,30],[28,28],[6,6],[27,27],[32,32],[25,25],[15,15],[21,21],[5,5],[10,10],[35,35],[11,11],[34,34],[12,12],[24,24],[17,17],[4,4],[7,7],[26,26],[14,14],[23,23],[31,31],[8,8],[22,22],[19,19],[13,13],[18,18],[33,33],[16,16],[2,2],[9,9]],"end_point":[[17,18],[35,1],[1,2],[19,20],[23,24],[15,16],[4,5],[10,11],[30,31],[2,3],[26,27],[24,25],[34,35],[31,32],[22,23],[33,34],[5,6],[29,30],[7,8],[27,28],[11,12],[25,26],[16,17],[20,21],[21,22],[8,9],[32,33],[13,14],[28,29],[12,13],[6,7],[9,10],[18,19],[3,4],[14,15]],"handle_primary":[[5,[-12.0,3.555555555555543]],[18,[4.148148148148124,-1.3827160493827364]],[25,[4.938271604938279,-3.160493827160451]],[24,[3.3430068414448044,-0.5735531240474074]],[23,[-0.9364426154549506,2.4191434232586175]],[10,[-12.888888888888856,1.7777777777778567]],[7,[-8.444444444444457,-2.2222222222222285]],[33,[24.098765432098844,-2.5679012345678984]],[12,[-5.53086419753086,3.3580246913580254]],[13,[-9.28395061728395,7.703703703703695]],[27,[6.518518518518505,-6.518518518518562]],[26,[8.493827160493822,-2.765432098765416]],[8,[-25.33333333333331,1.7777777777778567]],[30,[11.061728395061778,0.7901234567900985]],[6,[-23.11111111111109,9.777777777777771]],[21,[-3.753086419753061,3.5555555555555713]],[2,[-2.913580246913398,-22.66666666666669]],[31,[19.753086419753004,-4.543209876543159]],[1,[0.0,0.0]],[11,[0.0,0.0]],[15,[3.7530864197531177,-1.580246913580254]],[32,[23.90123456790127,-2.765432098765416]],[14,[-1.61975308641982,1.935802469135723]],[16,[5.530864197530889,-7.111111111111143]],[4,[-10.222222222222172,-3.5555555555555713]],[17,[2.7654320987654444,-0.790123456790127]],[35,[10.469135802469168,11.851851851851848]],[22,[-8.16460905349794,4.4115226337448235]],[19,[4.74074074074079,0.9876543209876728]],[34,[10.074074074074131,11.85185185185182]],[9,[-30.22222222222223,1.3333333333333712]],[20,[2.3703703703704093,1.185185185185162]],[28,[14.81481481481478,1.9753086419753176]],[3,[-17.576025737442137,-14.306067460708704]],[29,[29.4320987654321,3.358024691358054]]],"handle_end":[[9,[12.888888888888856,-1.777777777777743]],[13,[1.4782632300064904,-1.7667048358613044]],[20,[3.753086419753089,-3.5555555555556]],[28,[-29.4320987654321,-3.358024691357997]],[29,[-11.061728395061778,-0.790123456790127]],[4,[12.0,-3.555555555555543]],[3,[10.222222222222172,3.5555555555555713]],[32,[-24.098765432098844,2.5679012345678984]],[11,[5.530864197530917,-3.3580246913580254]],[19,[-2.3703703703704093,-1.185185185185162]],[24,[-4.938271604938279,3.160493827160451]],[8,[30.22222222222223,-1.3333333333333712]],[25,[-8.493827160493822,2.765432098765416]],[2,[8.493827160493879,6.913580246913597]],[12,[9.283950617283978,-7.703703703703695]],[7,[25.33333333333331,-1.777777777777743]],[35,[0.0,5.684341886080804e-14]],[1,[2.822923929132685,21.961391245287817]],[6,[8.444444444444457,2.222222222222257]],[10,[20.88888888888889,-1.4814814814814952]],[26,[-6.518518518518505,6.518518518518505]],[22,[0.752878950104872,-1.9449372877709263]],[34,[-10.469135802469168,-11.851851851851848]],[31,[-23.90123456790127,2.7654320987653875]],[15,[-5.530864197530889,7.111111111111086]],[21,[9.952891875905069,-5.377772223271279]],[18,[-4.740740740740705,-0.9876543209876728]],[27,[-14.81481481481478,-1.9753086419753176]],[14,[-3.7530864197531177,1.580246913580254]],[30,[-19.753086419753004,4.543209876543187]],[5,[23.11111111111109,-9.777777777777745]],[16,[-2.765432098765416,0.790123456790127]],[33,[-10.074074074074131,-11.851851851851848]],[23,[-1.24660051630255,0.213876804468498]],[17,[-4.148148148148152,1.3827160493827648]]],"stroke":[[18,0],[20,0],[1,0],[16,0],[31,0],[11,0],[8,0],[28,0],[10,0],[23,0],[12,0],[35,0],[14,0],[17,0],[34,0],[15,0],[25,0],[29,0],[19,0],[9,0],[13,0],[33,0],[22,0],[3,0],[32,0],[24,0],[30,0],[21,0],[27,0],[6,0],[4,0],[26,0],[7,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":35}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4236845268521674740,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[397.6296296296296,1025.185185185185]],[3,[393.1851851851852,1025.4814814814813]],[2,[568.8888888888889,785.4814814814813]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[2,2],[3,3],[1,1]],"end_point":[[1,2],[3,1],[2,3]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[33.777777777777885,-150.22222222222194]],[3,null],[1,[-153.1851851851851,112.88888888888891]]],"stroke":[[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1984475088429379731,{"inputs":[{"Node":{"node_id":1621196991038859321,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[9271343782272072828,{"inputs":[{"Node":{"node_id":4078100635676202528,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.8980392,"green":0.8,"blue":0.6117647,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[514796034658094296,{"inputs":[{"Node":{"node_id":13352561089252322209,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8698602280607307123,{"inputs":[{"Node":{"node_id":14098374807212007572,"output_index":0}},{"Node":{"node_id":14285767317419627814,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10770443343193024138,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[616.0987654320988,23.01234567901235]],[5,[671.3086419753088,28.641975308641975]],[7,[634.1618655692731,33.7997256515775]],[3,[634.172839506173,30.814814814814817]],[6,[656.4609053497943,30.375857338820303]],[2,[621.0370370370372,23.01234567901235]],[4,[656.6913580246915,28.049382716049383]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[2,2],[6,6],[7,7],[4,4],[3,3],[1,1],[5,5]],"end_point":[[1,2],[3,4],[6,7],[2,3],[5,6],[4,5],[7,1]],"handle_primary":[[4,[4.345679012345727,-0.39506172839505993]],[6,[-10.31550068587103,2.4142661179698237]],[3,[6.024691358024711,0.4938271604938329]],[2,[1.1851851851851052,1.5802469135802468]],[5,[0.0,0.0]],[7,[-6.408779149519887,-0.8340192043895769]],[1,[0.0,0.0]]],"handle_end":[[1,[-1.1851851851851052,-1.5802469135802468]],[7,[4.455418381344316,5.4759945130315515]],[4,[-0.39506172839503506,-0.5925925925925917]],[6,[6.408779149519887,0.8340192043895769]],[3,[-4.345679012345727,0.39506172839506704]],[5,[10.31550068587103,-2.4142661179698237]],[2,[-6.024691358024711,-0.49382716049382935]]],"stroke":[[3,0],[5,0],[7,0],[6,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1019037285881657884,{"inputs":[{"Node":{"node_id":11481949351661484921,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[8410534738018320047,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2],"remove":[],"delta":[[2,[762.5185185185184,667.5061728395063]],[1,[834.6666666666665,551.8024691358028]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[2,2],[1,1]],"end_point":[[1,2],[2,1]],"handle_primary":[[1,[0.0,0.0]],[2,[44.88888888888857,-64.49382716049388]]],"handle_end":[[1,[47.85185185185162,-63.160493827160394]],[2,null]],"stroke":[[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":2}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2397243911096708995,{"inputs":[{"Node":{"node_id":10587073897090054035,"output_index":0}},{"Node":{"node_id":7505360855062237520,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[541002100261582638,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[609.7777777777777,559.5555555555555]],[1,[456.88888888888886,483.55555555555554]],[2,[536.8888888888889,544.4444444444445]],[4,[648.4444444444443,543.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[2,2],[3,3]],"end_point":[[2,3],[3,4],[1,2]],"handle_primary":[[1,[0.0,0.0]],[3,[20.0,-7.555555555555543]],[2,[25.777777777777715,11.555555555555545]]],"handle_end":[[2,[-20.0,7.555555555555543]],[3,[0.0,0.0]],[1,[-25.777777777777715,-11.555555555555545]]],"stroke":[[3,0],[1,0],[2,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5009664118231399060,{"inputs":[{"Node":{"node_id":3226457726231232839,"output_index":0}},{"Node":{"node_id":17207895962122263432,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1378578509112405,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[593.3924706599604,60.59564090839812]],[1,[602.6886145404666,50.91906721536352]],[3,[590.4855967078191,66.80932784636488]],[2,[599.5281207133061,50.3923182441701]],[4,[594.6410608139003,75.57872275567746]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[1,1],[2,2],[5,5],[4,4]],"end_point":[[3,4],[2,3],[5,1],[1,2],[4,5]],"handle_primary":[[5,[1.248590153939972,-3.9798811156835896]],[1,[0.0,0.0]],[2,[-1.843621399176982,0.5267489711934203]],[3,[1.9314128943758533,7.3257125438195345]],[4,[0.0,0.0]]],"handle_end":[[1,[1.843621399176982,-0.5267489711934203]],[5,[-4.379820149367788,0.9754610577655498]],[2,[-2.7532629181224593,-10.4429315732828]],[3,[0.0,0.0]],[4,[-1.704168058538812,5.432035686592322]]],"stroke":[[1,0],[2,0],[3,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[501401493219507773,{"inputs":[{"Node":{"node_id":9425359632144678256,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.7529412,"green":0.15686275,"blue":0.13333334,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[1235106489581249820,{"inputs":[{"Node":{"node_id":3970516859959908758,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2394762731964337494,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4422453582814483232,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,1024.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4341772758799935306,{"inputs":[{"Node":{"node_id":1785173043494067496,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3226457726231232839,{"inputs":[{"Node":{"node_id":4493274523708782092,"output_index":0}},{"Node":{"node_id":7922156219537051964,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6645255982686652881,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.5,1.0]],[4,[0.0,0.5]],[2,[1.0,0.5]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]],[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]]],"handle_end":[[4,[-0.275892388889507,0.0]],[1,[0.0,-0.275892388889507]],[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]]],"stroke":[[4,0],[3,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1162381870526064378,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":9271343782272072828,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7447657690776686262,{"inputs":[{"Node":{"node_id":3649809135741361946,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9698363115186534174,{"inputs":[{"Node":{"node_id":1661691009086487874,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}],[5471152581000334146,{"inputs":[{"Node":{"node_id":12761901161949743155,"output_index":0}},{"Node":{"node_id":952330505278607301,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15827578515555598997,{"inputs":[{"Node":{"node_id":15656854169166220905,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14539627480594383748,{"inputs":[{"Node":{"node_id":581013017684525986,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2282726379014798660,{"inputs":[{"Node":{"node_id":454416440369338250,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11417901103965737900,{"inputs":[{"Node":{"node_id":13269760558336088742,"output_index":0}},{"Value":{"tagged_value":{"PointSpacingType":"Separation"},"exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}},{"Value":{"tagged_value":{"U32":100},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"Bool":false},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SubpathSegmentLengthsNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::BoundlessFootprintNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::FreezeRealTimeNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MemoNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::misc::PointSpacingType","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"u32","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":5}},{"Network":{"import_type":{"Concrete":{"name":"bool","alias":null}},"import_index":6}},{"Node":{"node_id":0,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SamplePolylineNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15637103575662751567,{"inputs":[{"Node":{"node_id":314278016428495768,"output_index":0}},{"Node":{"node_id":4350324834849900949,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10375238420217738812,{"inputs":[{"Node":{"node_id":2282726379014798660,"output_index":0}},{"Node":{"node_id":17078740291337047697,"output_index":0}},{"Value":{"tagged_value":{"F64":1.2},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::CopyToPointsNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[16446146761452576438,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16756940771483104467,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2126710823743005151,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18015048324114736039,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3955326429435439190,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12385950900718181935,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1235106489581249820,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"is_integer":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","unit":" px","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5302437193964714993,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11451028343967836482,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1689789805659535712,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6973438081601736688,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4832236468224231783,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14817659161913199655,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7450965328305122110,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4422453582814483232,{"persistent_metadata":{"reference":"Merge","display_name":"Hair and Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-7,4]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11479098559726891734,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2641530639940889619,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11573595155909211511,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"unit":" px","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","is_integer":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"unit":" px","blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16450742929146919960,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12387541320114693418,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3827449344952693766,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","blank_assist":true,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","is_integer":false,"min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","min":0.0,"is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13907578809542898348,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18190631752493248867,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10420981328998103391,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5009664118231399060,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10336592647221792772,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1621196991038859321,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"min":0.0,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"blank_assist":true,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","min":0.0,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12062649793560663566,{"persistent_metadata":{"reference":"Merge","display_name":"Solid Red Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":3}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15492651270767932214,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7659717355245331967,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7654665057468818389,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8644924780109919177,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","unit":" px","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","blank_assist":true,"is_integer":false,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6672826052605647592,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4105711298139980122,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15038739378867834454,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10086073308516686449,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18214377096178867498,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17118107476414252025,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","unit":" px","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4236845268521674740,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13163272246010991228,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7893851488963635918,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3992858139802231032,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14225285635863713990,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","unit":"x","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11199691961479466803,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14012583111791538162,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1661691009086487874,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"mode":"Increment","unit":" px","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"mode":"Increment","unit":" px","is_integer":false},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17815494794630739611,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12880230498984021417,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5174744389209053970,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1889157037801767612,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"range_max":100.0,"mode":"Range","range_min":1.0,"min":0.01},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"mode":"Increment","min":0.0},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14035980686649077716,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13035777574951374461,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15177845878727456758,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16649851742084147477,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14883504161508594099,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,295]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5326536612985524219,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.01,"range_min":1.0,"mode":"Range","range_max":100.0},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11659756061767599421,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14537754528543289381,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7262199696924786895,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","unit":" px","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":true,"blank_assist":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"unit":" px","is_integer":false,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","blank_assist":true,"unit":" px","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12594527670567285670,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6282972142629473139,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11565160497886435388,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","min":0.0,"blank_assist":true,"unit":" px","is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","is_integer":true,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"mode":"Increment","min":0.0,"unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"blank_assist":true,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10619788176782820865,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4479074488343511985,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4572557574846980832,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1869448627329502330,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8697043784435445845,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16051539163551573193,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1378578509112405,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15896921950407486754,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8766106989344197438,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9782123335421401489,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16324258033206362312,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14345191642063772510,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4332145463108161926,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,292]}}},"network_metadata":null}}],[6532401937876437300,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12049041947382267086,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","y":"Y","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8934999452649011837,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,130]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14797986717815207528,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1019037285881657884,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1806828617441445250,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13352561089252322209,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10770443343193024138,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15446793500614592278,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5040278174920511484,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11481949351661484921,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"unit":" px","is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","min":2.0,"is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"mode":"Increment","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13045580349734858212,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"range_min":1.0,"min":0.01,"mode":"Range","range_max":100.0},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17891208858820401648,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4248321400839848160,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,124]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11553850607251055696,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6292009934909381201,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,88]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14598755603287563819,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3636653585682494814,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17147975601187022720,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11464423670065789907,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1984475088429379731,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14991324592500870173,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16434255153991868080,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4784708315242877950,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10253927692147706615,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16530658574540156160,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","unit":" px","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","is_integer":false,"y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16290933138334939444,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14539627480594383748,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15949658764632267703,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"unit":" px","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":true,"min":2.0,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","blank_assist":true,"min":0.0,"unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"min":0.0,"unit":" px","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10587073897090054035,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13644138583806412631,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17336535036064625290,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11417901103965737900,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","min":0.0,"blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"mode":"Increment","blank_assist":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"is_integer":false,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"unit":" px","is_integer":false,"mode":"Increment","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17207895962122263432,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18067513817508158001,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","is_integer":false,"unit":" px","min":0.0},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"mode":"Increment","is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13014916927589286309,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"range_min":1.0,"is_integer":false,"mode":"Range","range_max":100.0,"min":0.01,"blank_assist":true},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":true,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14888395629683671889,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9271343782272072828,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17064046832210629373,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17529660518597229229,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4341772758799935306,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","is_integer":false,"unit":" px","blank_assist":true},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3226457726231232839,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16175421708184657649,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1204243038352113866,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2087303479944421366,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7747398671834040298,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.01,"range_max":100.0,"mode":"Range","blank_assist":true,"is_integer":false,"range_min":1.0},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","is_integer":true,"min":0.0},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15798070933198867970,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15303587427289959766,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10270446074640675342,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12801133692316734622,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"blank_assist":true,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","mode":"Increment","blank_assist":true,"is_integer":false,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"mode":"Increment","min":0.0,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4663768795652429571,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16805628435335819723,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11356586238302409958,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16551385471328831128,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9847383247226990698,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10599660455959346550,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7525593029671097583,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3535178979443201645,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17207349373429328029,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3121275823460307102,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15815816861435910950,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13269760558336088742,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7320676248579211727,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11677503666435782605,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18422317423856403288,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6645255982686652881,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12876462860151722087,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12219771677493189964,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15578929303912288394,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[542361600097372754,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14029368390543839187,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[172538270105470471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[454416440369338250,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10415872992231003638,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16339345235172368839,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5002654561220917457,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Range","range_min":1.0,"blank_assist":true,"range_max":100.0,"min":0.01},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9684857454501250999,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4859656512650360562,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12131058586835568367,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4577174813962563383,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10432831427187785843,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2594533001540454577,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"is_integer":true,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"blank_assist":true,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","blank_assist":true,"unit":" px","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1785173043494067496,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17426609415699324395,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2397243911096708995,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[501401493219507773,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14862049226133442027,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11630078441485655672,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4372998635946271235,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15827578515555598997,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5020096817747898028,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12224498203743157414,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11632506522064533635,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13481022631108980683,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10918055532782314571,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13557369662261607646,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13231685386999438557,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6124821161363551058,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"mode":"Increment","blank_assist":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"is_integer":false,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"blank_assist":true,"mode":"Increment","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17971411534648521628,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14982414026754548178,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14209241002058525241,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7141088190930752823,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"blank_assist":true,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"min":0.0,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"mode":"Increment","is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6749771744300551215,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10860592954464951000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14887821801874852671,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13261814586176172586,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3414873131936208778,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2394762731964337494,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":true},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","x":"W","y":"H"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-3,1]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13368990606109678244,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17494926338451345058,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7821977654068146599,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14079496619264986678,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10792166025753022402,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3670529450440935325,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11666664915283969027,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14057307926677215422,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5455777299776842371,{"persistent_metadata":{"reference":"Merge","display_name":"Beaded Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2780251074492832077,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14778750092903591172,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11194653561109699287,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1659518581611333812,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5555007473125503522,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14831840560430171946,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15395954548128560685,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5140869461760168364,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15982852655074258238,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10375238420217738812,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6666260895482068061,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7505360855062237520,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11616089678400336955,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10190227675276560561,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3627710206997006419,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4265165189651403984,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4307303572241320716,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,319]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14098374807212007572,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7385465194555106679,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,211]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17364155187784942740,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2698266912167150713,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4909350123806022131,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3802858053991775169,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"range_min":1.0,"min":0.01,"blank_assist":true,"mode":"Range","is_integer":false,"range_max":100.0},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4350324834849900949,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9529195152569434392,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2878992817082507910,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14012648643507848353,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16796171662855500935,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18319784717194273926,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11656581020969095354,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17378885078543074499,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4493274523708782092,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10264089084180279094,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4131094614457622424,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"blank_assist":true,"min":0.0,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","blank_assist":true,"is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10127467043900015225,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1713644030979611623,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5269304445610080925,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13302269488061286120,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9778375740427894463,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11590691579869262546,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11268046366284173800,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10424806499648491677,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4453139144069993994,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[907841922684377912,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10795820039540504703,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14946189826912398678,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7466034304713056391,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3971837674569123876,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15460109068588328521,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10689298484366290551,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9698363115186534174,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17967471489196302183,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3686761601672683183,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"blank_assist":true,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","is_integer":false,"unit":" px","blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5861306074868809692,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14675232891471617236,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16536768589601337644,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9863310024364795214,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[314278016428495768,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3170924135668664007,{"persistent_metadata":{"reference":"Merge","display_name":"Pointing Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15239301303367148581,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8375495949882478840,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5185036609290210853,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[952330505278607301,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[615144098061106242,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1162381870526064378,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10133176481349663495,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17945736750161448391,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9374264173303233490,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"mode":"Increment","is_integer":false,"unit":" px","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"mode":"Increment","blank_assist":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"mode":"Increment","is_integer":false,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","unit":" px","is_integer":false,"min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7447657690776686262,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","min":0.0,"blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"min":2.0,"mode":"Increment","is_integer":true,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"is_integer":false,"mode":"Increment","unit":" px","blank_assist":true,"min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"blank_assist":true,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4577638792388493935,{"persistent_metadata":{"reference":"Merge","display_name":"Head and Neck","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":78}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13975451746581400000,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15857077552290328068,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13475705179546695973,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[514796034658094296,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10928540355449103287,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2175432926627256613,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,328]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3649809135741361946,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12838133055063962839,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15498700602024283966,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15637103575662751567,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8091904580702893317,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12313564802550122052,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12473080738469616517,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8413863870096329943,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9425359632144678256,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6580280438672662494,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15735375935164094402,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11899713172487274471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9470742171134780193,{"persistent_metadata":{"reference":"Merge","display_name":"Dotted Skirt","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":81}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14993053984267866751,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2440895173483452224,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[431994205232245356,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,7]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8595304668947966919,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13014628586360765651,{"persistent_metadata":{"reference":"Merge","display_name":"Dotted Aura","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18207065424980079673,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","min":0.0,"is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":2.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"unit":" px","mode":"Increment","min":0.0},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"mode":"Increment","is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7922156219537051964,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11058365317860779469,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12531351117929704587,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6867142265138950838,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2422139482859833437,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2959546142916532439,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9954843247420111867,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","unit":"x","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8410534738018320047,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6416452251137958677,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16767482995096345179,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3165571685352930240,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1167210731467447244,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5278509881589546420,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17078740291337047697,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-31,208]}}},"network_metadata":null}}],[9371909264427723282,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1157261387411722141,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10586744777717861556,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9276497172451351253,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8698602280607307123,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12030171742672119253,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13045087323693407920,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8240895922641772563,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11021243031011826737,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15466714490303763249,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15286091228862934481,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2660652185019504730,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"min":0.0,"unit":" px","mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"mode":"Increment","blank_assist":true,"is_integer":true,"min":2.0},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":0.0,"is_integer":false,"mode":"Increment","unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"min":0.0,"is_integer":false,"unit":" px","blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3406722917122601552,{"persistent_metadata":{"reference":"Circle","display_name":"Circle","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Primary","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Radius","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-38,208]}}},"network_metadata":null}}],[13444661581815146533,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-17,97]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15656854169166220905,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4222034829755771252,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12428327489525325219,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8814059393325469059,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10421722418968896452,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15518174914032911052,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2659768650911099730,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"mode":"Increment","blank_assist":true,"unit":" px","is_integer":false},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"blank_assist":true,"min":2.0,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"unit":" px","blank_assist":true,"mode":"Increment","min":0.0,"is_integer":false},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"mode":"Increment","min":0.0,"unit":" px","is_integer":false,"blank_assist":true},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2044103368441997753,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6988349135757634271,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13594670583065022897,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"mode":"Increment","is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"is_integer":true,"mode":"Increment","min":2.0,"blank_assist":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"is_integer":false,"min":0.0,"unit":" px","mode":"Increment"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"is_integer":false,"blank_assist":true,"mode":"Increment","min":0.0,"unit":" px"},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12496143061817048445,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17133591775058457007,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2682920349304670808,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12761901161949743155,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12554368619682347699,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9740500978584792725,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16614450796751955858,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[541002100261582638,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2282726379014798660,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"min":0.0,"blank_assist":true,"unit":" px","is_integer":false,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"is_integer":true,"mode":"Increment"},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"min":0.0,"unit":" px","blank_assist":true,"mode":"Increment","is_integer":false},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"unit":" px","min":0.0,"mode":"Increment","blank_assist":true,"is_integer":false},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5471152581000334146,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8699675339613677057,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[581013017684525986,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16195626650123806176,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8543051864256131356,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4787732047489141819,{"persistent_metadata":{"reference":"Merge","display_name":"Tucked Arm","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":24}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15126865253122550765,{"persistent_metadata":{"reference":"Merge","display_name":"Dotted Bodice","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5213978458941436169,{"persistent_metadata":{"reference":"Scatter Points","display_name":"Scatter Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"min":0.01,"mode":"Range","range_max":100.0,"blank_assist":true,"is_integer":false,"range_min":1.0},"widget_override":"number","input_name":"Separation Disk Diameter","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"min":0.0,"mode":"Increment","blank_assist":true},"widget_override":"number","input_name":"Seed","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Poisson-Disk Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14894569344576297448,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8230694129617719636,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4078100635676202528,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14285767317419627814,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11804065810513502701,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17699121037850769131,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1272070255512697108,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16732130236852371275,{"persistent_metadata":{"reference":"Sample Polyline","display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The shape to be resampled and converted into a polyline."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Spacing","input_description":"Use a point sampling density controlled by a distance between, or specific number of, points."}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","min":0.0,"blank_assist":true,"mode":"Increment"},"widget_override":"number","input_name":"Separation","input_description":"Distance between each instance (exact if 'Adaptive Spacing' is disabled, approximate if enabled)."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"min":2.0,"mode":"Increment","is_integer":true},"widget_override":"number","input_name":"Quantity","input_description":"Number of points to place along the path."}},{"persistent_metadata":{"input_data":{"mode":"Increment","min":0.0,"blank_assist":true,"is_integer":false,"unit":" px"},"widget_override":"number","input_name":"Start Offset","input_description":"Exclude some distance from the start of the path before the first instance."}},{"persistent_metadata":{"input_data":{"blank_assist":true,"mode":"Increment","is_integer":false,"unit":" px","min":0.0},"widget_override":"number","input_name":"Stop Offset","input_description":"Exclude some distance from the end of the path after the last instance."}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Adaptive Spacing","input_description":"Round 'Separation' to a nearby value that divides into the path length evenly."}}],"output_names":["Vector"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Freeze Real Time","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[21,0]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Boundless Footprint","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[28,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Subpath Segment Lengths","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,7]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Memoize","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[14,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Sample Polyline","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1384427686127078856,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18279507457571359732,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15961046538654083626,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16137033772363318157,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3150436463719911922,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","is_integer":false,"unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":["Data"],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17324767436949538365,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9182448229950585507,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11025165626998987360,{"persistent_metadata":{"reference":"Copy to Points","display_name":"Copy to Points","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Points","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Instance","input_description":"Artwork to be copied and placed at each point.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Min","input_description":"Minimum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Max","input_description":"Maximum range of randomized sizes given to each instance.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Bias","input_description":"Bias for the probability distribution of randomized sizes (0 is uniform, negatives favor more of small sizes, positives favor more of large sizes).\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Scale Seed","input_description":"Seed to determine unique variations on all the randomized instance sizes.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation","input_description":"Range of randomized angles given to each instance, in degrees ranging from furthest clockwise to counterclockwise.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Random Rotation Seed","input_description":"Seed to determine unique variations on all the randomized instance angles.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[421715625023770179,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3970516859959908758,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10514847656270897393,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[737.4067596403,-6318.358748666366],"tilt":0.0,"zoom":0.6328125,"flip":false},"node_graph_to_viewport":[0.6328125,0.0,0.0,0.6328125,1457.0,-3418.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[3457800614598085282],[17426704671299246894],[2699408592782313690],[4493274523708782092],[14031411536409518176],[13263961817794116841],[835795066714655983],[11477846841203274509],[727544715487174952],[6480666310383891203],[15086626938904467381],[12994398686940961368],[15086626938904467381],[],[12994398686940961368],[],[5140869461760168364],[11677503666435782605],[776454851019809551],[],[10662978266497754900],[],[13201515093260842314],[],[3932608775253338292],[],[8090442493082590595],[],[17545135276965178247],[4332145463108161926],[],[4332145463108161926],[],[4332145463108161926],[],[11356586238302409958,10086073308516686449],[],[4332145463108161926],[],[3406722917122601552],[4332145463108161926],[],[4332145463108161926],[],[10086073308516686449],[17545135276965178247],[],[17078740291337047697],[3457800614598085282],[3457800614598085282,17426704671299246894],[3457800614598085282,17426704671299246894,2699408592782313690],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,15239301303367148581,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440,14480644719732559657],[3457800614598085282,17426704671299246894,2699408592782313690,14031411536409518176,13263961817794116841,835795066714655983,11477846841203274509,727544715487174952,6480666310383891203,10550662778443296023,13185163654003144011,3559656994078944914,12747708470463124971,898580338082782932,17099718003896986529,1510915657479425828,770786980744949903,5742628441455317378,12579808169500774530,862014397356527450,13790235862723082076,9531720291230511752,12792838691218304039,5102308641931177440,14480644719732559657,3601587624047636241],[],[17078740291337047697],[3406722917122601552],[],[9470742171134780193],[14883504161508594099],[],[13163272246010991228],[],[4332145463108161926],[17078740291337047697],[],[],[17078740291337047697,3406722917122601552],[],[9470742171134780193],[13368990606109678244],[9470742171134780193],[14883504161508594099],[421715625023770179],[3670529450440935325],[4265165189651403984],[]],"selection_redo_history":[]}}},"collapsed":[4422453582814483233,4577638792388493936,3170924135668664008,4787732047489141820,12062649793560663567,5455777299776842372,9470742171134780194,15126865253122550766,13014628586360765652],"commit_hash":"8fa46ba63a69bb5fa18a49194cf112d963a2d43b","document_ptz":{"pan":[-512.5,-515.648496025349],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":false,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/demo-artwork/valley-of-spires.graphite b/demo-artwork/valley-of-spires.graphite index 10ead73627..dc22dd4b90 100644 --- a/demo-artwork/valley-of-spires.graphite +++ b/demo-artwork/valley-of-spires.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":16815500381887058038,"output_index":0,"lambda":false}}],"nodes":[[202,{"inputs":[{"Node":{"node_id":206,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[404,{"inputs":[{"Node":{"node_id":402,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[93,{"inputs":[{"Node":{"node_id":94,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[851.1666666666667,668.5377104806669]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[39.677869315599935,39.67786931560005]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[155,{"inputs":[{"Node":{"node_id":159,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.7529412,"green":0.34117648,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.6431373,"green":0.31764707,"blue":0.21176471,"alpha":1.0}]],"gradient_type":"Linear","start":[0.9001916129448388,0.7881778212017586],"end":[0.8902470335613286,0.6662432828529555],"transform":[603.3437683597715,0.0,0.0,426.45833333333366,450.87499999999994,340.8749999999998]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.7529412,"green":0.34117648,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.6431373,"green":0.31764707,"blue":0.21176471,"alpha":1.0}]],"gradient_type":"Linear","start":[0.9001916129448388,0.7881778212017586],"end":[0.8902470335613286,0.6662432828529555],"transform":[603.3437683597715,0.0,0.0,426.45833333333366,450.87499999999994,340.8749999999998]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[497,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,1.0]],[1,[0.0,0.0]],[3,[1.0,1.0]],[2,[1.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8861964493222160710,{"inputs":[{"Node":{"node_id":16894739051789815098,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":0.0390625}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009],"transform":[1153.5000000000016,0.0,0.0,116.99999999999352,390.5000000000018,782.9999999999995]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":0.0390625}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009],"transform":[1153.5000000000016,0.0,0.0,116.99999999999352,390.5000000000018,782.9999999999995]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[248,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[6,[944.141561350963,527.7098765432099]],[14,[944.3024691358024,613.8333333333334]],[13,[955.9567901234568,612.4506172839507]],[5,[923.956790123457,545.6851851851852]],[17,[915.067901234568,618.7716049382716]],[16,[922.574074074074,606.9197530864199]],[18,[884.845679012346,621.141975308642]],[1,[866.5679012345681,572.641975308642]],[8,[1025.882716049383,576.7015952852717]],[2,[890.3765432098768,558.3271604938273]],[7,[986.8703703703704,552.6481481481483]],[19,[867.9970278920896,620.4835390946502]],[11,[991.9074074074076,607.667262767384]],[20,[850.4753086419754,600.0720164609053]],[9,[1026.277777777778,628.0555555555557]],[10,[999.8086419753088,626.6728395061729]],[3,[884.6481481481485,571.7592592592594]],[12,[965.0432098765434,605.3395061728396]],[15,[935.0185185185186,608.3024691358025]],[4,[898.8703703703707,571.5617283950618]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[10,10],[6,6],[2,2],[1,1],[17,17],[11,11],[13,13],[12,12],[20,20],[3,3],[8,8],[15,15],[18,18],[4,4],[14,14],[7,7],[19,19],[5,5],[9,9],[16,16]],"end_point":[[16,17],[7,8],[6,7],[11,12],[5,6],[10,11],[13,14],[19,20],[1,2],[12,13],[8,9],[4,5],[18,19],[17,18],[2,3],[15,16],[20,1],[3,4],[14,15],[9,10]],"handle_primary":[[4,[0.0,0.0]],[3,[0.0,0.0]],[18,[0.0,0.0]],[1,[0.0,0.0]],[10,[-2.96296296296282,-1.1851851851851052]],[16,[0.0,0.0]],[15,[0.0,0.0]],[9,[0.0,0.0]],[2,[0.0,0.0]],[12,[0.0,0.0]],[13,[0.0,0.0]],[8,[0.0,0.0]],[19,[-11.881115683584769,-0.11705532693190436]],[20,[0.0,0.0]],[17,[0.0,0.0]],[11,[0.0,0.0]],[6,[0.0,0.0]],[14,[0.0,0.0]],[5,[0.0,0.5925925925926094]],[7,[22.254029366644772,13.337995427526266]]],"handle_end":[[17,[20.5432098765433,0.1975308641974607]],[8,[0.0,0.0]],[11,[18.567901234567785,4.543209876543301]],[4,[-7.703703703703809,15.604938271604851]],[19,[0.0,0.0]],[16,[2.3703703703704377,-1.7777777777778283]],[14,[4.740740740740762,0.7901234567901838]],[10,[0.3950617283951487,3.117880051334623]],[5,[0.0,0.0]],[6,[-11.851851851851848,-16.036008230452808]],[18,[11.881115683584769,0.11705532693190436]],[3,[-8.69135802469134,0.39506172839503506]],[12,[2.7654320987655865,-2.7624450928566375]],[15,[5.135802469136024,0.9876543209877582]],[1,[-10.271604938271707,4.543209876543187]],[7,[0.0,0.0]],[9,[2.962962962963047,1.1851851851851052]],[20,[0.0,0.0]],[13,[2.1728395061727497,0.39506172839503506]],[2,[0.5925925925926094,-3.555555555555543]]],"stroke":[[2,0],[8,0],[9,0],[16,0],[11,0],[14,0],[17,0],[18,0],[15,0],[10,0],[5,0],[4,0],[19,0],[12,0],[7,0],[1,0],[3,0],[13,0],[6,0],[20,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[419,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.0]],[4,[0.0,1.0]],[1,[0.0,0.0]],[3,[1.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[2,2],[4,4]],"end_point":[[1,2],[4,1],[2,3],[3,4]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[77,{"inputs":[{"Node":{"node_id":78,"output_index":0,"lambda":false}},{"Node":{"node_id":448,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[108,{"inputs":[{"Node":{"node_id":109,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[858.7905598373798,601.6041802310946]},"exposed":false}},{"Value":{"tagged_value":{"F64":1.2246469000000002e-16},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.1014123874504275,0.11427520552998474]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.3799770244301692e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[450,{"inputs":[{"Node":{"node_id":451,"output_index":0,"lambda":false}},{"Node":{"node_id":467,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[481,{"inputs":[{"Node":{"node_id":485,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.8980392,"green":0.67058825,"blue":0.28235295,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.3764706,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5563229660866629,0.005130077289715984],"end":[0.5563229660866629,0.9884201225302],"transform":[105.93178001350952,0.0,0.0,640.7349028554129,1148.0677179400443,125.71298042613309]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.8980392,"green":0.67058825,"blue":0.28235295,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.3764706,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5563229660866629,0.005130077289715984],"end":[0.5563229660866629,0.9884201225302],"transform":[105.93178001350952,0.0,0.0,640.7349028554129,1148.0677179400443,125.71298042613309]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[310,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[5,[710.9477975918305,613.6358024691357]],[1,[744.3996087994717,586.9732002235432]],[3,[698.0912208504803,600.3792866941013]],[7,[779.7592592592597,612.6204267490609]],[4,[706.1680384087791,607.8415637860082]],[2,[734.9571457603006,587.5194584158918]],[6,[729.3449931412895,610.3875171467763]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[4,4],[3,3],[2,2],[7,7],[5,5],[1,1],[6,6]],"end_point":[[2,3],[6,7],[1,2],[3,4],[7,1],[5,6],[4,5]],"handle_primary":[[7,[0.0,0.0]],[6,[15.119646395366544,2.853223593964344]],[1,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[3,[0.0,0.0]],[2,[0.0,0.0]],[5,[7.452522481329197,2.721536351166037]]],"handle_end":[[2,[6.496570644718986,-11.149519890260422]],[5,null],[7,[9.28638926992835,13.56378600823075]],[6,[0.0,0.0]],[3,[-2.494608558449272,-5.331900091455282]],[1,[0.0,0.0]],[4,null]],"stroke":[[5,0],[3,0],[2,0],[4,0],[1,0],[6,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[170,{"inputs":[{"Node":{"node_id":171,"output_index":0,"lambda":false}},{"Node":{"node_id":196,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4913361824430066698,{"inputs":[{"Node":{"node_id":11807598261442997948,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14080831508667499826,{"inputs":[{"Node":{"node_id":11377169273880889832,"output_index":0,"lambda":false}},{"Node":{"node_id":14113040319560793790,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[232,{"inputs":[{"Node":{"node_id":236,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[434,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5926327057682128,-0.43396226415094336]],[4,[0.4436233919998075,1.0]],[2,[0.8076864692090735,-0.4339622641509434]],[3,[1.0069833844920426,0.9999999999999988]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[2,3],[1,2],[4,1],[3,4]],"handle_primary":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[1,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[465,{"inputs":[{"Node":{"node_id":469,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.8784314,"green":0.63529414,"blue":0.24313726,"alpha":1.0}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.543973941368078,0.19174161896974656],"end":[0.373641330960254,0.5573628465419693],"transform":[302.3829616698968,-53.04285523745623,140.87168719958515,803.0713618290636,568.5525435223506,63.555059935554134]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.8784314,"green":0.63529414,"blue":0.24313726,"alpha":1.0}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.543973941368078,0.19174161896974656],"end":[0.373641330960254,0.5573628465419693],"transform":[302.3829616698968,-53.04285523745623,140.87168719958515,803.0713618290636,568.5525435223506,63.555059935554134]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7148230379224894975,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[11,[504.00617283950623,588.9444444444446]],[17,[448.3683127572017,617.6340115836006]],[4,[500.77983539094663,544.0208428593207]],[6,[490.17901234567904,556.0043819539711]],[1,[506.7057613168725,531.9348803536052]],[5,[500.4506172839507,547.5105547934772]],[10,[496.50000000000006,582.6234567901236]],[12,[513.3888888888889,585.5544307531777]],[7,[495.90740740740733,567.882982777016]],[18,[438.2283950617284,585.5544307531777]],[3,[488.5329218106997,551.6587029416252]],[13,[516.8017832647463,593.4437585733884]],[8,[502.6234567901235,563.1154930650816]],[16,[478.9197530864198,618.6875095259874]],[2,[497.8388203017833,534.5393613778391]],[15,[496.30246913580254,612.3006782502672]],[9,[510.261316872428,573.2078189300412]],[20,[480.89506172839504,532.4323654930657]],[14,[496.49999999999994,603.4117893613783]],[19,[468.05555555555594,550.6710486206383]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[10,10],[12,12],[18,18],[16,16],[3,3],[19,19],[2,2],[8,8],[20,20],[13,13],[14,14],[5,5],[1,1],[6,6],[4,4],[17,17],[11,11],[7,7],[15,15],[9,9]],"end_point":[[13,14],[14,15],[17,18],[8,9],[5,6],[4,5],[18,19],[1,2],[15,16],[3,4],[19,20],[10,11],[20,1],[6,7],[11,12],[9,10],[2,3],[16,17],[7,8],[12,13]],"handle_primary":[[10,[0.0,0.0]],[20,[7.46503467504715,-4.02781143068205]],[4,null],[19,[0.0,0.0]],[13,[0.0,0.0]],[15,[0.0,0.0]],[8,[0.0,0.0]],[17,[0.0,0.0]],[1,[0.0,0.0]],[18,[0.0,0.0]],[3,[4.565157750342848,-4.301783264746064]],[12,[0.0,0.0]],[14,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[7,[0.0,0.0]],[9,[0.0,0.0]],[16,[0.0,0.0]],[6,[0.0,0.0]],[5,[-6.737997256515712,3.1824417009599983]],[11,[0.0,0.0]]],"handle_end":[[20,[0.0,0.0]],[9,[6.716049382716108,-8.49382716049422]],[17,[0.0,0.0]],[10,[-2.765432098765416,-3.555555555555543]],[6,[-2.508333333333439,-2.0902777777778283]],[5,[0.0,0.0]],[13,[0.0,0.0]],[1,[3.4386245260820374,-1.250408918575317]],[18,[0.0,0.0]],[4,null],[11,[-3.851851851851848,0.7581344568814075]],[14,[-0.7901234567900701,-4.938271604938336]],[19,[-3.394604481024089,3.2873037646699004]],[15,[0.0,0.0]],[2,[0.27087722942241044,-5.120145445603839]],[8,[-1.7777777777777717,-5.728395061728406]],[3,null],[12,[-0.39506172839503506,-1.975308641975289]],[16,[0.0,0.0]],[7,[-3.6872427983540206,1.4485596707820605]]],"stroke":[[8,0],[6,0],[12,0],[19,0],[3,0],[14,0],[9,0],[16,0],[2,0],[11,0],[7,0],[1,0],[10,0],[13,0],[17,0],[20,0],[5,0],[15,0],[18,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[325,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"delta":[[1,[744.0,592.0]],[9,[677.1666666666666,609.1666666666666]],[4,[695.8333333333333,239.16666666666663]],[3,[708.5,335.16666666666663]],[5,[660.5,187.83333333333331]],[8,[631.8333333333333,608.5]],[7,[619.8333333333333,577.1666666666666]],[2,[733.1666666666666,489.16666666666663]],[6,[619.8333333333333,207.83333333333331]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"start_point":[[6,6],[7,7],[4,4],[9,9],[8,8],[3,3],[2,2],[1,1],[5,5]],"end_point":[[8,9],[4,5],[5,6],[9,1],[1,2],[3,4],[2,3],[7,8],[6,7]],"handle_primary":[[5,[-36.0,-6.666666666666686]],[9,[18.66666666666663,-5.3333333333332575]],[8,[12.666666666666742,4.666666666666629]],[1,[0.0,0.0]],[3,[-6.6666666666667425,-57.333333333333314]],[2,[-4.666666666666629,-50.666666666666686]],[6,[0.0,16.666666666666686]],[4,[-3.3333333333332575,-21.33333333333331]],[7,[0.0,12.666666666666742]]],"handle_end":[[7,[-12.666666666666742,-4.666666666666629]],[6,[0.0,-12.666666666666742]],[9,[0.0,0.0]],[8,[-18.66666666666663,5.3333333333332575]],[2,[6.6666666666667425,57.333333333333314]],[5,[0.0,-16.666666666666686]],[3,[3.3333333333332575,21.33333333333331]],[4,[36.0,6.666666666666657]],[1,[4.666666666666629,50.66666666666663]]],"stroke":[[4,0],[2,0],[6,0],[1,0],[9,0],[7,0],[8,0],[3,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":9}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[496,{"inputs":[{"Node":{"node_id":497,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,600.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11377169273880889832,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14433811491576609500,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11891167879168294182,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[112.52194787379976,598.7990397805213]],[3,[148.91152263374485,614.1625514403293]],[4,[126.900438957476,611.0020576131687]],[5,[118.93072702331962,598.7990397805213]],[6,[119.98422496570645,609.4218106995885]],[2,[104.00617283950618,624.6097393689986]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[2,2],[4,4],[6,6],[1,1],[5,5]],"end_point":[[2,3],[5,6],[6,1],[1,2],[4,5],[3,4]],"handle_primary":[[2,[0.0,0.0]],[5,[0.0,0.0]],[4,[-2.058260034882977,-0.6051267923739942]],[1,[-2.370370370370395,22.25514403292175]],[3,null],[6,[-4.477366255144005,-1.843621399176868]]],"handle_end":[[6,[0.0,0.0]],[5,[0.7023319615912413,-1.9314128943758533]],[4,[0.0,0.0]],[2,[-21.11385459533605,1.053497942386798]],[3,null],[1,[0.0,0.0]]],"stroke":[[5,0],[4,0],[3,0],[2,0],[6,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[76,{"inputs":[{"Node":{"node_id":77,"output_index":0,"lambda":false}},{"Node":{"node_id":16164610528699022118,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[418,{"inputs":[{"Node":{"node_id":419,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[83.16666666666677,614.179527199694]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[294.3945373546583,138.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[449,{"inputs":[{"Node":{"node_id":450,"output_index":0,"lambda":false}},{"Node":{"node_id":6015109908395573189,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14113040319560793790,{"inputs":[{"Node":{"node_id":9603838021022368374,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[138,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[116.38477366255144,723.5946502057614]],[3,[90.17901234567904,708.7139917695472]],[1,[126.55144032921808,714.7983539094649]],[2,[105.84979423868312,685.0102880658435]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[3,3],[1,1]],"end_point":[[3,4],[4,1],[1,2],[2,3]],"handle_primary":[[3,[-2.4237705319430347,10.543401813951732]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[4,[3.6604938271605647,11.166666666666742]],[2,[2.6337448559670804,-11.456790123456472]],[1,[16.460905349794245,13.695473251028716]]],"stroke":[[4,0],[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[169,{"inputs":[{"Node":{"node_id":170,"output_index":0,"lambda":false}},{"Node":{"node_id":190,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[200,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[2,[993.9814814814814,530.7222222222222]],[6,[988.3518518518518,565.8333333333333]],[3,[974.574074074074,539.3148148148148]],[10,[1010.492379210486,553.0791800030486]],[4,[972.0555555555557,547.0185185185185]],[9,[1001.2407407407406,568.2037037037037]],[1,[1004.392496062592,536.8475080018289]],[5,[990.3271604938273,558.7222222222222]],[8,[994.0802469135804,561.8388203017832]],[7,[988.9444444444443,571.9567901234568]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[6,6],[9,9],[4,4],[2,2],[7,7],[3,3],[5,5],[1,1],[8,8],[10,10]],"end_point":[[9,10],[2,3],[10,1],[7,8],[1,2],[6,7],[3,4],[5,6],[4,5],[8,9]],"handle_primary":[[8,[0.0,0.0]],[4,[5.818749999999909,2.0456767733078323]],[9,[0.0,0.0]],[10,[0.0,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[5,[1.1368683772161605e-13,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[6,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[9,[0.0,0.0]],[7,[0.0,0.0]],[3,[5.171433893884796,-5.185320665887616]],[8,[1.1368683772161605e-13,0.0]],[10,[2.600823045267589,7.538372631948732]]],"stroke":[[3,0],[2,0],[10,0],[4,0],[7,0],[5,0],[8,0],[9,0],[1,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6015109908395573189,{"inputs":[{"Node":{"node_id":459,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-8.0,2.6666666666000083]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[402,{"inputs":[{"Node":{"node_id":406,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15552693212536925398,{"inputs":[{"Node":{"node_id":1598976462838094167,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992],"transform":[596.6666666666671,0.0,0.0,669.6474899687091,706.9999999999995,7.352510031290876]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992],"transform":[596.6666666666671,0.0,0.0,669.6474899687091,706.9999999999995,7.352510031290876]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[262,{"inputs":[{"Node":{"node_id":266,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[433,{"inputs":[{"Node":{"node_id":434,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[628.6154039265571,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[122,{"inputs":[{"Node":{"node_id":126,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.8261898755429384,0.6803505808618764],"end":[0.9730393010117852,0.6150128281109604],"transform":[674.1599409321643,0.0,0.0,374.9746351607879,311.0158823052205,208.88578915988776]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.8261898755429384,0.6803505808618764],"end":[0.9730393010117852,0.6150128281109604],"transform":[674.1599409321643,0.0,0.0,374.9746351607879,311.0158823052205,208.88578915988776]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7135480377162524224,{"inputs":[{"Node":{"node_id":487,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[28.82327697714288,-49.808276940773226]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.057504143999955744},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[184,{"inputs":[{"Node":{"node_id":188,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[75,{"inputs":[{"Node":{"node_id":76,"output_index":0,"lambda":false}},{"Node":{"node_id":161,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[277,{"inputs":[{"Node":{"node_id":1453710883947581217,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.92156863,"green":0.7294118,"blue":0.2784314,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[1.0246769250512615,0.027819435424882025],"end":[0.2667933279762451,0.9665428076110212],"transform":[152.18301372607758,-26.46547846507388,122.86581252135512,706.5086564778592,1104.6435199127652,59.354620942005326]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.92156863,"green":0.7294118,"blue":0.2784314,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[1.0246769250512615,0.027819435424882025],"end":[0.2667933279762451,0.9665428076110212],"transform":[152.18301372607758,-26.46547846507388,122.86581252135512,706.5086564778592,1104.6435199127652,59.354620942005326]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[448,{"inputs":[{"Node":{"node_id":449,"output_index":0,"lambda":false}},{"Node":{"node_id":455,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11155094820673141470,{"inputs":[{"Node":{"node_id":97478832511923699,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625],"transform":[139.824941251317,-21.014379437271643,45.64496496886203,416.4689172758892,1005.0,432.99999999999955]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625],"transform":[139.824941251317,-21.014379437271643,45.64496496886203,416.4689172758892,1005.0,432.99999999999955]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17257434333682934071,{"inputs":[{"Node":{"node_id":13606781735926093266,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[168,{"inputs":[{"Node":{"node_id":169,"output_index":0,"lambda":false}},{"Node":{"node_id":184,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[230,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.03624142718978522,-0.003682959682299257]],[2,[0.935534758874228,0.06746859421299994]],[3,[1.134036317002156,1.0722882682186752]],[4,[0.2700473236113544,1.0652669412541609]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[2,0],[4,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[90,{"inputs":[{"Node":{"node_id":93,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5999119243817099,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.3201759714645238,0.5902044022091868],"end":[1.025282605251574,0.18308301136073535],"transform":[138.98607005532313,0.0,0.0,138.98607005532352,1193.5000000000005,570.5540117570772]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5999119243817099,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.3201759714645238,0.5902044022091868],"end":[1.025282605251574,0.18308301136073535],"transform":[138.98607005532313,0.0,0.0,138.98607005532352,1193.5000000000005,570.5540117570772]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[463,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-4.833333333333348,600.0555555555555]],[2,[-4.833333333333332,345.83333333333326]],[3,[80.05555555555559,484.94444444444446]],[4,[129.38888888888889,628.0555555555557]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[3,4],[2,3],[4,1],[1,2]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[32.038317168599576,69.73045501401077]]],"handle_end":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[-45.33333333333338,-98.66666666666669]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[292,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":312,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17414691604179185270,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[539.3641975308641,608.7633744855966]],[2,[530.2777777777771,564.9115226337452]],[1,[546.1069958847736,566.7818930041152]],[4,[547.6604938271604,606.7880658436213]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[323,{"inputs":[{"Node":{"node_id":321,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[214,{"inputs":[{"Node":{"node_id":218,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6272196533192700024,{"inputs":[{"Node":{"node_id":481,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[28.815503095243457,-49.74366671015599]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.057504143999955744},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[74,{"inputs":[{"Node":{"node_id":75,"output_index":0,"lambda":false}},{"Node":{"node_id":81,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[105,{"inputs":[{"Node":{"node_id":108,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7721675713724807,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.401555786122616,0.773953065673463],"end":[0.898982212168407,0.4370729973098963],"transform":[490.52480371748175,6.007196307749977e-14,0.0,325.3699488483585,982.0269268305848,323.7895812222803]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7721675713724807,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.401555786122616,0.773953065673463],"end":[0.898982212168407,0.4370729973098963],"transform":[490.52480371748175,6.007196307749977e-14,0.0,325.3699488483585,982.0269268305848,323.7895812222803]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17173383864410319040,{"inputs":[{"Node":{"node_id":15277819403265847073,"output_index":0,"lambda":false}},{"Node":{"node_id":15552693212536925398,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[478,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7135480377162524224,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1635416892097245588,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":11472292186872186521,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6926019345498826421,{"inputs":[{"Node":{"node_id":989999757220954936,"output_index":0,"lambda":false}},{"Node":{"node_id":17020523203516467057,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17911294938421300842,{"inputs":[{"Node":{"node_id":17414691604179185270,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[400,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[7,[411.7592592592593,261.83333333333337]],[5,[482.47530864197535,316.35185185185185]],[12,[399.3148148148148,564.0555555555555]],[11,[378.8703703703703,545.3888888888889]],[8,[381.7345679012346,268.5493827160494]],[1,[531.0946502057612,568.230452674897]],[6,[457.9814814814815,279.4135802469136]],[2,[513.0925925925925,455.6111111111111]],[3,[499.1666666666666,380.94444444444446]],[9,[378.57407407407413,324.0555555555556]],[4,[487.3148148148147,333.24074074074076]],[10,[378.8703703703703,472.7962962962963]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[6,6],[4,4],[1,1],[11,11],[2,2],[8,8],[10,10],[3,3],[7,7],[9,9],[5,5],[12,12]],"end_point":[[4,5],[5,6],[10,11],[12,1],[3,4],[11,12],[9,10],[6,7],[1,2],[8,9],[2,3],[7,8]],"handle_primary":[[5,[-2.1728395061728065,-7.703703703703695]],[8,[-6.716049382716051,13.62962962962962]],[7,[-5.925925925925924,-0.9876543209876444]],[9,[0.1975308641974607,16.395061728395035]],[11,[0.0,6.518518518518476]],[6,[-20.345679012345727,-8.691358024691397]],[10,[-0.8888888888888573,38.81481481481478]],[3,[-1.7777777777777717,-12.444444444444455]],[1,[0.0,0.0]],[2,[-6.51851851851859,-35.55555555555554]],[12,[22.22222222222223,-1.1851851851852189]],[4,[0.0,0.0]]],"handle_end":[[1,[6.51851851851859,35.55555555555554]],[12,[-37.99794238683137,-21.306584362139915]],[11,[-22.22222222222223,1.1851851851852189]],[10,[0.0,-6.518518518518476]],[6,[5.925925925925924,0.9876543209876444]],[5,[20.345679012345784,8.691358024691397]],[3,[8.888888888888971,23.407407407407447]],[7,[6.716049382716051,-13.62962962962962]],[8,[-0.1975308641974607,-16.395061728395035]],[9,[0.8888888888888573,-38.81481481481478]],[4,[2.1728395061728065,7.703703703703695]],[2,[1.7777777777777717,12.444444444444455]]],"stroke":[[7,0],[11,0],[1,0],[6,0],[12,0],[3,0],[4,0],[9,0],[10,0],[5,0],[8,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[229,{"inputs":[{"Node":{"node_id":227,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[829.8099807176391,565.8945401302792]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.958532},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.920156284886552,12.362329004080864]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136304,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4454263454059119441,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[4,[0.0,0.5]],[2,[1.0,0.5]],[3,[0.5,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[3,4],[2,3],[4,1],[1,2]],"handle_primary":[[1,[0.27589238888950707,0.0]],[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[260,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[0.4707515606101555,1.0016674771193048]],[1,[-0.06772020100134477,-0.27125764892979654]],[3,[1.1461889241405476,1.0977967891967286]],[2,[0.8103689541744266,-0.2611110184526325]],[5,[0.05417500861004592,0.8211321210533473]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[5,5],[3,3],[2,2],[4,4]],"end_point":[[2,3],[5,1],[3,4],[1,2],[4,5]],"handle_primary":[[5,[0.0,0.0]],[1,[0.0,0.0]],[3,[-2.220446049250313e-16,-2.220446049250313e-16]],[2,[0.0,0.0]],[4,[-0.4165765520001096,-0.1805353560659575]]],"handle_end":[[5,[0.0,0.0]],[2,[0.0,0.0]],[4,null],[3,[0.2875939062231115,0.06333186265853907]],[1,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[120,{"inputs":[{"Node":{"node_id":1635416892097245588,"output_index":0,"lambda":false}},{"Node":{"node_id":140,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10486443711686704000,{"inputs":[{"Node":{"node_id":5714505144727602368,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.15803798551484238,0.5113172122965266],"end":[0.8867475285247997,0.49951059174236745],"transform":[86.14721272187913,-121.25388422552253,404.54387368785456,312.49837227690176,602.5352222980036,467.4253353064524]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.15803798551484238,0.5113172122965266],"end":[0.8867475285247997,0.49951059174236745],"transform":[86.14721272187913,-121.25388422552253,404.54387368785456,312.49837227690176,602.5352222980036,467.4253353064524]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[291,{"inputs":[{"Node":{"node_id":292,"output_index":0,"lambda":false}},{"Node":{"node_id":306,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[493,{"inputs":[{"Node":{"node_id":496,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.16152954,"green":0.5000886,"blue":0.5234375,"alpha":1.0}],[0.33108336235841895,{"red":0.2509804,"green":0.54509807,"blue":0.5176471,"alpha":1.0}],[0.6158954287284122,{"red":0.48235294,"green":0.5568628,"blue":0.4,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.49411765,"blue":0.23137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5224609375,-0.000170829498767594],"end":[0.5224609375,0.9116247106204544],"transform":[1024.0,0.0,0.0,595.075070611153,559.0,78.92492938884703]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.16152954,"green":0.5000886,"blue":0.5234375,"alpha":1.0}],[0.33108336235841895,{"red":0.2509804,"green":0.54509807,"blue":0.5176471,"alpha":1.0}],[0.6158954287284122,{"red":0.48235294,"green":0.5568628,"blue":0.4,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.49411765,"blue":0.23137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5224609375,-0.000170829498767594],"end":[0.5224609375,0.9116247106204544],"transform":[1024.0,0.0,0.0,595.075070611153,559.0,78.92492938884703]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11807598261442997948,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[527.0733882030179,547.0898491083676]],[5,[541.9979423868313,611.7921810699589]],[4,[495.38065843621376,614.5137174211251]],[3,[481.882716049383,533.8333333333337]],[2,[500.121399176955,531.6385459533608]],[6,[530.2777777777774,564.9115226337451]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[5,5],[4,4],[1,1],[6,6],[3,3]],"end_point":[[2,3],[1,2],[6,1],[5,6],[4,5],[3,4]],"handle_primary":[[3,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[6,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[16.644617182340255,-0.4357059391355733]],[6,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[6,0],[1,0],[5,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[182,{"inputs":[{"Node":{"node_id":12768614558324028960,"output_index":0,"lambda":false}},{"Node":{"node_id":268,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3930114406985796561,{"inputs":[{"Node":{"node_id":4454263454059119441,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[12875520257830460085,{"inputs":[{"Node":{"node_id":11891167879168294182,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9778003574990260202,{"inputs":[{"Node":{"node_id":6926019345498826421,"output_index":0,"lambda":false}},{"Node":{"node_id":5364427239360309137,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[244,{"inputs":[{"Node":{"node_id":248,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[415,{"inputs":[{"Node":{"node_id":418,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}],[0.5,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.80859375}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.0}]],"gradient_type":"Radial","start":[0.30473369160482133,-0.27613184386946],"end":[0.66690549049424,0.16136781742013184],"transform":[294.3945373546583,0.0,0.0,138.32047280030588,578.6666666666667,646.679527199694]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}],[0.5,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.80859375}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.0}]],"gradient_type":"Radial","start":[0.30473369160482133,-0.27613184386946],"end":[0.66690549049424,0.16136781742013184],"transform":[294.3945373546583,0.0,0.0,138.32047280030588,578.6666666666667,646.679527199694]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[275,{"inputs":[{"Node":{"node_id":11427960919145580782,"output_index":0,"lambda":false}},{"Node":{"node_id":283,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[446,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.0]],[3,[1.0,1.0]],[1,[0.0,0.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[477,{"inputs":[{"Node":{"node_id":478,"output_index":0,"lambda":false}},{"Node":{"node_id":6272196533192700024,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[306,{"inputs":[{"Node":{"node_id":310,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[166,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":393,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11472292186872186521,{"inputs":[{"Node":{"node_id":4452902364641883403,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-1367.319046874664,107.29818643577867]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.24444444444444,0.8618453375356869]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[88,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":96,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[259,{"inputs":[{"Node":{"node_id":257,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[894.1788584769913,562.0196920444174]},"exposed":false}},{"Value":{"tagged_value":{"F64":-2.3255084},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[15.813534861768243,49.86845076365074]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136165,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[430,{"inputs":[{"Node":{"node_id":433,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.71875,"green":0.37165833,"blue":0.20214844,"alpha":1.0}],[0.09210526315789476,{"red":0.7254902,"green":0.41960785,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.79607844,"green":0.49411765,"blue":0.22745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0],"transform":[261.96239650888936,0.0,0.0,227.99999999999997,1386.0376034911103,614.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.71875,"green":0.37165833,"blue":0.20214844,"alpha":1.0}],[0.09210526315789476,{"red":0.7254902,"green":0.41960785,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.79607844,"green":0.49411765,"blue":0.22745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0],"transform":[261.96239650888936,0.0,0.0,227.99999999999997,1386.0376034911103,614.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[119,{"inputs":[{"Node":{"node_id":120,"output_index":0,"lambda":false}},{"Node":{"node_id":134,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[290,{"inputs":[{"Node":{"node_id":291,"output_index":0,"lambda":false}},{"Node":{"node_id":300,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[321,{"inputs":[{"Node":{"node_id":325,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.9254902,"green":0.7176471,"blue":0.28627452,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6317852697063873,0.02415325870852081],"end":[0.05910622380623476,0.9861828395407052],"transform":[279.388605442177,0.0,0.0,960.4694267308416,951.4863945578228,120.80153345454534]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.9254902,"green":0.7176471,"blue":0.28627452,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6317852697063873,0.02415325870852081],"end":[0.05910622380623476,0.9861828395407052],"transform":[279.388605442177,0.0,0.0,960.4694267308416,951.4863945578228,120.80153345454534]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5364427239360309137,{"inputs":[{"Node":{"node_id":12325841371509826180,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[181,{"inputs":[{"Node":{"node_id":182,"output_index":0,"lambda":false}},{"Node":{"node_id":262,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14335659566300901430,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14579754335592291854,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[212,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[5,[977.4876543209878,545.4876543209878]],[3,[925.6111111111112,527.7098765432099]],[7,[984.9112747301664,495.90740740740745]],[4,[922.2777777777778,549.4629629629628]],[2,[948.746913580247,472.10493827160496]],[6,[990.3271604938273,526.5246913580247]],[1,[957.8271604938273,462.1234567901235]],[8,[965.6358024691358,465.1913580246914]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[3,3],[6,6],[8,8],[5,5],[4,4],[7,7],[1,1],[2,2]],"end_point":[[3,4],[6,7],[4,5],[8,1],[7,8],[1,2],[5,6],[2,3]],"handle_primary":[[6,[0.0,0.0]],[4,[0.0,0.0]],[7,[0.0,0.0]],[3,[-2.469135802469168,9.975308641975287]],[1,[0.0,0.0]],[5,[0.0,0.0]],[2,[-6.123456790123441,10.962962962962932]],[8,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[6.123456790123441,-10.96296296296299]],[5,[0.0,0.0]],[7,[7.407407407407391,6.814814814814838]],[2,[2.469135802468827,-9.975308641975287]],[8,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[7,0],[1,0],[5,0],[4,0],[6,0],[3,0],[8,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14433811491576609500,{"inputs":[{"Node":{"node_id":9570557034533539493,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[274,{"inputs":[{"Node":{"node_id":275,"output_index":0,"lambda":false}},{"Node":{"node_id":277,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[445,{"inputs":[{"Node":{"node_id":446,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[83.1666666666668,614.1795271996941]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[941.3333333333331,154.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[103,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":111,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[134,{"inputs":[{"Node":{"node_id":138,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[165,{"inputs":[{"Node":{"node_id":166,"output_index":0,"lambda":false}},{"Node":{"node_id":16821952675128396603,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10278740841813346388,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[2,[734.9571457603006,587.5194584158918]],[3,[698.0912208504803,600.3792866941013]],[1,[744.3996087994717,586.9732002235432]],[4,[706.1680384087791,607.8415637860082]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]],[5,[710.9477975918305,613.6358024691357]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[4,4],[7,7],[2,2],[5,5],[3,3],[6,6],[1,1]],"end_point":[[5,6],[4,5],[6,7],[7,1],[1,2],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[6,[15.119646395366544,2.853223593964344]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]]],"handle_end":[[4,null],[3,[-2.494608558449272,-5.331900091455282]],[5,null],[7,[9.28638926992835,13.56378600823075]],[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[6,[0.0,0.0]]],"stroke":[[6,0],[4,0],[3,0],[5,0],[7,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[196,{"inputs":[{"Node":{"node_id":200,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[398,{"inputs":[{"Node":{"node_id":396,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[227,{"inputs":[{"Node":{"node_id":230,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[87,{"inputs":[{"Node":{"node_id":88,"output_index":0,"lambda":false}},{"Node":{"node_id":90,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[118,{"inputs":[{"Node":{"node_id":119,"output_index":0,"lambda":false}},{"Node":{"node_id":128,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[491,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[851.3888888888889,542.2777777777777]],[6,[908.5000000000005,581.0432098765432]],[1,[903.3333333333331,336.44444444444446]],[3,[858.2777777777777,377.8333333333333]],[2,[867.3888888888889,344.05555555555554]],[5,[876.9444444444443,582.1008216600221]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4],[6,6],[5,5]],"end_point":[[2,3],[6,1],[4,5],[5,6],[3,4],[1,2]],"handle_primary":[[3,[-0.4444444444444571,14.444444444444455]],[4,[-2.888888888888914,28.66666666666663]],[5,[0.0,0.0]],[6,[0.0,0.0]],[2,[-9.555555555555657,12.444444444444455]],[1,[0.0,0.0]]],"handle_end":[[1,[9.555555555555657,-12.444444444444455]],[4,[0.0,0.0]],[2,[0.4444444444444571,-14.444444444444455]],[6,[0.16666666666685614,-0.2777777777777146]],[5,[0.0,0.0]],[3,[2.888888888888914,-28.66666666666663]]],"stroke":[[3,0],[5,0],[1,0],[6,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[180,{"inputs":[{"Node":{"node_id":181,"output_index":0,"lambda":false}},{"Node":{"node_id":256,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11345069121502219134,{"inputs":[{"Node":{"node_id":12068777759187203228,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[413,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":436,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[242,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[842.2716049382715,561.8070416095107]],[3,[819.0679012345677,520.2695473251028]],[4,[812.5713305898489,549.7821216278006]],[5,[837.913808870599,583.4355281207133]],[2,[821.8187014174667,518.4112940100595]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2],[5,5]],"end_point":[[3,4],[5,1],[2,3],[1,2],[4,5]],"handle_primary":[[5,[0.0,0.0]],[3,[-1.4046639231823974,2.1801554641060648]],[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[10.88614540466392,16.621856424325642]],[2,[1.4046639231823974,-2.1801554641060648]],[5,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[5,0],[4,0],[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[102,{"inputs":[{"Node":{"node_id":103,"output_index":0,"lambda":false}},{"Node":{"node_id":105,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[475,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[46.49999999999994,177.5]],[1,[22.827133919383556,312.5]],[6,[102.27777777777776,528.0555555555553]],[5,[172.5,512.0555555555555]],[3,[81.20964791952444,29.23708276177412]],[4,[85.15294924554185,45.49314128943759]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[1,1],[2,2],[5,5],[4,4],[3,3]],"end_point":[[5,6],[3,4],[2,3],[4,5],[6,1],[1,2]],"handle_primary":[[5,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]],[2,[15.777777777777828,-79.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[-14.820678206547353,74.20776200602205]],[6,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0],[3,0],[6,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[304,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[4,[699.4958847736627,594.497256515775]],[2,[658.574074074074,609.6851851851851]],[3,[680.2695473251027,600.730452674897]],[10,[712.0500685871053,614.4420508944315]],[6,[717.5809327846364,593.2681755829904]],[8,[708.7139917695473,601.783950617284]],[7,[702.5246913580245,600.8931773149878]],[9,[713.2108672458469,610.5533455265964]],[1,[645.3333333333333,614.013717421125]],[5,[744.3996087994716,586.9732002235431]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[10,10],[5,5],[6,6],[7,7],[8,8],[4,4],[9,9],[1,1],[3,3],[2,2]],"end_point":[[2,3],[10,1],[9,10],[5,6],[1,2],[3,4],[7,8],[4,5],[6,7],[8,9]],"handle_primary":[[5,[0.0,0.0]],[1,[0.0,0.0]],[8,[0.0,0.0]],[9,[0.0,0.0]],[10,[-58.35223289132739,3.851425709744945]],[3,[7.374485596707928,-0.92181069958815]],[6,[-10.886145404663694,2.8971193415636662]],[4,[4.444444444444002,-5.662551440328798]],[7,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]]],"handle_end":[[9,[-0.08779149519853036,-2.2109123484780184]],[5,[10.516302710276136,-2.79869346321857]],[10,null],[3,[-1.6866098186769705,2.1488658430550913]],[7,[-2.89711934156378,-1.975308641975289]],[4,[-5.794238683127446,-2.0192043895747247]],[8,[-2.5361987501905787,-3.706752019509281]],[2,[-6.174173455107166,0.7717716818881399]],[6,[0.0,0.0]],[1,[-4.740740740740762,4.148148148148152]]],"stroke":[[1,0],[4,0],[7,0],[2,0],[8,0],[10,0],[3,0],[5,0],[9,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[164,{"inputs":[{"Node":{"node_id":165,"output_index":0,"lambda":false}},{"Node":{"node_id":318,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[226,{"inputs":[{"Node":{"node_id":229,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.24641848672125644,0.5269240260497682],"end":[0.8641268166855021,0.5169975680471844],"transform":[-100.21499095458871,-245.37810800253257,714.8940033002694,-259.11571915794843,778.0,832.9999999999964]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.24641848672125644,0.5269240260497682],"end":[0.8641268166855021,0.5169975680471844],"transform":[-100.21499095458871,-245.37810800253257,714.8940033002694,-259.11571915794843,778.0,832.9999999999964]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[428,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.7349403737393546,1.0000000000000002]],[1,[0.17362079214327678,-0.41509433962264153]],[4,[0.1596715565350542,1.0]],[2,[0.8076864692090735,-0.4339622641509434]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4]],"end_point":[[1,2],[2,3],[4,1],[3,4]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[257,{"inputs":[{"Node":{"node_id":260,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[10544930474333783117,{"inputs":[{"Node":{"node_id":17173383864410319040,"output_index":0,"lambda":false}},{"Node":{"node_id":4633399390154487467,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[117,{"inputs":[{"Node":{"node_id":118,"output_index":0,"lambda":false}},{"Node":{"node_id":122,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[459,{"inputs":[{"Node":{"node_id":463,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[319,{"inputs":[{"Node":{"node_id":290,"output_index":0,"lambda":false}},{"Node":{"node_id":329,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12068777759187203228,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[2,[658.574074074074,609.6851851851851]],[10,[712.0500685871053,614.4420508944315]],[4,[699.4958847736627,594.497256515775]],[1,[645.3333333333333,614.013717421125]],[6,[717.5809327846364,593.2681755829904]],[3,[680.2695473251027,600.730452674897]],[5,[744.3996087994716,586.9732002235431]],[8,[708.7139917695473,601.783950617284]],[9,[713.2108672458469,610.5533455265964]],[7,[702.5246913580245,600.8931773149878]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[4,4],[9,9],[10,10],[3,3],[7,7],[1,1],[6,6],[5,5],[8,8],[2,2]],"end_point":[[9,10],[8,9],[1,2],[6,7],[4,5],[2,3],[5,6],[7,8],[10,1],[3,4]],"handle_primary":[[10,[-58.35223289132739,3.851425709744945]],[7,[0.0,0.0]],[1,[0.0,0.0]],[4,[4.444444444444002,-5.662551440328798]],[5,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[3,[7.374485596707928,-0.92181069958815]],[8,[0.0,0.0]],[9,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]]],"handle_end":[[4,[-5.794238683127446,-2.0192043895747247]],[5,[10.516302710276136,-2.79869346321857]],[9,[-0.08779149519853036,-2.2109123484780184]],[8,[-2.5361987501905787,-3.706752019509281]],[2,[-6.174173455107166,0.7717716818881399]],[7,[-2.89711934156378,-1.975308641975289]],[6,[0.0,0.0]],[3,[-1.6866098186769705,2.1488658430550913]],[10,null],[1,[-4.740740740740762,4.148148148148152]]],"stroke":[[4,0],[10,0],[2,0],[9,0],[6,0],[7,0],[3,0],[5,0],[1,0],[8,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[179,{"inputs":[{"Node":{"node_id":180,"output_index":0,"lambda":false}},{"Node":{"node_id":250,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16815500381887058038,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":74,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[412,{"inputs":[{"Node":{"node_id":413,"output_index":0,"lambda":false}},{"Node":{"node_id":421,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[272,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[873.7839506172841,571.9567901234568]],[3,[896.2037037037037,507.6111111111111]],[1,[872.6913580246915,564.7407407407408]],[5,[927.7592592592592,537.8333333333333]],[2,[885.701646090535,534.2283950617283]],[4,[919.7592592592592,507.7592592592593]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[6,6],[4,4],[2,2],[5,5],[1,1]],"end_point":[[4,5],[3,4],[5,6],[6,1],[2,3],[1,2]],"handle_primary":[[3,[5.629629629629449,-5.185185185185162]],[1,[8.404909667028619,-14.163252363220296]],[2,[2.6337448559671657,-9.349794238682987]],[5,[0.0,0.0]],[4,[9.641681333516315,12.166883587532825]],[6,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[1,null],[2,[-6.29752559155645,5.8003525185389435]],[3,[-6.222222222222285,-7.851851851851904]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[4,0],[1,0],[5,0],[6,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[132,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[158.12962962962962,718.0637860082305]],[2,[158.95389422344155,655.6901143957208]],[5,[170.5082304526749,714.508230452675]],[1,[172.61522633744855,706.3436213991771]],[3,[153.6522633744856,666.8374485596709]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[4,4],[3,3],[1,1],[5,5],[2,2]],"end_point":[[5,1],[2,3],[1,2],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[3,[-1.8436213991769537,9.744855967078138]],[2,[0.0,0.0]],[4,[0.0,0.0]],[5,[3.160493827160508,-3.5555555555554292]]],"handle_end":[[4,[-3.403056460676396,3.828438518260782]],[3,[0.0,0.0]],[2,[1.8436213991768968,-9.744855967078138]],[5,null],[1,[10.930041152263357,25.448559670781947]]],"stroke":[[4,0],[2,0],[5,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18142347460553706128,{"inputs":[{"Node":{"node_id":3719764965605527929,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[5714505144727602368,{"inputs":[{"Node":{"node_id":18142347460553706128,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[742.4503588311712,593.3522045638366]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.9530782},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[11.868580002725764,37.42791872115287]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136118,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3719764965605527929,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[-0.007635827307500006,0.8135210708932508]],[1,[0.024789182815927936,-0.19742232174172225]],[2,[0.5284291926980893,-0.05749241759918103]],[3,[0.9294778693529006,0.07804966382593222]],[5,[0.5092009949861728,0.9569233045341342]],[4,[1.0925954941660798,1.0006513038165834]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[3,3],[5,5],[2,2],[4,4],[1,1]],"end_point":[[3,4],[5,6],[2,3],[4,5],[1,2],[6,1]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[5,[-0.28124758738050376,-0.047835328360902984]],[1,[0.0,0.0]],[2,[0.21441988872806772,0.05895880273641681]],[6,[0.0,0.0]]],"handle_end":[[1,[-0.16942059711236046,-0.046585396643413435]],[5,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.26857587477611267,0.04568009019878494]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[194,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[0.9388148027481048,0.674134940686276]],[2,[0.2647731761418837,0.17920265855050785]],[5,[0.038029134760865314,0.7285470752399478]],[3,[0.7287108039915611,0.06963660702488284]],[1,[-0.15531318767467384,0.11366419216517]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[1,1],[4,4],[3,3],[2,2]],"end_point":[[4,5],[3,4],[2,3],[1,2],[5,1]],"handle_primary":[[5,[0.0,0.0]],[3,[-0.06001521816071698,0.06545334966568245]],[1,[0.0,0.0]],[2,[0.12249986382303002,-0.04615791866776875]],[4,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[-0.2265909018579063,0.03511994027079236]],[1,[-0.1993257782423989,0.03454533724430142]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17020523203516467057,{"inputs":[{"Node":{"node_id":7148230379224894975,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992],"transform":[596.6666666666671,0.0,0.0,669.6474899687091,706.9999999999995,7.352510031290876]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992],"transform":[596.6666666666671,0.0,0.0,669.6474899687091,706.9999999999995,7.352510031290876]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[396,{"inputs":[{"Node":{"node_id":400,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}],[1.0,{"red":0.9098039,"green":0.6862745,"blue":0.27058825,"alpha":1.0}]],"gradient_type":"Linear","start":[0.03910157250347135,0.9695090157857073],"end":[0.36170698072938423,0.042039957474503786],"transform":[340.38852944828716,-58.91966522272131,118.39875359080357,684.0089377789295,972.9016141723532,145.55594755688992]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}],[1.0,{"red":0.9098039,"green":0.6862745,"blue":0.27058825,"alpha":1.0}]],"gradient_type":"Linear","start":[0.03910157250347135,0.9695090157857073],"end":[0.36170698072938423,0.042039957474503786],"transform":[340.38852944828716,-58.91966522272131,118.39875359080357,684.0089377789295,972.9016141723532,145.55594755688992]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[85,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":155,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[427,{"inputs":[{"Node":{"node_id":428,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[583.9293351067386,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[256,{"inputs":[{"Node":{"node_id":259,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.19879202692409503,0.5201781689919184],"end":[0.8398128222157668,0.5168778892557565],"transform":[-149.7970504069467,-159.28457060198534,587.8340874439789,-510.0857997683857,879.0000000000035,834.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.19879202692409503,0.5201781689919184],"end":[0.8398128222157668,0.5168778892557565],"transform":[-149.7970504069467,-159.28457060198534,587.8340874439789,-510.0857997683857,879.0000000000035,834.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[287,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[5,[904.5,283.46296296296293]],[4,[910.06378600823,174.98559670781898]],[6,[898.2777777777778,520.5]],[3,[913.619341563786,134.1625514403292]],[7,[944.7962962962962,568.2037037037037]],[1,[954.864197530864,116.14814814814812]],[2,[934.9526748971192,114.67283950617282]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[1,1],[2,2],[7,7],[3,3],[6,6],[4,4],[5,5]],"end_point":[[7,1],[2,3],[6,7],[3,4],[4,5],[5,6],[1,2]],"handle_primary":[[4,[-0.7901234567891606,29.102880658436305]],[3,[-2.2386831275719032,10.008230452674894]],[5,[-3.5555555555556566,34.37037037037038]],[2,[-9.481481481481635,1.8436213991769392]],[6,[0.0,0.0]],[7,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[2,[2.677546335770103,-11.970207148147836]],[1,[9.481481481481635,-1.8436213991769392]],[7,[0.0,0.0]],[4,[3.5555555555554292,-34.37037037037038]],[5,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.370701337431683,-13.654165928739786]]],"stroke":[[6,0],[1,0],[2,0],[7,0],[4,0],[5,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[318,{"inputs":[{"Node":{"node_id":319,"output_index":0,"lambda":false}},{"Node":{"node_id":323,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[178,{"inputs":[{"Node":{"node_id":179,"output_index":0,"lambda":false}},{"Node":{"node_id":244,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16821952675128396603,{"inputs":[{"Node":{"node_id":3885641499621884510,"output_index":0,"lambda":false}},{"Node":{"node_id":36935169817407978,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[36935169817407978,{"inputs":[{"Node":{"node_id":15848750910363784662,"output_index":0,"lambda":false}},{"Node":{"node_id":11279424538712841875,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[411,{"inputs":[{"Node":{"node_id":412,"output_index":0,"lambda":false}},{"Node":{"node_id":415,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[442,{"inputs":[{"Node":{"node_id":445,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}],[0.14354235440709684,{"red":0.5882353,"green":0.30588236,"blue":0.20392157,"alpha":1.0}],[0.5,{"red":0.6784314,"green":0.33333334,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.76953125,"green":0.4772935,"blue":0.21943665,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5063739376770537,0.01352247091271197],"end":[0.5049575070821529,1.015819012091678],"transform":[1412.0,0.0,0.0,231.4807092004588,351.0000000000001,588.5192907995412]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}],[0.14354235440709684,{"red":0.5882353,"green":0.30588236,"blue":0.20392157,"alpha":1.0}],[0.5,{"red":0.6784314,"green":0.33333334,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.76953125,"green":0.4772935,"blue":0.21943665,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5063739376770537,0.01352247091271197],"end":[0.5049575070821529,1.015819012091678],"transform":[1412.0,0.0,0.0,231.4807092004588,351.0000000000001,588.5192907995412]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14205611254835578455,{"inputs":[{"Node":{"node_id":14335659566300901430,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[-1339.7031164295145,65.50112655997924]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.042402443},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.244995417859058,0.8619572141015625]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.90381723950611e-18,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[100,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0,1.0]],[1,[-0.03917736275965821,1.5785983631388945e-15]],[4,[0.0,1.0]],[2,[0.9501947601024644,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[4,4],[3,3],[2,2]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[162,{"inputs":[{"Node":{"node_id":164,"output_index":0,"lambda":false}},{"Node":{"node_id":274,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9422094883894860610,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[530.2777777777774,564.9115226337451]],[1,[527.0733882030179,547.0898491083676]],[3,[481.882716049383,533.8333333333337]],[4,[495.38065843621376,614.5137174211251]],[5,[541.9979423868313,611.7921810699589]],[2,[500.121399176955,531.6385459533608]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[2,2],[5,5],[3,3],[4,4],[1,1]],"end_point":[[3,4],[1,2],[5,6],[4,5],[2,3],[6,1]],"handle_primary":[[3,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[5,[0.0,0.0]],[1,[16.644617182340255,-0.4357059391355733]],[4,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[4,0],[5,0],[2,0],[1,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[193,{"inputs":[{"Node":{"node_id":191,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[965.2687196297846,544.9034434174798]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.7199705},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[17.59013219658168,55.471003102038694]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136257,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[224,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[13,[852.648148148148,535.9403292181069]],[11,[830.3930041152262,568.5987654320987]],[10,[827.364197530864,555.9567901234567]],[16,[858.4423868312756,599.2818930041151]],[15,[874.7716049382715,566.491769547325]],[18,[876.3518518518517,620.2201646090534]],[19,[742.2503429355281,620.0445816186556]],[6,[819.3312757201645,537.1255144032921]],[8,[825.5205761316871,544.7633744855966]],[3,[779.9567901234567,598.5451457288699]],[7,[817.6193415637858,545.6851851851851]],[5,[819.0679012345677,520.2695473251028]],[17,[877.4053497942385,607.1831275720164]],[1,[741.4602194787379,611.9677640603566]],[9,[825.2572016460904,550.6893004115226]],[2,[773.1090534979423,610.0802469135801]],[14,[864.6316872427983,543.3148148148147]],[4,[790.0967078189299,592.170781893004]],[12,[837.1090534979422,574.2613168724279]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[14,14],[17,17],[15,15],[11,11],[13,13],[8,8],[3,3],[9,9],[4,4],[6,6],[2,2],[16,16],[7,7],[19,19],[5,5],[18,18],[10,10],[1,1],[12,12]],"end_point":[[1,2],[10,11],[2,3],[12,13],[18,19],[15,16],[7,8],[19,1],[16,17],[3,4],[17,18],[5,6],[4,5],[8,9],[6,7],[14,15],[11,12],[9,10],[13,14]],"handle_primary":[[11,[0.658436213991763,2.1698525002639144]],[5,[0.0,0.0]],[4,[1.0534979423869115,-4.345679012345613]],[13,[0.0,0.0]],[15,[0.0,0.0]],[17,[0.0,0.0]],[18,[-1.843621399176982,1.975308641975289]],[1,[0.0,0.0]],[16,[0.0,0.0]],[9,[0.0,0.0]],[6,[0.0,0.0]],[7,[1.4485596707819468,2.633744855967052]],[8,[0.0,0.0]],[3,[5.530864197530832,-1.8969975807218589]],[19,[-21.66213092273972,1.775584501863932]],[2,[4.609053497942341,-0.9218106995883772]],[12,[0.0,0.0]],[14,[3.68724279835385,7.90123456790127]],[10,[1.7119341563786747,1.316872427983526]]],"handle_end":[[14,[0.0,0.0]],[8,[1.1851851851852189,-2.502057613168745]],[12,[-7.637860082304542,12.641975308641918]],[9,[-1.7119341563786747,-1.316872427983526]],[17,[1.843621399176982,-1.975308641975289]],[10,[-0.658436213991763,-2.1698525002639144]],[1,[-4.609053497942341,0.9218106995883772]],[15,[2.765432098765359,-11.851851851851848]],[6,[-1.4485596707819468,-2.633744855967052]],[16,[-5.1358024691359105,-5.00411522633749]],[5,[-0.39506172839503506,-3.160493827160508]],[3,[-1.0534979423869115,4.345679012345613]],[18,[21.421124828532356,-1.7558299039781105]],[13,[-3.68724279835385,-7.90123456790127]],[4,[-16.987654320987644,28.049382716049426]],[19,[0.0,0.0]],[7,[-5.135802469135797,4.609053497942341]],[11,[-2.10699588477371,-0.3950617283951487]],[2,[-5.530864197530832,1.8969975807218589]]],"stroke":[[14,0],[7,0],[15,0],[4,0],[6,0],[3,0],[18,0],[12,0],[13,0],[19,0],[9,0],[5,0],[10,0],[2,0],[16,0],[11,0],[17,0],[8,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14579754335592291854,{"inputs":[{"Node":{"node_id":1644624352314732667,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":0.0}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009],"transform":[1153.5000000000016,0.0,0.0,116.99999999999352,390.5000000000018,782.9999999999995]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":0.0}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009],"transform":[1153.5000000000016,0.0,0.0,116.99999999999352,390.5000000000018,782.9999999999995]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7134154821675013808,{"inputs":[{"Node":{"node_id":408,"output_index":0,"lambda":false}},{"Node":{"node_id":14205611254835578455,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[457,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[3,[129.38888888888889,628.0555555555557]],[2,[80.05555555555559,484.94444444444446]],[1,[-4.833333333333332,345.83333333333326]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[2,[32.038317168599576,69.73045501401077]],[1,[0.0,0.0]]],"handle_end":[[1,[-45.33333333333338,-98.66666666666669]],[2,[0.0,0.0]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[115,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,1.0]],[3,[1.0,1.0]],[1,[-0.04384002017081715,1.8188575645616826e-15]],[2,[1.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[1,1],[2,2]],"end_point":[[2,3],[3,4],[4,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6710503329407068595,{"inputs":[{"Node":{"node_id":16831252454255560063,"output_index":0,"lambda":false}},{"Node":{"node_id":10486443711686704000,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9570557034533539493,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[767.1831275720166,614.1625514403293]],[1,[740.3456790123458,588.2030178326476]],[4,[789.2187928669412,601.4967933823075]],[6,[751.1172839506169,611.1776406035664]],[3,[794.0473251028808,582.3820301783265]],[2,[755.3312757201647,586.2448559670783]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[3,3],[6,6],[1,1],[5,5],[2,2]],"end_point":[[2,3],[6,1],[4,5],[5,6],[1,2],[3,4]],"handle_primary":[[2,[9.481481481481524,0.4824094931645959]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[4,[11.149519890260535,-0.2794994541025062]],[6,[0.0,0.0]],[2,[-9.305898491083669,-1.1412894375856697]],[3,[8.427983539094612,-8.539557783673331]],[1,[-9.481481481481524,-0.4824094931645959]]],"stroke":[[3,0],[6,0],[1,0],[4,0],[2,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5175066652268973319,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]],[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[4,4],[1,1]],"end_point":[[4,1],[1,2],[2,3],[3,4]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[177,{"inputs":[{"Node":{"node_id":178,"output_index":0,"lambda":false}},{"Node":{"node_id":238,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[208,{"inputs":[{"Node":{"node_id":212,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15277819403265847073,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4913361824430066698,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[99,{"inputs":[{"Node":{"node_id":100,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[827.4018790826805,704.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[74.57030178326477,63.99999999999989]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[161,{"inputs":[{"Node":{"node_id":162,"output_index":0,"lambda":false}},{"Node":{"node_id":168,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17245613731534563958,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,0.5]],[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[4,4],[1,1]],"end_point":[[2,3],[1,2],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]]],"handle_end":[[4,[-0.275892388889507,0.0]],[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]]],"stroke":[[2,0],[1,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[394,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":404,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[254,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[887.506172839506,620.2933732713938]],[2,[999.8086419753088,626.6728395061729]],[5,[910.5246913580244,598.202467627757]],[4,[1004.3518518518516,600.7306004720272]],[3,[1012.648148148148,620.7933732713938]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[1,1],[5,5],[4,4],[2,2]],"end_point":[[2,3],[1,2],[3,4],[4,5],[5,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[2,[0.0,0.0]],[1,[-43.25925925925878,-1.3827160493827932]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[5,0],[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[83,{"inputs":[{"Node":{"node_id":85,"output_index":0,"lambda":false}},{"Node":{"node_id":117,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[114,{"inputs":[{"Node":{"node_id":115,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[926.5490676442352,657.3888888888888]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[97.92901234567933,111.111111111111]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[487,{"inputs":[{"Node":{"node_id":491,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5546875,"green":0.30678105,"blue":0.24050903,"alpha":1.0}],[1.0,{"red":0.41015625,"green":0.26908994,"blue":0.22590637,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6510643291021605,0.0026199374677413345],"end":[0.6510643291021605,0.8853991419751945],"transform":[171.95146556847033,0.0,0.0,739.7405389344278,1183.0485344315307,119.06192604563851]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5546875,"green":0.30678105,"blue":0.24050903,"alpha":1.0}],[1.0,{"red":0.41015625,"green":0.26908994,"blue":0.22590637,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6510643291021605,0.0026199374677413345],"end":[0.6510643291021605,0.8853991419751945],"transform":[171.95146556847033,0.0,0.0,739.7405389344278,1183.0485344315307,119.06192604563851]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[316,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[767.1831275720166,614.1625514403293]],[2,[755.3312757201647,586.2448559670783]],[1,[740.3456790123458,588.2030178326476]],[3,[794.0473251028808,582.3820301783265]],[6,[751.1172839506169,611.1776406035664]],[4,[789.2187928669412,601.4967933823075]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[5,5],[6,6],[4,4],[3,3],[1,1],[2,2]],"end_point":[[1,2],[4,5],[2,3],[5,6],[3,4],[6,1]],"handle_primary":[[1,[0.0,0.0]],[5,[-11.149519890260535,0.2794994541025062]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[6,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[1,[-9.481481481481524,-0.4824094931645959]],[2,[-9.305898491083669,-1.1412894375856697]],[5,[0.0,0.0]],[4,[11.149519890260535,-0.2794994541025062]],[3,[8.427983539094612,-8.539557783673331]]],"stroke":[[5,0],[6,0],[1,0],[4,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[97478832511923699,{"inputs":[{"Node":{"node_id":2999157202967297847,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.14917418},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136096,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[176,{"inputs":[{"Node":{"node_id":177,"output_index":0,"lambda":false}},{"Node":{"node_id":232,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12717405604755313921,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":15483449862348058100,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1644624352314732667,{"inputs":[{"Node":{"node_id":3930114406985796561,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[409,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":442,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[238,{"inputs":[{"Node":{"node_id":242,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3707802522175443254,{"inputs":[{"Node":{"node_id":10278740841813346388,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[440,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[4,[0.0387096774193552,1.0]],[3,[1.035483870967742,1.0]],[2,[1.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[2,3],[4,1],[3,4]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[1,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9603838021022368374,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[7,[779.7592592592597,612.6204267490609]],[4,[706.1680384087791,607.8415637860082]],[1,[744.3996087994717,586.9732002235432]],[5,[710.9477975918305,613.6358024691357]],[3,[698.0912208504803,600.3792866941013]],[6,[729.3449931412895,610.3875171467763]],[2,[734.9571457603006,587.5194584158918]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[5,5],[2,2],[7,7],[6,6],[4,4],[1,1]],"end_point":[[1,2],[4,5],[7,1],[2,3],[5,6],[3,4],[6,7]],"handle_primary":[[2,[0.0,0.0]],[6,[15.119646395366544,2.853223593964344]],[3,[0.0,0.0]],[1,[0.0,0.0]],[7,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[5,[7.452522481329197,2.721536351166037]]],"handle_end":[[3,[-2.494608558449272,-5.331900091455282]],[5,null],[2,[6.496570644718986,-11.149519890260422]],[7,[9.28638926992835,13.56378600823075]],[4,null],[1,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[2,0],[5,0],[6,0],[4,0],[3,0],[1,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[471,{"inputs":[{"Node":{"node_id":475,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[300,{"inputs":[{"Node":{"node_id":304,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[331,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[1,[659.4434537418081,187.67146776406028]],[8,[446.6563786008233,618.9032921810701]],[4,[563.1666666666666,433.38888888888886]],[6,[523.3861454046643,611.9385002286241]],[10,[750.8539094650207,617.9375857338821]],[7,[486.7770919067218,613.3724279835391]],[2,[622.9855967078189,184.4670781893004]],[3,[588.0884773662551,227.52880658436212]],[11,[675.4629629629632,591.0185185185186]],[5,[540.9444444444443,605.8710283878144]],[9,[661.5370370370372,619.7592592592594]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[3,3],[1,1],[2,2],[10,10],[8,8],[4,4],[11,11],[9,9],[6,6],[5,5],[7,7]],"end_point":[[5,6],[10,11],[6,7],[8,9],[1,2],[11,1],[3,4],[9,10],[7,8],[2,3],[4,5]],"handle_primary":[[8,[0.0,0.0]],[11,[0.0,0.0]],[7,[-3.511659807956221,0.819387288523103]],[3,[-3.950617283950692,42.13991769547326]],[6,[0.0,0.0]],[4,[-10.222222222222172,79.55555555555549]],[10,[1.1851851851849915,-37.53086419753106]],[2,[-6.716049382716051,0.9218106995884908]],[5,[0.0,0.0]],[1,[-3.9798811156837246,-1.1315348270080108]],[9,[43.09465020576113,-0.9876543209876444]]],"handle_end":[[5,[5.5601280292639785,-9.422953818016254]],[8,[-14.51772944216873,0.33272107201298695]],[9,[-22.386831275720624,5.3991769547326385]],[6,[5.110425979711636,-1.1924327285993286]],[1,[6.716049382716051,-0.9218106995884624]],[7,[1.5363511659809888,-3.599451303154865]],[10,[0.0,0.0]],[4,[0.0,0.0]],[3,[10.222222222222172,-79.55555555555549]],[11,null],[2,[3.950617283950692,-42.13991769547323]]],"stroke":[[9,0],[7,0],[8,0],[4,0],[6,0],[10,0],[2,0],[5,0],[1,0],[11,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[191,{"inputs":[{"Node":{"node_id":194,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[6980979116665635870,{"inputs":[{"Node":{"node_id":5175066652268973319,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.14917418},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136096,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[393,{"inputs":[{"Node":{"node_id":394,"output_index":0,"lambda":false}},{"Node":{"node_id":398,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[424,{"inputs":[{"Node":{"node_id":427,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.72265625,"green":0.3808298,"blue":0.2117157,"alpha":1.0}],[0.07456140350877193,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0],"transform":[301.3269343934191,0.0,0.0,227.99999999999997,1490.0,614.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.72265625,"green":0.3808298,"blue":0.2117157,"alpha":1.0}],[0.07456140350877193,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0],"transform":[301.3269343934191,0.0,0.0,227.99999999999997,1490.0,614.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[82,{"inputs":[{"Node":{"node_id":83,"output_index":0,"lambda":false}},{"Node":{"node_id":102,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[455,{"inputs":[{"Node":{"node_id":453,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[144,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.5,0.0]],[2,[1.0,0.5]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[3,3],[1,1]],"end_point":[[1,2],[2,3],[4,1],[3,4]],"handle_primary":[[4,[0.0,-0.275892388889507]],[2,[0.0,0.27589238888950707]],[1,[0.27589238888950707,0.0]],[3,[-0.275892388889507,0.0]]],"handle_end":[[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[4,[-0.275892388889507,0.0]]],"stroke":[[3,0],[2,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[175,{"inputs":[{"Node":{"node_id":176,"output_index":0,"lambda":false}},{"Node":{"node_id":226,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[206,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[10,[968.2037037037036,504.05555555555554]],[7,[965.9814814814814,501.38888888888886]],[12,[981.6851851851852,523.1666666666666]],[15,[1001.8333333333334,567.0185185185184]],[11,[975.1666666666664,511.3148148148148]],[9,[973.0925925925924,496.5]],[3,[971.3148148148148,466.5740740740741]],[6,[967.9074074074072,482.8703703703703]],[4,[956.3024691358024,462.55639384240214]],[1,[1009.6296296296296,552.8888888888889]],[13,[967.3148148148148,531.9074074074074]],[14,[974.574074074074,539.3148148148148]],[5,[963.3148148148148,466.8703703703703]],[8,[972.5274348422496,495.6732967535437]],[2,[988.351851851852,494.72222222222223]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[2,2],[7,7],[14,14],[9,9],[1,1],[15,15],[10,10],[13,13],[4,4],[8,8],[12,12],[5,5],[6,6],[3,3],[11,11]],"end_point":[[3,4],[9,10],[2,3],[8,9],[1,2],[13,14],[10,11],[14,15],[5,6],[11,12],[4,5],[12,13],[6,7],[15,1],[7,8]],"handle_primary":[[1,[0.0,0.0]],[10,[0.0,0.0]],[9,[0.0,0.0]],[3,[-4.395061728394808,-4.740740740740705]],[11,[3.703703703703809,-0.7407407407407618]],[5,[2.814814814814781,3.7037037037036953]],[15,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[12,[-4.888888888889028,8.59259259259261]],[4,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[2,[-6.51851851851859,-12.148148148148152]],[6,[-5.333333333333144,8.296296296296305]]],"handle_end":[[3,[3.265062349348341,-2.124337414689535]],[15,[-3.796296296296191,11.166666666666517]],[11,[4.8888888888888005,-8.59259259259261]],[5,[5.333333333333485,-8.296296296296305]],[12,[0.0,0.0]],[1,[6.51851851851859,12.148148148148152]],[14,[-3.4074074074073906,-0.7407407407407618]],[10,[-3.7037037037035816,0.7407407407407618]],[9,[0.7407407407407618,-4.0]],[8,[-0.009144947416189098,-0.38774577046183367]],[7,[-2.6666666666667425,0.740740740740705]],[4,[-2.814814814814781,-3.7037037037036953]],[2,[3.786081133230596,4.083862795394623]],[6,[-1.7777777777778283,-0.8888888888889142]],[13,[-4.296296296296418,-2.6666666666666288]]],"stroke":[[14,0],[10,0],[15,0],[2,0],[8,0],[7,0],[1,0],[9,0],[3,0],[13,0],[4,0],[5,0],[12,0],[6,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[408,{"inputs":[{"Node":{"node_id":409,"output_index":0,"lambda":false}},{"Node":{"node_id":411,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1453710883947581217,{"inputs":[{"Node":{"node_id":281,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[268,{"inputs":[{"Node":{"node_id":272,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[439,{"inputs":[{"Node":{"node_id":440,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[344.5177419354837,697.8333333333333]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12768614558324028960,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6710503329407068595,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[128,{"inputs":[{"Node":{"node_id":132,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[159,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[4,[249.09259259259255,770.8703703703704]],[3,[266.2777777777779,704.4077331232156]],[5,[-2.6666666666666856,770.8703703703704]],[2,[153.0925925925926,632.7962962962963]],[1,[-2.6666666666667,581.3333333333333]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[4,4],[5,5],[2,2],[1,1],[3,3]],"end_point":[[2,3],[4,5],[5,1],[1,2],[3,4]],"handle_primary":[[2,[69.92592592592595,31.40740740740773]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[8.273042653236644,16.012340619167617]],[5,[0.0,0.0]]],"handle_end":[[2,[-9.18518518518522,-17.777777777777715]],[3,[19.407407407407447,-32.148148148148266]],[5,[0.0,0.0]],[1,[-105.44980253803315,-47.36304690267639]],[4,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2489761779922717592,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[2,[161.81687242798355,618.7716049382714]],[8,[481.88271604938296,600.2037037037037]],[4,[282.37654320987656,585.9814814814815]],[1,[156.18106995884773,623.2098765432096]],[9,[447.46059205066985,619.9047655337092]],[3,[205.93209876543213,600.5987654320988]],[6,[468.0555555555556,551.0185185185187]],[10,[288.6975308641976,620.1543209876544]],[7,[455.2160493827161,586.8374485596709]],[5,[338.4753086419753,574.1296296296297]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[8,8],[9,9],[3,3],[6,6],[4,4],[2,2],[5,5],[10,10],[1,1],[7,7]],"end_point":[[9,10],[8,9],[3,4],[6,7],[5,6],[7,8],[1,2],[4,5],[10,1],[2,3]],"handle_primary":[[8,[0.0,0.0]],[2,[5.925925925925924,-2.370370370370324]],[7,[0.0,0.0]],[6,[-0.19753086419751753,-0.19753086419757435]],[4,[22.71604938271605,-4.9382716049382225]],[3,[21.135802469135797,-7.703703703703695]],[1,[0.0,0.0]],[9,[0.0,0.0]],[10,[-70.32098765432102,1.975308641975289]],[5,[0.0,0.0]]],"handle_end":[[3,[-22.71604938271605,4.9382716049382225]],[7,[-8.691358024691567,-7.308641975308547]],[9,[70.32098765432102,-1.975308641975289]],[2,[-21.135802469135797,7.703703703703695]],[4,[0.0,0.0]],[8,[11.358024691357969,-11.390946502057773]],[5,[-40.09876543209879,-8.09876543209873]],[10,[41.77160493827162,-2.8703703703704377]],[6,[4.345679012345613,-25.481481481481524]],[1,[-5.925925925925924,2.370370370370324]]],"stroke":[[7,0],[3,0],[8,0],[4,0],[6,0],[10,0],[2,0],[5,0],[1,0],[9,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[190,{"inputs":[{"Node":{"node_id":193,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.1331892468887066,0.5346273584022614],"end":[0.8687039445257865,0.5091081472114145],"transform":[-218.7504556627755,-14.37593189759248,43.932245743957935,-414.3431050369427,1186.6527692956029,632.7498382754235]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.1331892468887066,0.5346273584022614],"end":[0.8687039445257865,0.5091081472114145],"transform":[-218.7504556627755,-14.37593189759248,43.932245743957935,-414.3431050369427,1186.6527692956029,632.7498382754235]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11427960919145580782,{"inputs":[{"Node":{"node_id":6873123446543957690,"output_index":0,"lambda":false}},{"Node":{"node_id":11345069121502219134,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15848750910363784662,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":17911294938421300842,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[81,{"inputs":[{"Node":{"node_id":82,"output_index":0,"lambda":false}},{"Node":{"node_id":87,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15483449862348058100,{"inputs":[{"Node":{"node_id":5382879283978921947,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[283,{"inputs":[{"Node":{"node_id":16360261423333265502,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[143,{"inputs":[{"Node":{"node_id":144,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[22.81427346112025,718.7256085656885]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.028919384},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[114.60967448512612,10.883703174332329]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.002522502109903075,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6873123446543957690,{"inputs":[{"Node":{"node_id":12717405604755313921,"output_index":0,"lambda":false}},{"Node":{"node_id":3707802522175443254,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[485,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[5,[874.2777777777776,540.5]],[3,[873.1913580246915,359.61111111111114]],[1,[901.7869989330896,337.4632677945435]],[6,[879.873428946497,552.0307817039356]],[2,[881.6925011431184,340.0384849870446]],[4,[873.611111111111,465.6111111111111]],[7,[907.1666666666664,501.16666666666663]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[6,6],[2,2],[4,4],[1,1],[5,5],[7,7]],"end_point":[[6,7],[5,6],[2,3],[1,2],[7,1],[3,4],[4,5]],"handle_primary":[[1,[0.0,0.0]],[4,[-0.22222222222228535,37.77777777777777]],[5,[1.086419753086716,4.000000000000114]],[2,[-5.885745135394927,5.678500588373993]],[6,[4.0,1.7777777777777146]],[7,[2.888888888889028,-35.111111111111086]],[3,[0.09876543209873034,9.87654320987656]]],"handle_end":[[3,[0.22222222222228535,-37.77777777777777]],[6,[-2.8888888888888005,35.111111111111086]],[4,[-0.9901901223357754,-3.645699995871837]],[2,[-0.09876543209873034,-9.87654320987656]],[7,[0.0,0.0]],[1,[5.5406188081085475,-5.34552659655543]],[5,[-4.0,-1.7777777777777146]]],"stroke":[[7,0],[1,0],[4,0],[6,0],[3,0],[2,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[174,{"inputs":[{"Node":{"node_id":175,"output_index":0,"lambda":false}},{"Node":{"node_id":220,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4633399390154487467,{"inputs":[{"Node":{"node_id":11155094820673141470,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[236,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[842.2716049382717,560.2962962962963]],[3,[832.8950617283951,560.829218106996]],[2,[837.9320987654322,560.7962962962963]],[5,[826.9691358024693,580.1543209876544]],[4,[828.8127572016463,566.4259259259259]],[6,[838.425925925926,581.0432098765433]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[5,5],[1,1],[3,3],[4,4],[2,2]],"end_point":[[5,6],[1,2],[3,4],[2,3],[4,5],[6,1]],"handle_primary":[[1,[-4.339506172839492,0.5]],[2,[0.0,0.0]],[6,[0.0,0.0]],[4,[-3.649513397469832,2.8283728830390373]],[5,[0.0,0.0]],[3,[-2.1728395061728634,1.4814814814815236]]],"handle_end":[[4,[0.0,0.0]],[1,null],[5,[0.0,0.0]],[3,[2.633744855967052,-2.0411522633744426]],[6,[0.0,0.0]],[2,[2.1728395061728634,-1.4814814814815236]]],"stroke":[[4,0],[3,0],[6,0],[5,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1598976462838094167,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[3,[488.5329218106997,551.6587029416252]],[5,[500.4506172839507,547.5105547934772]],[19,[468.05555555555594,550.6710486206383]],[9,[510.261316872428,573.2078189300412]],[10,[496.50000000000006,582.6234567901236]],[16,[478.9197530864198,618.6875095259874]],[2,[497.8388203017833,534.5393613778391]],[15,[496.30246913580254,612.3006782502672]],[8,[502.6234567901235,563.1154930650816]],[11,[504.00617283950623,588.9444444444446]],[4,[500.77983539094663,544.0208428593207]],[6,[490.17901234567904,556.0043819539711]],[18,[438.2283950617284,585.5544307531777]],[20,[480.89506172839504,532.4323654930657]],[1,[506.7057613168725,531.9348803536052]],[17,[448.3683127572017,617.6340115836006]],[13,[516.8017832647463,593.4437585733884]],[7,[495.90740740740733,567.882982777016]],[12,[513.3888888888889,585.5544307531777]],[14,[496.49999999999994,603.4117893613783]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[6,6],[20,20],[4,4],[15,15],[10,10],[9,9],[12,12],[13,13],[18,18],[7,7],[14,14],[1,1],[17,17],[16,16],[19,19],[5,5],[8,8],[3,3],[11,11],[2,2]],"end_point":[[2,3],[11,12],[20,1],[1,2],[9,10],[4,5],[15,16],[17,18],[12,13],[8,9],[19,20],[16,17],[6,7],[3,4],[14,15],[5,6],[10,11],[7,8],[18,19],[13,14]],"handle_primary":[[4,null],[10,[0.0,0.0]],[13,[0.0,0.0]],[8,[0.0,0.0]],[12,[0.0,0.0]],[1,[0.0,0.0]],[18,[0.0,0.0]],[17,[0.0,0.0]],[7,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[16,[0.0,0.0]],[20,[7.46503467504715,-4.02781143068205]],[6,[0.0,0.0]],[5,[-6.737997256515712,3.1824417009599983]],[19,[0.0,0.0]],[9,[0.0,0.0]],[3,[4.565157750342848,-4.301783264746064]],[14,[0.0,0.0]],[15,[0.0,0.0]],[11,[0.0,0.0]]],"handle_end":[[17,[0.0,0.0]],[3,null],[20,[0.0,0.0]],[1,[3.4386245260820374,-1.250408918575317]],[7,[-3.6872427983540206,1.4485596707820605]],[12,[-0.39506172839503506,-1.975308641975289]],[6,[-2.508333333333439,-2.0902777777778283]],[4,null],[8,[-1.7777777777777717,-5.728395061728406]],[15,[0.0,0.0]],[9,[6.716049382716108,-8.49382716049422]],[10,[-2.765432098765416,-3.555555555555543]],[16,[0.0,0.0]],[13,[0.0,0.0]],[11,[-3.851851851851848,0.7581344568814075]],[5,[0.0,0.0]],[18,[0.0,0.0]],[14,[-0.7901234567900701,-4.938271604938336]],[19,[-3.394604481024089,3.2873037646699004]],[2,[0.27087722942241044,-5.120145445603839]]],"stroke":[[20,0],[2,0],[12,0],[1,0],[11,0],[15,0],[18,0],[13,0],[17,0],[19,0],[9,0],[14,0],[16,0],[4,0],[6,0],[10,0],[3,0],[7,0],[8,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12435496696188763850,{"inputs":[{"Node":{"node_id":9286544882258200464,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[96,{"inputs":[{"Node":{"node_id":99,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7594724231651877,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.0,0.5],"end":[1.0,0.0],"transform":[167.78317901234573,0.0,0.0,143.99999999999977,1158.5733024691351,715.0]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7594724231651877,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.0,0.5],"end":[1.0,0.0],"transform":[167.78317901234573,0.0,0.0,143.99999999999977,1158.5733024691351,715.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[469,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"delta":[[7,[129.38888888888886,443.61235349483104]],[2,[-7.000000000000025,626.675562328647]],[13,[223.25,608.7633744855967]],[6,[110.91975308641976,406.62345679012344]],[9,[111.83431058292848,134.6107990062408]],[5,[81.68518518518522,338.8703703703703]],[4,[50.72222222222222,278.78532235939633]],[8,[82.0,29.5]],[3,[-7.030559365950182,200.5]],[12,[199.1666666666667,473.1666666666667]],[11,[177.83333333333343,384.49999999999994]],[10,[137.68518518518513,236.64814814814815]],[1,[137.75,641.0]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"start_point":[[3,3],[6,6],[11,11],[4,4],[8,8],[5,5],[7,7],[2,2],[1,1],[9,9],[13,13],[10,10],[12,12]],"end_point":[[1,2],[8,9],[4,5],[2,3],[12,13],[3,4],[6,7],[10,11],[9,10],[11,12],[5,6],[7,8],[13,1]],"handle_primary":[[12,[11.42335240155694,63.4630688975397]],[6,[8.537957281505157,20.688127259031944]],[10,[12.334360893667936,45.715346431469186]],[13,[0.0,0.0]],[2,[0.0,0.0]],[8,[0.0,0.0]],[5,[6.73334689148848,12.881185357630102]],[3,[31.078939476013172,37.97283968100555]],[11,[6.410520201070284,29.915760938327992]],[1,[0.0,0.0]],[4,[7.654320987654309,14.850480109739408]],[9,[5.9990227504048335,27.666978771536947]],[7,[-20.788075479416264,-70.61235349483104]]],"handle_end":[[6,[0.0,0.0]],[11,[-5.999999999999915,-33.33333333333343]],[1,[0.0,0.0]],[2,[0.0,0.0]],[9,[-13.510174692931455,-48.54050114169854]],[8,[-13.354098963944438,-61.58795989288773]],[10,[-12.0,-55.99999999999994]],[5,[-10.271604938271594,-24.88888888888897]],[3,[-14.856706650648782,-28.82414089604376]],[7,[14.499999999999943,172.0]],[4,[-9.08641975308646,-17.382716049382736]],[12,[0.0,0.0]],[13,[0.0,0.0]]],"stroke":[[11,0],[5,0],[12,0],[4,0],[6,0],[9,0],[7,0],[1,0],[8,0],[13,0],[2,0],[10,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":13}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11279424538712841875,{"inputs":[{"Node":{"node_id":2489761779922717592,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[329,{"inputs":[{"Node":{"node_id":327,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[4452902364641883403,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":8861964493222160710,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16894739051789815098,{"inputs":[{"Node":{"node_id":17245613731534563958,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":5}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[220,{"inputs":[{"Node":{"node_id":224,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[422,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":430,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[453,{"inputs":[{"Node":{"node_id":457,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":"None"},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":null},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[111,{"inputs":[{"Node":{"node_id":114,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13606781735926093266,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[6,[717.5809327846364,593.2681755829904]],[2,[658.574074074074,609.6851851851851]],[10,[712.0500685871053,614.4420508944315]],[4,[699.4958847736627,594.497256515775]],[1,[645.3333333333333,614.013717421125]],[8,[708.7139917695473,601.783950617284]],[7,[702.5246913580245,600.8931773149878]],[5,[744.3996087994716,586.9732002235431]],[3,[680.2695473251027,600.730452674897]],[9,[713.2108672458469,610.5533455265964]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[5,5],[9,9],[1,1],[6,6],[4,4],[7,7],[2,2],[8,8],[3,3],[10,10]],"end_point":[[2,3],[1,2],[9,10],[8,9],[10,1],[5,6],[6,7],[4,5],[7,8],[3,4]],"handle_primary":[[7,[0.0,0.0]],[4,[4.444444444444002,-5.662551440328798]],[3,[7.374485596707928,-0.92181069958815]],[8,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[10,[-58.35223289132739,3.851425709744945]],[5,[0.0,0.0]],[9,[0.0,0.0]],[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]]],"handle_end":[[6,[0.0,0.0]],[9,[-0.08779149519853036,-2.2109123484780184]],[7,[-2.89711934156378,-1.975308641975289]],[3,[-1.6866098186769705,2.1488658430550913]],[5,[10.516302710276136,-2.79869346321857]],[4,[-5.794238683127446,-2.0192043895747247]],[10,null],[8,[-2.5361987501905787,-3.706752019509281]],[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]]],"stroke":[[2,0],[6,0],[5,0],[4,0],[3,0],[9,0],[10,0],[7,0],[8,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2999157202967297847,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]],[2,[0.8379395417513005,-0.05940639119491883]],[1,[-0.09890842105846484,-0.06578040790199424]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[2,3],[3,4],[4,1],[1,2]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[4,0],[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[173,{"inputs":[{"Node":{"node_id":174,"output_index":0,"lambda":false}},{"Node":{"node_id":214,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16360261423333265502,{"inputs":[{"Node":{"node_id":287,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16831252454255560063,{"inputs":[{"Node":{"node_id":14080831508667499826,"output_index":0,"lambda":false}},{"Node":{"node_id":17257434333682934071,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[406,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[369.7510288065844,308.3847736625514]],[1,[401.70713305898494,260.36282578875165]],[6,[428.9444444444444,568.9444444444443]],[4,[353.38888888888886,444.5]],[2,[380.6371742112481,265.1035665294926]],[5,[332.5,581.8333333333333]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[6,6],[5,5],[3,3],[2,2],[1,1],[4,4]],"end_point":[[2,3],[3,4],[5,6],[4,5],[1,2],[6,1]],"handle_primary":[[3,[-1.3105663299890011,14.89279920442118]],[6,[0.0,0.0]],[2,[-10.643715697978225,7.851921416541302]],[1,[-10.359396433470463,-3.160493827160451]],[4,[-5.333333333333314,40.0]],[5,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[2,[0.9657064471879266,-10.97393689986285]],[5,[0.0,0.0]],[3,[5.333333333333314,-40.0]],[1,null],[4,[4.0,-30.666666666666742]]],"stroke":[[3,0],[2,0],[5,0],[4,0],[6,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9286544882258200464,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[480.8950617283949,532.7798353909467]],[4,[464.82921810699577,552.1378600823044]],[2,[472.818244170096,545.5973936899862]],[3,[455.2160493827161,586.837448559671]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[3,4],[2,3],[1,2],[4,1]],"handle_primary":[[3,[0.0,0.0]],[4,[4.236143848022095,-8.765075372687306]],[2,[-5.249967385837806,9.166609721304098]],[1,[0.0,0.0]]],"handle_end":[[1,[5.530864197530832,-9.657064471879266]],[3,[-10.501290993452583,21.72839506172852]],[2,[0.0,0.0]],[4,[-3.58969669257732,1.843621399176868]]],"stroke":[[4,0],[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[266,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[2,[903.0185185185188,539.9074074074074]],[6,[931.067901234568,549.8333333333334]],[3,[907.9074074074074,539.3148148148149]],[8,[877.5736601163951,577.8827160493829]],[1,[890.376543209877,558.3271604938273]],[5,[916.9444444444443,525.3888888888889]],[7,[902.8209876543212,578.672839506173]],[4,[906.574074074074,531.3148148148149]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[2,2],[8,8],[6,6],[1,1],[7,7],[3,3],[4,4],[5,5]],"end_point":[[4,5],[2,3],[1,2],[8,1],[6,7],[3,4],[5,6],[7,8]],"handle_primary":[[6,[0.0,0.0]],[4,[0.05385802469163536,0.0]],[8,[0.0,0.0]],[3,[0.0,0.0]],[7,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[5,[12.296296296296418,0.14814814814803867]]],"handle_end":[[1,[-16.592592592592723,23.703703703703923]],[4,[-3.0120068298679143,-0.036289238914037014]],[2,[0.0,0.0]],[5,[0.0,0.0]],[7,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.2962962962964184,4.888888888889028]],[8,[0.0,0.0]]],"stroke":[[7,0],[6,0],[5,0],[3,0],[4,0],[1,0],[8,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[126,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[11,[162.67283950617286,705.2901234567901]],[5,[115.66049382716052,719.5123456790124]],[6,[123.75925925925928,720.3024691358024]],[4,[102.03086419753087,696.7962962962963]],[16,[211.0679012345679,719.5123456790124]],[2,[79.11728395061729,724.0555555555555]],[14,[188.5493827160494,680.4012345679012]],[15,[196.05555555555557,678.8209876543209]],[9,[158.40763603109284,655.1124066453283]],[3,[94.12962962962963,696.9938271604938]],[17,[209.09259259259255,727.8086419753085]],[1,[83.98971193415636,727.8086419753087]],[10,[158.3271604938272,661.4382716049382]],[7,[131.06790123456793,702.1296296296296]],[8,[148.8456790123457,665.3888888888888]],[12,[169.3888888888889,709.0432098765432]],[13,[177.0925925925926,696.4012345679012]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[9,9],[13,13],[15,15],[14,14],[5,5],[7,7],[2,2],[1,1],[10,10],[17,17],[6,6],[12,12],[11,11],[4,4],[3,3],[8,8],[16,16]],"end_point":[[2,3],[6,7],[17,1],[4,5],[9,10],[16,17],[1,2],[12,13],[10,11],[3,4],[8,9],[14,15],[15,16],[11,12],[13,14],[7,8],[5,6]],"handle_primary":[[9,[1.416857186404485,0.2219173906416927]],[5,[0.9523778763475974,1.643318688599834]],[4,[3.753086419753103,4.9382716049382225]],[2,[3.2490948717098007,-6.29142916067417]],[14,[2.3703703703703525,-2.5679012345678984]],[10,[-0.24572721430195088,3.082066920469856]],[1,[-3.7139917695473343,-0.22427983539080287]],[8,[2.172839506172835,-5.3333333333332575]],[17,[-3.028806584362002,2.897119341564121]],[16,[0.0,0.0]],[11,[0.0,0.0]],[12,[0.0,0.0]],[6,[0.0,0.0]],[15,[2.370370370370381,3.950617283950692]],[3,[2.3703703703704093,-2.5679012345678984]],[7,[2.962962962962962,-6.320987654321016]],[13,[3.555555555555543,-7.308641975308547]]],"handle_end":[[13,[-2.370370370370381,2.5679012345678984]],[17,[4.846281557722946,0.29265633783461453]],[10,[1.1851851851851904,-8.296296296296305]],[15,[-3.753086419753089,-24.493827160493765]],[11,[-4.148148148148152,-0.39506172839503506]],[6,[-2.962962962962962,6.320987654321016]],[9,[0.31458619112936503,-3.9457399786616634]],[16,[3.77785186523289,-3.613597436310215]],[14,[-2.370370370370381,-3.950617283950692]],[1,[-2.4142661179698734,4.6748971193414945]],[5,[-4.148148148148167,0.5925925925926094]],[8,[-2.3218581751052625,-0.3636645334502191]],[3,[-3.753086419753074,-4.9382716049382225]],[4,[-1.119341563786023,-1.9314128943758533]],[7,[-2.172839506172835,5.3333333333332575]],[2,[-2.3703703703703525,2.5679012345678984]],[12,[-3.5555555555555713,7.308641975308547]]],"stroke":[[7,0],[4,0],[10,0],[6,0],[11,0],[16,0],[8,0],[15,0],[12,0],[5,0],[1,0],[2,0],[13,0],[3,0],[9,0],[14,0],[17,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16164610528699022118,{"inputs":[{"Node":{"node_id":7134154821675013808,"output_index":0,"lambda":false}},{"Node":{"node_id":12875520257830460085,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[600590258445096812,{"inputs":[{"Node":{"node_id":9778003574990260202,"output_index":0,"lambda":false}},{"Node":{"node_id":12435496696188763850,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[188,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[987.6111111111112,593.3888888888889]],[3,[1026.2777777777778,610.4999999999999]],[1,[1027.3333333333333,523.5555555555555]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[1,1],[3,3],[2,2]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[-16.66666666666663,0.22222222222228535]],[1,[28.22222222222217,-65.11111111111109]],[3,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3885641499621884510,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":600590258445096812,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[421,{"inputs":[{"Node":{"node_id":422,"output_index":0,"lambda":false}},{"Node":{"node_id":424,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[79,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":493,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[250,{"inputs":[{"Node":{"node_id":254,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6377392483726765,0.3630996922378644],"end":[0.6306417402456479,0.9306187973093224],"transform":[632.5762009234635,-34.77347770644815,7.911125258864406,143.91397960043895,1102.6156431423424,426.6593636915554]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6377392483726765,0.3630996922378644],"end":[0.6306417402456479,0.9306187973093224],"transform":[632.5762009234635,-34.77347770644815,7.911125258864406,143.91397960043895,1102.6156431423424,426.6593636915554]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[281,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[4,[929.6851851851852,121.58641975308646]],[3,[972.746913580247,118.22839506172843]],[1,[1026.168038408779,250.70576131687224]],[2,[998.8209876543212,150.42592592592595]],[6,[923.4629629629628,289.38888888888886]],[5,[923.3641975308644,158.72222222222226]],[7,[926.7222222222222,528.7962962962963]],[8,[1026.2777777777776,592.5]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[7,7],[2,2],[3,3],[6,6],[4,4],[8,8],[5,5]],"end_point":[[6,7],[5,6],[1,2],[7,8],[4,5],[3,4],[2,3],[8,1]],"handle_primary":[[3,[-17.77777777777783,-3.753086419753074]],[7,[0.0,0.0]],[2,[-4.543209876543415,-11.06172839506172]],[1,[-10.22770919067159,-29.761316872427727]],[8,[0.0,0.0]],[6,[0.2962962962964184,19.259259259259295]],[4,[-5.135802469135797,10.864197530864176]],[5,[0.0,11.061728395061747]]],"handle_end":[[4,[0.0,-11.061728395061747]],[5,[-0.2962962962964184,-19.259259259259295]],[6,[-2.370370370370324,-53.03703703703695]],[1,[4.543209876543187,11.06172839506172]],[7,[0.0,0.0]],[3,[5.135802469135797,-10.864197530864176]],[2,[17.77777777777783,3.753086419753089]],[8,null]],"stroke":[[1,0],[7,0],[8,0],[3,0],[4,0],[5,0],[2,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5382879283978921947,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[3,[794.0473251028808,582.3820301783265]],[5,[767.1831275720166,614.1625514403293]],[4,[789.2187928669412,601.4967933823075]],[1,[740.3456790123458,588.2030178326476]],[6,[751.1172839506169,611.1776406035664]],[2,[755.3312757201647,586.2448559670783]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[6,6],[3,3],[4,4],[5,5],[1,1]],"end_point":[[5,6],[1,2],[2,3],[6,1],[3,4],[4,5]],"handle_primary":[[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]],[3,[0.0,0.0]],[2,[9.481481481481524,0.4824094931645959]],[1,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]]],"handle_end":[[4,[11.149519890260535,-0.2794994541025062]],[2,[-9.305898491083669,-1.1412894375856697]],[6,[0.0,0.0]],[3,[8.427983539094612,-8.539557783673331]],[1,[-9.481481481481524,-0.4824094931645959]],[5,[0.0,0.0]]],"stroke":[[1,0],[5,0],[3,0],[6,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[312,{"inputs":[{"Node":{"node_id":316,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5105625446268484763,{"inputs":[{"Node":{"node_id":9422094883894860610,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[989999757220954936,{"inputs":[{"Node":{"node_id":10544930474333783117,"output_index":0,"lambda":false}},{"Node":{"node_id":5105625446268484763,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[172,{"inputs":[{"Node":{"node_id":173,"output_index":0,"lambda":false}},{"Node":{"node_id":208,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[436,{"inputs":[{"Node":{"node_id":439,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.7490196,"green":0.3764706,"blue":0.19215687,"alpha":1.0}],[0.08176100628930963,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0],"transform":[481.5000000000001,0.0,0.0,158.99999999999997,876.9999999999998,682.9999999999998]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.7490196,"green":0.3764706,"blue":0.19215687,"alpha":1.0}],[0.08176100628930963,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0],"transform":[481.5000000000001,0.0,0.0,158.99999999999997,876.9999999999998,682.9999999999998]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[94,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.5]],[1,[0.5,0.0]],[4,[0.0,0.5]],[3,[0.5,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[4,1],[2,3],[3,4],[1,2]],"handle_primary":[[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]]],"handle_end":[[3,[0.0,0.27589238888950707]],[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[4,[-0.275892388889507,0.0]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[467,{"inputs":[{"Node":{"node_id":465,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Round"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[327,{"inputs":[{"Node":{"node_id":331,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[218,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[6,[888.3518518518518,541.9814814814815]],[5,[880.5,566.7222222222222]],[2,[890.7057613168722,514.4753086419753]],[4,[874.0473251028807,569.7181069958847]],[1,[901.9820911446426,504.0199918711579]],[3,[872.8621399176955,563.858024691358]],[7,[886.574074074074,540.0555555555557]],[8,[891.0185185185185,531.9074074074074]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[3,3],[5,5],[1,1],[2,2],[7,7],[8,8],[6,6],[4,4]],"end_point":[[7,8],[2,3],[8,1],[4,5],[6,7],[1,2],[3,4],[5,6]],"handle_primary":[[1,[0.0,0.0]],[6,[0.0,0.0]],[2,[-3.0946502057612406,7.835390946502002]],[8,[0.0,0.0]],[5,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[2,[7.111111111111086,-11.522633744855966]],[7,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]],[8,[-7.693415637860312,3.5987654320987303]],[1,[3.0946502057612406,-7.835390946502002]],[3,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[5,0],[3,0],[7,0],[8,0],[4,0],[2,0],[1,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[78,{"inputs":[{"Node":{"node_id":79,"output_index":0,"lambda":false}},{"Node":{"node_id":477,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[451,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"instance":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":471,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[109,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"instance":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"delta":[[26,[1143.3348995566753,518.6358987999579]],[45,[1105.8203381535304,315.83979150469634]],[5,[914.9853953636192,333.78153826272217]],[22,[1000.3446147881664,518.0922095042602]],[14,[783.956275100461,458.8300762732051]],[37,[1302.6358631961166,363.1407602304008]],[35,[1281.975669959602,393.04367149377714]],[42,[1287.4125629165796,203.2961072952616]],[7,[758.9465674983644,277.2378515101559]],[33,[1284.1504271423933,435.99512585389954]],[32,[1323.839745728329,479.4902695097197]],[40,[1180.3057716641222,344.11163488097947]],[28,[1134.0921815298134,465.8980371172759]],[24,[1014.480536476308,543.1019171063567]],[6,[838.3252046702362,291.37377319829744]],[52,[939.3251404063708,207.7548507796705]],[11,[730.1310348263835,333.2378489670244]],[3,[943.8009280356002,277.78154080585364]],[15,[728.4999669392903,519.7232773913535]],[49,[1038.402865487009,182.635914058747]],[21,[990.5582074656068,498.5193948591411]],[4,[956.3057818366484,357.1601779777255]],[50,[1016.655293659099,296.810666155275]],[46,[1098.7523773094597,263.6456191177121]],[19,[988.3834502828158,483.83978387530175]],[30,[1277.62615559402,478.946580214022]],[36,[1387.451393324966,404.4611467034299]],[20,[969.8980142290924,494.7135697892568]],[18,[909.5485024066418,487.10191964948825]],[44,[1156.927131949119,259.8397940478278]],[41,[1216.7329544758718,262.5582405263166]],[34,[1256.9659623575055,413.8640589204806]],[38,[1223.8009153199428,370.7524103701693]],[9,[770.907732003715,320.7329951659761]],[29,[1205.8591685619167,441.9757081065748]],[43,[1210.2086829274988,227.76212560166044]],[47,[1073.742669707363,200.0339715210751]],[39,[1145.5096567394662,398.4805644507546]],[12,[783.956275100461,383.2572641712176]],[27,[1093.315484352482,509.93687006879384]],[23,[972.616460707581,519.7232773913535]],[8,[810.5970505896508,321.8203737573716]],[31,[1336.888288825075,539.8397813321702]],[2,[910.288570576692,217.7758226144784]],[10,[670.8689015953286,344.1116348809794]],[13,[885.0824841002429,442.5193974022726]],[17,[813.8591863638374,482.2087159882085]],[1,[865.1205730638582,195.5865278374037]],[48,[1078.092184072945,124.46115941908752]],[25,[1110.71354181481,529.509684713913]],[16,[763.8397711596442,482.7524052839062]],[51,[994.3640325354912,266.3640655962009]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"start_point":[[37,37],[17,17],[49,49],[25,25],[46,46],[18,18],[22,22],[33,33],[47,47],[19,19],[44,44],[6,6],[38,38],[9,9],[2,2],[7,7],[16,16],[13,13],[28,28],[15,15],[52,52],[48,48],[39,39],[40,40],[41,41],[27,27],[36,36],[12,12],[24,24],[10,10],[26,26],[23,23],[31,31],[30,30],[4,4],[3,3],[29,29],[11,11],[42,42],[45,45],[35,35],[14,14],[32,32],[34,34],[5,5],[43,43],[1,1],[21,21],[50,50],[8,8],[51,51],[20,20]],"end_point":[[34,35],[25,26],[24,25],[47,48],[13,14],[3,4],[2,3],[52,1],[1,2],[30,31],[51,52],[32,33],[4,5],[49,50],[15,16],[28,29],[45,46],[5,6],[16,17],[40,41],[18,19],[43,44],[11,12],[31,32],[35,36],[12,13],[41,42],[44,45],[20,21],[36,37],[38,39],[48,49],[6,7],[10,11],[37,38],[46,47],[22,23],[21,22],[27,28],[23,24],[29,30],[17,18],[7,8],[8,9],[42,43],[14,15],[39,40],[19,20],[9,10],[50,51],[33,34],[26,27]],"handle_primary":[[16,[14.13592168814148,-1.631067887093252]],[40,[12.504853801048512,-14.135921688141591]],[47,[-1.6310678870931952,-7.611650139768528]],[21,[0.0,0.0]],[2,[16.937999067312603,14.3156740497256]],[31,[0.0,0.0]],[38,[-17.941746758026056,-1.0873785913955205]],[1,[0.0,0.0]],[5,[-19.02912534942118,-15.766989575234843]],[50,[0.0,0.0]],[24,[39.145629290237935,9.786407322559626]],[48,[0.0,0.0]],[29,[20.116503940816983,1.631067887093252]],[44,[-21.74757182791018,14.135921688141591]],[12,[41.864075768726934,30.606794749262978]],[36,[0.0,0.0]],[10,[0.0,0.0]],[52,[-26.097086193492142,-12.504853801048256]],[43,[-16.310678870932634,13.048543096746071]],[22,[0.0,0.0]],[6,[-25.00970760209657,-1.0873785913954634]],[51,[-18.48543605372367,-25.009707602096626]],[27,[0.0,0.0]],[49,[-10.873785913954862,28.81553267198086]],[35,[8.699028731163935,-10.3300966182573]],[20,[0.0,0.0]],[17,[31.53397915046969,11.961164505350553]],[7,[0.0,0.0]],[42,[0.0,0.0]],[34,[0.0,0.0]],[19,[0.0,0.0]],[4,[0.0,0.0]],[3,[7.06796084407074,48.3883473171]],[37,[-48.38834731709994,-2.174757182791041]],[11,[26.097086193492142,5.980582252675276]],[45,[0.0,0.0]],[25,[14.679610983839666,-8.155339435466317]],[14,[-44.03883295151786,20.11650394081687]],[15,[0.0,0.0]],[13,[0.0,0.0]],[30,[26.097086193492032,5.436892956977488]],[28,[0.0,0.0]],[39,[0.0,0.0]],[23,[0.0,0.0]],[26,[0.0,0.0]],[9,[-26.64077548918988,2.7184464784887723]],[41,[15.427586663144211,-29.493915679540574]],[8,[0.0,0.0]],[18,[18.485436053723447,-2.7184464784887723]],[32,[-24.466018306398837,-28.81553267198086]],[33,[-13.048543096746243,-19.57281464511908]],[46,[-6.524271548372781,-16.310678870932577]]],"handle_end":[[33,[0.0,0.0]],[37,[17.941746758026056,1.0873785913955205]],[11,[-41.864075768726934,-30.606794749263088]],[28,[-20.11650394081721,-1.6310678870931952]],[40,[-18.48543605372356,35.33980422035398]],[27,[-8.15533943546643,25.00970760209657]],[26,[30.446600559074568,-5.980582252675276]],[43,[21.74757182791018,-14.135921688141565]],[25,[-12.504853801048284,-3.262135774186504]],[52,[21.791261123607796,0.5873785913955203]],[41,[-32.07766844616731,15.223300279537028]],[42,[16.310678870932634,-13.048543096746071]],[32,[13.048543096746243,19.57281464511908]],[29,[-26.097086193492032,-5.436892956977488]],[3,[5.436892956977545,-25.553396897794357]],[7,[-5.436892956977545,-19.029125349421292]],[38,[0.0,0.0]],[23,[-39.14562929023816,-9.786407322559626]],[19,[3.805825069884008,-5.436892956977601]],[48,[10.87378591395509,-28.81553267198086]],[36,[48.388347317099715,2.174757182790927]],[46,[1.6310678870931952,7.611650139768528]],[17,[-18.48543605372356,2.7184464784887723]],[16,[-31.53397915046969,-11.961164505350553]],[50,[18.48543605372356,25.009707602096626]],[1,[-14.628148339931158,-12.363432230293256]],[49,[-5.98058225267539,-75.02912280628982]],[18,[-11.41747520965282,-9.242718026861724]],[5,[25.00970760209657,1.0873785913954634]],[14,[0.0,0.0]],[13,[44.03883295151786,-20.11650394081687]],[8,[26.64077548918988,-2.7184464784887723]],[31,[24.466018306399064,28.81553267198086]],[15,[-14.13592168814148,1.631067887093252]],[44,[0.0,0.0]],[51,[26.097086193492032,12.50485380104834]],[39,[-9.034630967226803,10.21306109338667]],[34,[-8.699028731163935,10.330096618257244]],[47,[-22.83495041930587,36.42718281174942]],[45,[6.524271548372553,16.310678870932577]],[35,[-71.76698703210332,-41.864075768726934]],[4,[19.02912534942141,15.766989575234843]],[9,[27.18446478488761,-22.291261123607853]],[21,[-4.3495143655819675,-3.262135774186504]],[2,[-7.067960844070626,-48.3883473171]],[6,[0.0,0.0]],[20,[-4.8932036612795855,-5.980582252675276]],[12,[-31.533979150469577,-8.15533943546626]],[24,[-14.67961098383944,8.155339435466317]],[30,[-0.5436892956979591,-24.46601830639895]],[10,[-26.097086193492142,-5.980582252675276]],[22,[3.805825069884122,-4.3495143655819675]]],"stroke":[[25,0],[22,0],[3,0],[6,0],[40,0],[46,0],[38,0],[4,0],[10,0],[12,0],[39,0],[36,0],[50,0],[33,0],[26,0],[5,0],[30,0],[11,0],[27,0],[14,0],[15,0],[52,0],[51,0],[44,0],[23,0],[37,0],[8,0],[24,0],[19,0],[29,0],[32,0],[9,0],[41,0],[17,0],[42,0],[1,0],[48,0],[2,0],[43,0],[45,0],[47,0],[13,0],[21,0],[35,0],[18,0],[20,0],[28,0],[16,0],[34,0],[7,0],[31,0],[49,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":52}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::instances::Instances","alias":null}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12325841371509826180,{"inputs":[{"Node":{"node_id":6980979116665635870,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625],"transform":[139.824941251317,-21.014379437271643,45.64496496886203,416.4689172758892,1005.0,432.99999999999955]}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625],"transform":[139.824941251317,-21.014379437271643,45.64496496886203,416.4689172758892,1005.0,432.99999999999955]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[140,{"inputs":[{"Node":{"node_id":143,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[171,{"inputs":[{"Node":{"node_id":172,"output_index":0,"lambda":false}},{"Node":{"node_id":202,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[449,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow Lower","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17257434333682934071,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[319,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[229,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3707802522175443254,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[173,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[329,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14205611254835578455,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,208]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[411,{"persistent_metadata":{"reference":"Merge","display_name":"From Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,217]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[257,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[214,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[179,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[254,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[162,{"persistent_metadata":{"reference":"Merge","display_name":"Right Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":60}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[178,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[181,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4452902364641883403,{"persistent_metadata":{"reference":"Merge","display_name":"Soft Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12435496696188763850,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[433,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7135480377162524224,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[109,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16894739051789815098,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6710503329407068595,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,106]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[434,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[83,{"persistent_metadata":{"reference":"Merge","display_name":"Stone Cluster","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[232,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[259,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11155094820673141470,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16821952675128396603,{"persistent_metadata":{"reference":"Merge","display_name":"Main Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,157]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11807598261442997948,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[168,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,58]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[194,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[99,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[115,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[467,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[118,{"persistent_metadata":{"reference":"Merge","display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[331,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[108,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13606781735926093266,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10486443711686704000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[250,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[440,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[287,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14579754335592291854,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11377169273880889832,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[459,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[398,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[424,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[266,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[134,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[272,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[218,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14113040319560793790,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9422094883894860610,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[143,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[182,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8861964493222160710,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6980979116665635870,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[451,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow Upper","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[166,{"persistent_metadata":{"reference":"Merge","display_name":"Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1598976462838094167,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[427,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[169,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10544930474333783117,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17020523203516467057,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[90,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[103,{"persistent_metadata":{"reference":"Merge","display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[430,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[138,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[260,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14433811491576609500,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[126,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[140,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[457,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,238]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[442,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[120,{"persistent_metadata":{"reference":"Merge","display_name":"Ground Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[206,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[78,{"persistent_metadata":{"reference":"Merge","display_name":"Distant Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[989999757220954936,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[439,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[93,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[82,{"persistent_metadata":{"reference":"Merge","display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[94,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[79,{"persistent_metadata":{"reference":"Merge","display_name":"Sky","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[428,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[268,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[164,{"persistent_metadata":{"reference":"Merge","display_name":"Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[393,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,193]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[421,{"persistent_metadata":{"reference":"Merge","display_name":"Left Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,223]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[493,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[161,{"persistent_metadata":{"reference":"Merge","display_name":"Rocky Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,55]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[174,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[321,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,139]}}},"network_metadata":null}}],[283,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[122,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17911294938421300842,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[455,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[165,{"persistent_metadata":{"reference":"Merge","display_name":"Rocky Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[191,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11472292186872186521,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,43]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18142347460553706128,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5382879283978921947,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[413,{"persistent_metadata":{"reference":"Merge","display_name":"From Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[497,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3719764965605527929,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[292,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[128,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15277819403265847073,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17173383864410319040,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1644624352314732667,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[132,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[244,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[304,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9570557034533539493,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[119,{"persistent_metadata":{"reference":"Merge","display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[418,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[404,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[230,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[170,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[184,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15848750910363784662,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[478,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[102,{"persistent_metadata":{"reference":"Merge","display_name":"Agave Plant","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,19]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[171,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11279424538712841875,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[436,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[172,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[176,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[155,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[88,{"persistent_metadata":{"reference":"Merge","display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[200,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[318,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,139]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[290,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3930114406985796561,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[419,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16831252454255560063,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9778003574990260202,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6873123446543957690,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[227,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[415,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6272196533192700024,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[422,{"persistent_metadata":{"reference":"Merge","display_name":"Right Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[111,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9603838021022368374,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[446,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[275,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[256,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[85,{"persistent_metadata":{"reference":"Merge","display_name":"Left Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[193,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5364427239360309137,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[262,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11345069121502219134,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[175,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[114,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[144,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4454263454059119441,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16164610528699022118,{"persistent_metadata":{"reference":"Merge","display_name":"Spike Spire Corner Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,202]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12068777759187203228,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[481,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15552693212536925398,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[325,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,139]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[491,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[291,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16815500381887058038,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":true,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":" px","is_integer":true},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-1,1]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10278740841813346388,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16360261423333265502,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[487,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[188,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[463,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5714505144727602368,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[453,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,238]}}},"network_metadata":null}}],[5175066652268973319,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17414691604179185270,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[445,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[306,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[248,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[409,{"persistent_metadata":{"reference":"Merge","display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5105625446268484763,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[36935169817407978,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,160]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3885641499621884510,{"persistent_metadata":{"reference":"Merge","display_name":"Rock Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[190,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[469,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[96,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[406,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[281,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,121]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4913361824430066698,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12325841371509826180,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[465,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[77,{"persistent_metadata":{"reference":"Merge","display_name":"Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4633399390154487467,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[274,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,121]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[312,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[97478832511923699,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[75,{"persistent_metadata":{"reference":"Merge","display_name":"Slab Spires","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":45}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[450,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14335659566300901430,{"persistent_metadata":{"reference":"Merge","display_name":"Soft Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1453710883947581217,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7134154821675013808,{"persistent_metadata":{"reference":"Merge","display_name":"Left Slope Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11427960919145580782,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[76,{"persistent_metadata":{"reference":"Merge","display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":144}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[277,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2489761779922717592,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[396,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[87,{"persistent_metadata":{"reference":"Merge","display_name":"Ball","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,10]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[600590258445096812,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,169]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6015109908395573189,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[236,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9286544882258200464,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[177,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[159,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12875520257830460085,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14080831508667499826,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7148230379224894975,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[327,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[212,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[394,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[475,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15483449862348058100,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[224,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[208,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[485,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[202,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[117,{"persistent_metadata":{"reference":"Merge","display_name":"Stones","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,28]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12717405604755313921,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[323,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the stroke to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[316,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[105,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[74,{"persistent_metadata":{"reference":"Merge","display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,4]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[100,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6926019345498826421,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[477,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,253]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[310,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[402,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[238,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[496,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17245613731534563958,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[412,{"persistent_metadata":{"reference":"Merge","display_name":"From Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[180,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[196,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[81,{"persistent_metadata":{"reference":"Merge","display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,7]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2999157202967297847,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[220,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1635416892097245588,{"persistent_metadata":{"reference":"Merge","display_name":"Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[300,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[242,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[226,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"The vector elements, or group of vector elements, to apply the fill to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11891167879168294182,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Vector Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[448,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow Fissure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,238]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[408,{"persistent_metadata":{"reference":"Merge","display_name":"Reflections","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12768614558324028960,{"persistent_metadata":{"reference":"Merge","display_name":"Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"has_primary_output":true,"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[459.0,-501.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1450.0,80.0],"node_graph_top_right":[1468.796875,0.0]},"selection_undo_history":[[],[],[]],"selection_redo_history":[]}}},"collapsed":[],"name":"valley-of-spires.graphite","commit_hash":"","document_ptz":{"pan":[-507.74999999999994,-385.9351851851852],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":16815500381887058038,"output_index":0}}],"nodes":[[202,{"inputs":[{"Node":{"node_id":206,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[404,{"inputs":[{"Node":{"node_id":402,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[93,{"inputs":[{"Node":{"node_id":94,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[851.1666666666667,668.5377104806669]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[39.677869315599935,39.67786931560005]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[155,{"inputs":[{"Node":{"node_id":159,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.7529412,"green":0.34117648,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.6431373,"green":0.31764707,"blue":0.21176471,"alpha":1.0}]],"gradient_type":"Linear","start":[0.9001916129448388,0.7881778212017586],"end":[0.8902470335613286,0.6662432828529555]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.7529412,"green":0.34117648,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.6431373,"green":0.31764707,"blue":0.21176471,"alpha":1.0}]],"gradient_type":"Linear","start":[0.9001916129448388,0.7881778212017586],"end":[0.8902470335613286,0.6662432828529555]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[497,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,1.0]],[3,[1.0,1.0]],[1,[0.0,0.0]],[2,[1.0,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[3,3],[1,1]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[3,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[3,0],[1,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8861964493222160710,{"inputs":[{"Node":{"node_id":16894739051789815098,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":0.0390625}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":0.0390625}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[248,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[13,[955.9567901234568,612.4506172839507]],[11,[991.9074074074076,607.667262767384]],[1,[866.5679012345681,572.641975308642]],[5,[923.956790123457,545.6851851851852]],[2,[890.3765432098768,558.3271604938273]],[20,[850.4753086419754,600.0720164609053]],[12,[965.0432098765434,605.3395061728396]],[6,[944.141561350963,527.7098765432099]],[3,[884.6481481481485,571.7592592592594]],[19,[867.9970278920896,620.4835390946502]],[17,[915.067901234568,618.7716049382716]],[4,[898.8703703703707,571.5617283950618]],[14,[944.3024691358024,613.8333333333334]],[8,[1025.882716049383,576.7015952852717]],[18,[884.845679012346,621.141975308642]],[16,[922.574074074074,606.9197530864199]],[15,[935.0185185185186,608.3024691358025]],[10,[999.8086419753088,626.6728395061729]],[9,[1026.277777777778,628.0555555555557]],[7,[986.8703703703704,552.6481481481483]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[3,3],[4,4],[2,2],[7,7],[14,14],[12,12],[11,11],[15,15],[17,17],[13,13],[9,9],[6,6],[20,20],[8,8],[5,5],[10,10],[16,16],[19,19],[1,1],[18,18]],"end_point":[[5,6],[15,16],[18,19],[11,12],[9,10],[10,11],[3,4],[4,5],[12,13],[17,18],[19,20],[20,1],[8,9],[2,3],[13,14],[7,8],[16,17],[14,15],[6,7],[1,2]],"handle_primary":[[17,[0.0,0.0]],[6,[0.0,0.0]],[10,[-2.96296296296282,-1.1851851851851052]],[20,[0.0,0.0]],[9,[0.0,0.0]],[15,[0.0,0.0]],[18,[0.0,0.0]],[13,[0.0,0.0]],[14,[0.0,0.0]],[16,[0.0,0.0]],[7,[22.254029366644772,13.337995427526266]],[8,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[5,[0.0,0.5925925925926094]],[3,[0.0,0.0]],[11,[0.0,0.0]],[19,[-11.881115683584769,-0.11705532693190436]],[12,[0.0,0.0]]],"handle_end":[[8,[0.0,0.0]],[9,[2.962962962963047,1.1851851851851052]],[13,[2.1728395061727497,0.39506172839503506]],[6,[-11.851851851851848,-16.036008230452808]],[2,[0.5925925925926094,-3.555555555555543]],[18,[11.881115683584769,0.11705532693190436]],[5,[0.0,0.0]],[20,[0.0,0.0]],[10,[0.3950617283951487,3.117880051334623]],[1,[-10.271604938271707,4.543209876543187]],[17,[20.5432098765433,0.1975308641974607]],[11,[18.567901234567785,4.543209876543301]],[15,[5.135802469136024,0.9876543209877582]],[12,[2.7654320987655865,-2.7624450928566375]],[19,[0.0,0.0]],[7,[0.0,0.0]],[16,[2.3703703703704377,-1.7777777777778283]],[4,[-7.703703703703809,15.604938271604851]],[14,[4.740740740740762,0.7901234567901838]],[3,[-8.69135802469134,0.39506172839503506]]],"stroke":[[7,0],[2,0],[5,0],[11,0],[3,0],[15,0],[13,0],[19,0],[1,0],[20,0],[18,0],[9,0],[8,0],[16,0],[10,0],[6,0],[4,0],[17,0],[14,0],[12,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[419,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]],[4,[0.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[1,0],[2,0],[4,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[77,{"inputs":[{"Node":{"node_id":78,"output_index":0}},{"Node":{"node_id":448,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[108,{"inputs":[{"Node":{"node_id":109,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[858.7905598373798,601.6041802310946]},"exposed":false}},{"Value":{"tagged_value":{"F64":1.2246469000000002e-16},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.1014123874504275,0.11427520552998474]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.3799770244301692e-16,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[450,{"inputs":[{"Node":{"node_id":451,"output_index":0}},{"Node":{"node_id":467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[481,{"inputs":[{"Node":{"node_id":485,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.8980392,"green":0.67058825,"blue":0.28235295,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.3764706,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5563229660866629,0.005130077289715984],"end":[0.5563229660866629,0.9884201225302]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.8980392,"green":0.67058825,"blue":0.28235295,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.3764706,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5563229660866629,0.005130077289715984],"end":[0.5563229660866629,0.9884201225302]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[310,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[744.3996087994717,586.9732002235432]],[2,[734.9571457603006,587.5194584158918]],[5,[710.9477975918305,613.6358024691357]],[4,[706.1680384087791,607.8415637860082]],[6,[729.3449931412895,610.3875171467763]],[7,[779.7592592592597,612.6204267490609]],[3,[698.0912208504803,600.3792866941013]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[6,6],[4,4],[5,5],[1,1],[2,2],[7,7],[3,3]],"end_point":[[6,7],[2,3],[3,4],[5,6],[4,5],[7,1],[1,2]],"handle_primary":[[3,[0.0,0.0]],[5,[7.452522481329197,2.721536351166037]],[2,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[7,[0.0,0.0]],[6,[15.119646395366544,2.853223593964344]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,null],[7,[9.28638926992835,13.56378600823075]],[5,null],[3,[-2.494608558449272,-5.331900091455282]],[6,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]]],"stroke":[[1,0],[7,0],[3,0],[6,0],[2,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[170,{"inputs":[{"Node":{"node_id":171,"output_index":0}},{"Node":{"node_id":196,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4913361824430066698,{"inputs":[{"Node":{"node_id":11807598261442997948,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14080831508667499826,{"inputs":[{"Node":{"node_id":11377169273880889832,"output_index":0}},{"Node":{"node_id":14113040319560793790,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[232,{"inputs":[{"Node":{"node_id":236,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[434,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[0.8076864692090735,-0.4339622641509434]],[1,[0.5926327057682128,-0.43396226415094336]],[3,[1.0069833844920426,0.9999999999999988]],[4,[0.4436233919998075,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[1,1],[3,3]],"end_point":[[2,3],[3,4],[4,1],[1,2]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[465,{"inputs":[{"Node":{"node_id":469,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.8784314,"green":0.63529414,"blue":0.24313726,"alpha":1.0}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.543973941368078,0.19174161896974656],"end":[0.373641330960254,0.5573628465419693]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.8784314,"green":0.63529414,"blue":0.24313726,"alpha":1.0}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.543973941368078,0.19174161896974656],"end":[0.373641330960254,0.5573628465419693]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7148230379224894975,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[3,[488.5329218106997,551.6587029416252]],[7,[495.90740740740733,567.882982777016]],[10,[496.50000000000006,582.6234567901236]],[14,[496.49999999999994,603.4117893613783]],[4,[500.77983539094663,544.0208428593207]],[17,[448.3683127572017,617.6340115836006]],[2,[497.8388203017833,534.5393613778391]],[5,[500.4506172839507,547.5105547934772]],[19,[468.05555555555594,550.6710486206383]],[6,[490.17901234567904,556.0043819539711]],[12,[513.3888888888889,585.5544307531777]],[8,[502.6234567901235,563.1154930650816]],[11,[504.00617283950623,588.9444444444446]],[15,[496.30246913580254,612.3006782502672]],[13,[516.8017832647463,593.4437585733884]],[9,[510.261316872428,573.2078189300412]],[20,[480.89506172839504,532.4323654930657]],[16,[478.9197530864198,618.6875095259874]],[1,[506.7057613168725,531.9348803536052]],[18,[438.2283950617284,585.5544307531777]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[14,14],[7,7],[18,18],[11,11],[10,10],[13,13],[3,3],[9,9],[2,2],[17,17],[20,20],[15,15],[6,6],[16,16],[8,8],[5,5],[1,1],[12,12],[4,4],[19,19]],"end_point":[[1,2],[11,12],[5,6],[17,18],[14,15],[16,17],[19,20],[6,7],[7,8],[18,19],[2,3],[8,9],[4,5],[15,16],[3,4],[9,10],[10,11],[20,1],[13,14],[12,13]],"handle_primary":[[19,[0.0,0.0]],[6,[0.0,0.0]],[17,[0.0,0.0]],[10,[0.0,0.0]],[13,[0.0,0.0]],[2,[-7.188100137174104,2.6138545953361927]],[16,[0.0,0.0]],[12,[0.0,0.0]],[1,[0.0,0.0]],[11,[0.0,0.0]],[5,[-6.737997256515712,3.1824417009599983]],[20,[7.46503467504715,-4.02781143068205]],[14,[0.0,0.0]],[8,[0.0,0.0]],[18,[0.0,0.0]],[3,[4.565157750342848,-4.301783264746064]],[7,[0.0,0.0]],[9,[0.0,0.0]],[4,null],[15,[0.0,0.0]]],"handle_end":[[12,[-0.39506172839503506,-1.975308641975289]],[8,[-1.7777777777777717,-5.728395061728406]],[4,null],[7,[-3.6872427983540206,1.4485596707820605]],[6,[-2.508333333333439,-2.0902777777778283]],[1,[3.4386245260820374,-1.250408918575317]],[15,[0.0,0.0]],[18,[0.0,0.0]],[10,[-2.765432098765416,-3.555555555555543]],[16,[0.0,0.0]],[9,[6.716049382716108,-8.49382716049422]],[2,[0.27087722942241044,-5.120145445603839]],[3,null],[17,[0.0,0.0]],[11,[-3.851851851851848,0.7581344568814075]],[20,[0.0,0.0]],[13,[0.0,0.0]],[5,[0.0,0.0]],[19,[-3.394604481024089,3.2873037646699004]],[14,[-0.7901234567900701,-4.938271604938336]]],"stroke":[[2,0],[14,0],[3,0],[8,0],[15,0],[18,0],[10,0],[9,0],[4,0],[19,0],[12,0],[5,0],[13,0],[6,0],[1,0],[17,0],[20,0],[16,0],[7,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[325,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"delta":[[5,[660.5,187.83333333333331]],[3,[708.5,335.16666666666663]],[2,[733.1666666666666,489.16666666666663]],[9,[677.1666666666666,609.1666666666666]],[4,[695.8333333333333,239.16666666666663]],[8,[631.8333333333333,608.5]],[7,[619.8333333333333,577.1666666666666]],[1,[744.0,592.0]],[6,[619.8333333333333,207.83333333333331]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9],"remove":[],"start_point":[[4,4],[9,9],[6,6],[5,5],[3,3],[2,2],[1,1],[7,7],[8,8]],"end_point":[[1,2],[3,4],[5,6],[4,5],[2,3],[6,7],[7,8],[9,1],[8,9]],"handle_primary":[[7,[0.0,12.666666666666742]],[2,[-4.666666666666629,-50.666666666666686]],[1,[0.0,0.0]],[4,[-3.3333333333332575,-21.33333333333331]],[8,[12.666666666666742,4.666666666666629]],[5,[-36.0,-6.666666666666686]],[3,[-6.6666666666667425,-57.333333333333314]],[9,[18.66666666666663,-5.3333333333332575]],[6,[0.0,16.666666666666686]]],"handle_end":[[6,[0.0,-12.666666666666742]],[8,[-18.66666666666663,5.3333333333332575]],[7,[-12.666666666666742,-4.666666666666629]],[5,[0.0,-16.666666666666686]],[3,[3.3333333333332575,21.33333333333331]],[2,[6.6666666666667425,57.333333333333314]],[1,[4.666666666666629,50.66666666666663]],[4,[36.0,6.666666666666657]],[9,[0.0,0.0]]],"stroke":[[3,0],[9,0],[8,0],[4,0],[6,0],[7,0],[2,0],[1,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":9}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[496,{"inputs":[{"Node":{"node_id":497,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,600.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11377169273880889832,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14433811491576609500,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11891167879168294182,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[5,[118.93072702331962,598.7990397805213]],[2,[104.00617283950618,624.6097393689986]],[3,[148.91152263374485,614.1625514403293]],[6,[119.98422496570645,609.4218106995885]],[4,[126.900438957476,611.0020576131687]],[1,[112.52194787379976,598.7990397805213]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[6,6],[5,5],[4,4],[1,1],[2,2]],"end_point":[[5,6],[2,3],[1,2],[3,4],[6,1],[4,5]],"handle_primary":[[3,null],[6,[-4.477366255144005,-1.843621399176868]],[5,[0.0,0.0]],[1,[-2.370370370370395,22.25514403292175]],[2,[0.0,0.0]],[4,[-2.058260034882977,-0.6051267923739942]]],"handle_end":[[6,[0.0,0.0]],[2,[-21.11385459533605,1.053497942386798]],[3,null],[1,[0.0,0.0]],[5,[0.7023319615912413,-1.9314128943758533]],[4,[0.0,0.0]]],"stroke":[[5,0],[3,0],[4,0],[2,0],[6,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[76,{"inputs":[{"Node":{"node_id":77,"output_index":0}},{"Node":{"node_id":16164610528699022118,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[418,{"inputs":[{"Node":{"node_id":419,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[83.16666666666677,614.179527199694]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[294.3945373546583,138.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[449,{"inputs":[{"Node":{"node_id":450,"output_index":0}},{"Node":{"node_id":6015109908395573189,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14113040319560793790,{"inputs":[{"Node":{"node_id":9603838021022368374,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[138,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[116.38477366255144,723.5946502057614]],[2,[105.84979423868312,685.0102880658435]],[1,[126.55144032921808,714.7983539094649]],[3,[90.17901234567904,708.7139917695472]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[3,3],[1,1],[4,4]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[-2.4237705319430347,10.543401813951732]]],"handle_end":[[1,[16.460905349794245,13.695473251028716]],[4,[3.6604938271605647,11.166666666666742]],[3,[0.0,0.0]],[2,[2.6337448559670804,-11.456790123456472]]],"stroke":[[3,0],[2,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[169,{"inputs":[{"Node":{"node_id":170,"output_index":0}},{"Node":{"node_id":190,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[200,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[9,[1001.2407407407406,568.2037037037037]],[7,[988.9444444444443,571.9567901234568]],[8,[994.0802469135804,561.8388203017832]],[10,[1010.492379210486,553.0791800030486]],[4,[972.0555555555557,547.0185185185185]],[2,[993.9814814814814,530.7222222222222]],[1,[1004.392496062592,536.8475080018289]],[6,[988.3518518518518,565.8333333333333]],[5,[990.3271604938273,558.7222222222222]],[3,[974.574074074074,539.3148148148148]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[5,5],[2,2],[3,3],[4,4],[8,8],[1,1],[9,9],[7,7],[10,10],[6,6]],"end_point":[[3,4],[10,1],[8,9],[9,10],[5,6],[6,7],[4,5],[7,8],[1,2],[2,3]],"handle_primary":[[5,[1.1368683772161605e-13,0.0]],[2,[0.0,0.0]],[6,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[8,[0.0,0.0]],[1,[0.0,0.0]],[4,[5.818749999999909,2.0456767733078323]],[9,[0.0,0.0]],[10,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[3,[5.171433893884796,-5.185320665887616]],[9,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]],[8,[1.1368683772161605e-13,0.0]],[7,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[10,[2.600823045267589,7.538372631948732]]],"stroke":[[8,0],[4,0],[6,0],[7,0],[2,0],[9,0],[3,0],[1,0],[5,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6015109908395573189,{"inputs":[{"Node":{"node_id":459,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-8.0,2.6666666666000083]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[402,{"inputs":[{"Node":{"node_id":406,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15552693212536925398,{"inputs":[{"Node":{"node_id":1598976462838094167,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[262,{"inputs":[{"Node":{"node_id":266,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[433,{"inputs":[{"Node":{"node_id":434,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[628.6154039265571,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[122,{"inputs":[{"Node":{"node_id":126,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.8261898755429384,0.6803505808618764],"end":[0.9730393010117852,0.6150128281109604]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.8261898755429384,0.6803505808618764],"end":[0.9730393010117852,0.6150128281109604]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7135480377162524224,{"inputs":[{"Node":{"node_id":487,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[28.82327697714288,-49.808276940773226]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.057504143999955744},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[184,{"inputs":[{"Node":{"node_id":188,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[75,{"inputs":[{"Node":{"node_id":76,"output_index":0}},{"Node":{"node_id":161,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[277,{"inputs":[{"Node":{"node_id":1453710883947581217,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.92156863,"green":0.7294118,"blue":0.2784314,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[1.0246769250512615,0.027819435424882025],"end":[0.2667933279762451,0.9665428076110212]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.92156863,"green":0.7294118,"blue":0.2784314,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[1.0246769250512615,0.027819435424882025],"end":[0.2667933279762451,0.9665428076110212]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[448,{"inputs":[{"Node":{"node_id":449,"output_index":0}},{"Node":{"node_id":455,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11155094820673141470,{"inputs":[{"Node":{"node_id":97478832511923699,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17257434333682934071,{"inputs":[{"Node":{"node_id":13606781735926093266,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[168,{"inputs":[{"Node":{"node_id":169,"output_index":0}},{"Node":{"node_id":184,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[230,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[0.935534758874228,0.06746859421299994]],[3,[1.134036317002156,1.0722882682186752]],[1,[-0.03624142718978522,-0.003682959682299257]],[4,[0.2700473236113544,1.0652669412541609]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[4,1],[3,4],[2,3],[1,2]],"handle_primary":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[1,0],[3,0],[2,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[90,{"inputs":[{"Node":{"node_id":93,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5999119243817099,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.3201759714645238,0.5902044022091868],"end":[1.025282605251574,0.18308301136073535]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.5999119243817099,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.3201759714645238,0.5902044022091868],"end":[1.025282605251574,0.18308301136073535]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[463,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-4.833333333333348,600.0555555555555]],[3,[80.05555555555559,484.94444444444446]],[2,[-4.833333333333332,345.83333333333326]],[4,[129.38888888888889,628.0555555555557]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[4,4],[2,2],[1,1]],"end_point":[[2,3],[3,4],[1,2],[4,1]],"handle_primary":[[3,[32.038317168599576,69.73045501401077]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[-45.33333333333338,-98.66666666666669]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[4,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[292,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":312,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17414691604179185270,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[539.3641975308641,608.7633744855966]],[2,[530.2777777777771,564.9115226337452]],[4,[547.6604938271604,606.7880658436213]],[1,[546.1069958847736,566.7818930041152]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[4,1],[1,2],[3,4],[2,3]],"handle_primary":[[1,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[323,{"inputs":[{"Node":{"node_id":321,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[214,{"inputs":[{"Node":{"node_id":218,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6272196533192700024,{"inputs":[{"Node":{"node_id":481,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[28.815503095243457,-49.74366671015599]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.057504143999955744},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[74,{"inputs":[{"Node":{"node_id":75,"output_index":0}},{"Node":{"node_id":81,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[105,{"inputs":[{"Node":{"node_id":108,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7721675713724807,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.401555786122616,0.773953065673463],"end":[0.898982212168407,0.4370729973098963]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7721675713724807,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.401555786122616,0.773953065673463],"end":[0.898982212168407,0.4370729973098963]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17173383864410319040,{"inputs":[{"Node":{"node_id":15277819403265847073,"output_index":0}},{"Node":{"node_id":15552693212536925398,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[478,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":7135480377162524224,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1635416892097245588,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":11472292186872186521,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6926019345498826421,{"inputs":[{"Node":{"node_id":989999757220954936,"output_index":0}},{"Node":{"node_id":17020523203516467057,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17911294938421300842,{"inputs":[{"Node":{"node_id":17414691604179185270,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[400,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"delta":[[3,[499.1666666666666,380.94444444444446]],[1,[531.0946502057612,568.230452674897]],[2,[513.0925925925925,455.6111111111111]],[12,[399.3148148148148,564.0555555555555]],[7,[411.7592592592593,261.83333333333337]],[10,[378.8703703703703,472.7962962962963]],[11,[378.8703703703703,545.3888888888889]],[5,[482.47530864197535,316.35185185185185]],[8,[381.7345679012346,268.5493827160494]],[6,[457.9814814814815,279.4135802469136]],[9,[378.57407407407413,324.0555555555556]],[4,[487.3148148148147,333.24074074074076]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12],"remove":[],"start_point":[[1,1],[7,7],[4,4],[3,3],[6,6],[8,8],[10,10],[5,5],[2,2],[11,11],[9,9],[12,12]],"end_point":[[5,6],[2,3],[10,11],[7,8],[4,5],[12,1],[3,4],[11,12],[8,9],[9,10],[6,7],[1,2]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.51851851851859,-35.55555555555554]],[10,[-0.8888888888888573,38.81481481481478]],[4,[0.0,0.0]],[12,[22.22222222222223,-1.1851851851852189]],[9,[0.1975308641974607,16.395061728395035]],[5,[-2.1728395061728065,-7.703703703703695]],[3,[-1.7777777777777717,-12.444444444444455]],[7,[-5.925925925925924,-0.9876543209876444]],[6,[-20.345679012345727,-8.691358024691397]],[11,[0.0,6.518518518518476]],[8,[-6.716049382716051,13.62962962962962]]],"handle_end":[[6,[5.925925925925924,0.9876543209876444]],[5,[20.345679012345784,8.691358024691397]],[10,[0.0,-6.518518518518476]],[11,[-22.22222222222223,1.1851851851852189]],[4,[2.1728395061728065,7.703703703703695]],[3,[8.888888888888971,23.407407407407447]],[7,[6.716049382716051,-13.62962962962962]],[8,[-0.1975308641974607,-16.395061728395035]],[9,[0.8888888888888573,-38.81481481481478]],[12,[-37.99794238683137,-21.306584362139915]],[2,[1.7777777777777717,12.444444444444455]],[1,[6.51851851851859,35.55555555555554]]],"stroke":[[6,0],[1,0],[3,0],[10,0],[7,0],[8,0],[5,0],[12,0],[2,0],[4,0],[9,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":12}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[229,{"inputs":[{"Node":{"node_id":227,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[829.8099807176391,565.8945401302792]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.958532},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.920156284886552,12.362329004080864]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136304,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4454263454059119441,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.5]],[1,[0.5,0.0]],[3,[0.5,1.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[2,2],[4,4],[1,1],[3,3]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]],[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]]],"handle_end":[[4,[-0.275892388889507,0.0]],[2,[0.27589238888950707,0.0]],[1,[0.0,-0.275892388889507]],[3,[0.0,0.27589238888950707]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[260,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[3,[1.1461889241405476,1.0977967891967286]],[4,[0.4707515606101555,1.0016674771193048]],[1,[-0.06772020100134477,-0.27125764892979654]],[2,[0.8103689541744266,-0.2611110184526325]],[5,[0.05417500861004592,0.8211321210533473]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[4,4],[3,3],[5,5],[1,1],[2,2]],"end_point":[[5,1],[3,4],[1,2],[2,3],[4,5]],"handle_primary":[[2,[0.0,0.0]],[4,[-0.4165765520001096,-0.1805353560659575]],[3,[-2.220446049250313e-16,-2.220446049250313e-16]],[1,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.2875939062231115,0.06333186265853907]],[2,[0.0,0.0]],[4,null],[5,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[120,{"inputs":[{"Node":{"node_id":1635416892097245588,"output_index":0}},{"Node":{"node_id":140,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10486443711686704000,{"inputs":[{"Node":{"node_id":5714505144727602368,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.15803798551484238,0.5113172122965266],"end":[0.8867475285247997,0.49951059174236745]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.15803798551484238,0.5113172122965266],"end":[0.8867475285247997,0.49951059174236745]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[291,{"inputs":[{"Node":{"node_id":292,"output_index":0}},{"Node":{"node_id":306,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[493,{"inputs":[{"Node":{"node_id":496,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.16152954,"green":0.5000886,"blue":0.5234375,"alpha":1.0}],[0.33108336235841895,{"red":0.2509804,"green":0.54509807,"blue":0.5176471,"alpha":1.0}],[0.6158954287284122,{"red":0.48235294,"green":0.5568628,"blue":0.4,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.49411765,"blue":0.23137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5224609375,-0.000170829498767594],"end":[0.5224609375,0.9116247106204544]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.16152954,"green":0.5000886,"blue":0.5234375,"alpha":1.0}],[0.33108336235841895,{"red":0.2509804,"green":0.54509807,"blue":0.5176471,"alpha":1.0}],[0.6158954287284122,{"red":0.48235294,"green":0.5568628,"blue":0.4,"alpha":1.0}],[1.0,{"red":0.73333335,"green":0.49411765,"blue":0.23137255,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5224609375,-0.000170829498767594],"end":[0.5224609375,0.9116247106204544]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11807598261442997948,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[527.0733882030179,547.0898491083676]],[6,[530.2777777777774,564.9115226337451]],[3,[481.882716049383,533.8333333333337]],[4,[495.38065843621376,614.5137174211251]],[5,[541.9979423868313,611.7921810699589]],[2,[500.121399176955,531.6385459533608]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[1,1],[5,5],[6,6],[2,2],[4,4]],"end_point":[[6,1],[4,5],[1,2],[5,6],[2,3],[3,4]],"handle_primary":[[4,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[6,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[16.644617182340255,-0.4357059391355733]],[5,[0.0,0.0]]],"stroke":[[2,0],[5,0],[1,0],[3,0],[4,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[182,{"inputs":[{"Node":{"node_id":12768614558324028960,"output_index":0}},{"Node":{"node_id":268,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3930114406985796561,{"inputs":[{"Node":{"node_id":4454263454059119441,"output_index":0}},{"Value":{"tagged_value":{"F64":50.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[12875520257830460085,{"inputs":[{"Node":{"node_id":11891167879168294182,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[9778003574990260202,{"inputs":[{"Node":{"node_id":6926019345498826421,"output_index":0}},{"Node":{"node_id":5364427239360309137,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[244,{"inputs":[{"Node":{"node_id":248,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[415,{"inputs":[{"Node":{"node_id":418,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}],[0.5,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.80859375}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.0}]],"gradient_type":"Radial","start":[0.30473369160482133,-0.27613184386946],"end":[0.66690549049424,0.16136781742013184]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":1.0}],[0.5,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.80859375}],[1.0,{"red":0.827451,"green":0.36862746,"blue":0.20784314,"alpha":0.0}]],"gradient_type":"Radial","start":[0.30473369160482133,-0.27613184386946],"end":[0.66690549049424,0.16136781742013184]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[275,{"inputs":[{"Node":{"node_id":11427960919145580782,"output_index":0}},{"Node":{"node_id":283,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[446,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,1.0]],[1,[0.0,0.0]],[2,[1.0,0.0]],[3,[1.0,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[4,4],[1,1]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[4,0],[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[477,{"inputs":[{"Node":{"node_id":478,"output_index":0}},{"Node":{"node_id":6272196533192700024,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[306,{"inputs":[{"Node":{"node_id":310,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[166,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":393,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11472292186872186521,{"inputs":[{"Node":{"node_id":4452902364641883403,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-1367.319046874664,107.29818643577867]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.24444444444444,0.8618453375356869]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[88,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":96,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[259,{"inputs":[{"Node":{"node_id":257,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[894.1788584769913,562.0196920444174]},"exposed":false}},{"Value":{"tagged_value":{"F64":-2.3255084},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[15.813534861768243,49.86845076365074]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136165,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[430,{"inputs":[{"Node":{"node_id":433,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.71875,"green":0.37165833,"blue":0.20214844,"alpha":1.0}],[0.09210526315789476,{"red":0.7254902,"green":0.41960785,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.79607844,"green":0.49411765,"blue":0.22745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.71875,"green":0.37165833,"blue":0.20214844,"alpha":1.0}],[0.09210526315789476,{"red":0.7254902,"green":0.41960785,"blue":0.2,"alpha":1.0}],[1.0,{"red":0.79607844,"green":0.49411765,"blue":0.22745098,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[119,{"inputs":[{"Node":{"node_id":120,"output_index":0}},{"Node":{"node_id":134,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[290,{"inputs":[{"Node":{"node_id":291,"output_index":0}},{"Node":{"node_id":300,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[321,{"inputs":[{"Node":{"node_id":325,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.9254902,"green":0.7176471,"blue":0.28627452,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6317852697063873,0.02415325870852081],"end":[0.05910622380623476,0.9861828395407052]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.9254902,"green":0.7176471,"blue":0.28627452,"alpha":1.0}],[1.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6317852697063873,0.02415325870852081],"end":[0.05910622380623476,0.9861828395407052]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5364427239360309137,{"inputs":[{"Node":{"node_id":12325841371509826180,"output_index":0}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[181,{"inputs":[{"Node":{"node_id":182,"output_index":0}},{"Node":{"node_id":262,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14335659566300901430,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":14579754335592291854,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[212,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[1,[957.8271604938273,462.1234567901235]],[8,[965.6358024691358,465.1913580246914]],[7,[984.9112747301664,495.90740740740745]],[3,[925.6111111111112,527.7098765432099]],[6,[990.3271604938273,526.5246913580247]],[4,[922.2777777777778,549.4629629629628]],[2,[948.746913580247,472.10493827160496]],[5,[977.4876543209878,545.4876543209878]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[6,6],[7,7],[2,2],[8,8],[4,4],[5,5],[1,1],[3,3]],"end_point":[[4,5],[5,6],[8,1],[1,2],[2,3],[6,7],[7,8],[3,4]],"handle_primary":[[1,[0.0,0.0]],[2,[-6.123456790123441,10.962962962962932]],[4,[0.0,0.0]],[8,[0.0,0.0]],[7,[0.0,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[3,[-2.469135802469168,9.975308641975287]]],"handle_end":[[4,[0.0,0.0]],[1,[6.123456790123441,-10.96296296296299]],[7,[7.407407407407391,6.814814814814838]],[6,[0.0,0.0]],[8,[0.0,0.0]],[2,[2.469135802468827,-9.975308641975287]],[5,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[6,0],[5,0],[1,0],[7,0],[8,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14433811491576609500,{"inputs":[{"Node":{"node_id":9570557034533539493,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[274,{"inputs":[{"Node":{"node_id":275,"output_index":0}},{"Node":{"node_id":277,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[445,{"inputs":[{"Node":{"node_id":446,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[83.1666666666668,614.1795271996941]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[941.3333333333331,154.32047280030588]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[103,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":111,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[134,{"inputs":[{"Node":{"node_id":138,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[165,{"inputs":[{"Node":{"node_id":166,"output_index":0}},{"Node":{"node_id":16821952675128396603,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10278740841813346388,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[6,[729.3449931412895,610.3875171467763]],[1,[744.3996087994717,586.9732002235432]],[5,[710.9477975918305,613.6358024691357]],[4,[706.1680384087791,607.8415637860082]],[7,[779.7592592592597,612.6204267490609]],[3,[698.0912208504803,600.3792866941013]],[2,[734.9571457603006,587.5194584158918]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[5,5],[6,6],[2,2],[7,7],[1,1],[3,3],[4,4]],"end_point":[[6,7],[5,6],[2,3],[3,4],[7,1],[1,2],[4,5]],"handle_primary":[[5,[7.452522481329197,2.721536351166037]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[2.1947873799731497,4.691071467853249]],[6,[15.119646395366544,2.853223593964344]],[7,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[4,null],[3,[-2.494608558449272,-5.331900091455282]],[7,[9.28638926992835,13.56378600823075]],[1,[0.0,0.0]],[2,[6.496570644718986,-11.149519890260422]],[5,null]],"stroke":[[5,0],[3,0],[4,0],[7,0],[2,0],[1,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[196,{"inputs":[{"Node":{"node_id":200,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[398,{"inputs":[{"Node":{"node_id":396,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[227,{"inputs":[{"Node":{"node_id":230,"output_index":0}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[87,{"inputs":[{"Node":{"node_id":88,"output_index":0}},{"Node":{"node_id":90,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[118,{"inputs":[{"Node":{"node_id":119,"output_index":0}},{"Node":{"node_id":128,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[491,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[903.3333333333331,336.44444444444446]],[4,[851.3888888888889,542.2777777777777]],[6,[908.5000000000005,581.0432098765432]],[5,[876.9444444444443,582.1008216600221]],[3,[858.2777777777777,377.8333333333333]],[2,[867.3888888888889,344.05555555555554]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[3,3],[1,1],[6,6],[4,4],[5,5]],"end_point":[[2,3],[3,4],[4,5],[1,2],[5,6],[6,1]],"handle_primary":[[1,[0.0,0.0]],[5,[0.0,0.0]],[4,[-2.888888888888914,28.66666666666663]],[3,[-0.4444444444444571,14.444444444444455]],[6,[0.0,0.0]],[2,[-9.555555555555657,12.444444444444455]]],"handle_end":[[1,[9.555555555555657,-12.444444444444455]],[3,[2.888888888888914,-28.66666666666663]],[6,[0.16666666666685614,-0.2777777777777146]],[2,[0.4444444444444571,-14.444444444444455]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[4,0],[3,0],[1,0],[6,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[180,{"inputs":[{"Node":{"node_id":181,"output_index":0}},{"Node":{"node_id":256,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11345069121502219134,{"inputs":[{"Node":{"node_id":12068777759187203228,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[413,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":436,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[242,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[837.913808870599,583.4355281207133]],[4,[812.5713305898489,549.7821216278006]],[1,[842.2716049382715,561.8070416095107]],[3,[819.0679012345677,520.2695473251028]],[2,[821.8187014174667,518.4112940100595]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4],[5,5]],"end_point":[[5,1],[2,3],[3,4],[4,5],[1,2]],"handle_primary":[[4,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.0,0.0]],[3,[-1.4046639231823974,2.1801554641060648]],[1,[0.0,0.0]]],"handle_end":[[1,[10.88614540466392,16.621856424325642]],[5,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[1.4046639231823974,-2.1801554641060648]]],"stroke":[[2,0],[3,0],[1,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[102,{"inputs":[{"Node":{"node_id":103,"output_index":0}},{"Node":{"node_id":105,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[475,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[46.49999999999994,177.5]],[3,[81.20964791952444,29.23708276177412]],[6,[102.27777777777776,528.0555555555553]],[1,[22.827133919383556,312.5]],[5,[172.5,512.0555555555555]],[4,[85.15294924554185,45.49314128943759]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[2,2],[5,5],[3,3],[1,1],[6,6]],"end_point":[[4,5],[2,3],[3,4],[5,6],[6,1],[1,2]],"handle_primary":[[5,[0.0,0.0]],[3,[0.0,0.0]],[2,[15.777777777777828,-79.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[4,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[1,[-14.820678206547353,74.20776200602205]]],"stroke":[[5,0],[4,0],[1,0],[3,0],[2,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[304,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[6,[717.5809327846364,593.2681755829904]],[3,[680.2695473251027,600.730452674897]],[4,[699.4958847736627,594.497256515775]],[9,[713.2108672458469,610.5533455265964]],[7,[702.5246913580245,600.8931773149878]],[1,[645.3333333333333,614.013717421125]],[10,[712.0500685871053,614.4420508944315]],[8,[708.7139917695473,601.783950617284]],[2,[658.574074074074,609.6851851851851]],[5,[744.3996087994716,586.9732002235431]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[3,3],[6,6],[7,7],[1,1],[5,5],[10,10],[4,4],[9,9],[8,8],[2,2]],"end_point":[[9,10],[6,7],[7,8],[8,9],[4,5],[3,4],[1,2],[5,6],[2,3],[10,1]],"handle_primary":[[5,[0.0,0.0]],[4,[4.444444444444002,-5.662551440328798]],[8,[0.0,0.0]],[3,[7.374485596707928,-0.92181069958815]],[7,[0.0,0.0]],[9,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[1,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[10,[-58.35223289132739,3.851425709744945]]],"handle_end":[[7,[-2.89711934156378,-1.975308641975289]],[10,null],[8,[-2.5361987501905787,-3.706752019509281]],[1,[-4.740740740740762,4.148148148148152]],[9,[-0.08779149519853036,-2.2109123484780184]],[5,[10.516302710276136,-2.79869346321857]],[2,[-6.174173455107166,0.7717716818881399]],[4,[-5.794238683127446,-2.0192043895747247]],[3,[-1.6866098186769705,2.1488658430550913]],[6,[0.0,0.0]]],"stroke":[[9,0],[2,0],[8,0],[1,0],[4,0],[6,0],[5,0],[3,0],[10,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[164,{"inputs":[{"Node":{"node_id":165,"output_index":0}},{"Node":{"node_id":318,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[226,{"inputs":[{"Node":{"node_id":229,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.24641848672125644,0.5269240260497682],"end":[0.8641268166855021,0.5169975680471844]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.24641848672125644,0.5269240260497682],"end":[0.8641268166855021,0.5169975680471844]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[428,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[0.17362079214327678,-0.41509433962264153]],[4,[0.1596715565350542,1.0]],[2,[0.8076864692090735,-0.4339622641509434]],[3,[0.7349403737393546,1.0000000000000002]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[4,1],[2,3],[1,2],[3,4]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[4,0],[3,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[257,{"inputs":[{"Node":{"node_id":260,"output_index":0}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[10544930474333783117,{"inputs":[{"Node":{"node_id":17173383864410319040,"output_index":0}},{"Node":{"node_id":4633399390154487467,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[117,{"inputs":[{"Node":{"node_id":118,"output_index":0}},{"Node":{"node_id":122,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[459,{"inputs":[{"Node":{"node_id":463,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[319,{"inputs":[{"Node":{"node_id":290,"output_index":0}},{"Node":{"node_id":329,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12068777759187203228,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[8,[708.7139917695473,601.783950617284]],[5,[744.3996087994716,586.9732002235431]],[3,[680.2695473251027,600.730452674897]],[6,[717.5809327846364,593.2681755829904]],[10,[712.0500685871053,614.4420508944315]],[1,[645.3333333333333,614.013717421125]],[4,[699.4958847736627,594.497256515775]],[7,[702.5246913580245,600.8931773149878]],[2,[658.574074074074,609.6851851851851]],[9,[713.2108672458469,610.5533455265964]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[6,6],[5,5],[3,3],[2,2],[7,7],[10,10],[4,4],[8,8],[9,9],[1,1]],"end_point":[[2,3],[10,1],[8,9],[1,2],[5,6],[6,7],[7,8],[3,4],[9,10],[4,5]],"handle_primary":[[6,[-10.886145404663694,2.8971193415636662]],[8,[0.0,0.0]],[4,[4.444444444444002,-5.662551440328798]],[10,[-58.35223289132739,3.851425709744945]],[7,[0.0,0.0]],[3,[7.374485596707928,-0.92181069958815]],[2,[4.740740740740762,-4.148148148148152]],[1,[0.0,0.0]],[9,[0.0,0.0]],[5,[0.0,0.0]]],"handle_end":[[5,[10.516302710276136,-2.79869346321857]],[7,[-2.89711934156378,-1.975308641975289]],[1,[-4.740740740740762,4.148148148148152]],[3,[-1.6866098186769705,2.1488658430550913]],[10,null],[4,[-5.794238683127446,-2.0192043895747247]],[9,[-0.08779149519853036,-2.2109123484780184]],[6,[0.0,0.0]],[2,[-6.174173455107166,0.7717716818881399]],[8,[-2.5361987501905787,-3.706752019509281]]],"stroke":[[8,0],[10,0],[5,0],[4,0],[2,0],[1,0],[3,0],[6,0],[9,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[179,{"inputs":[{"Node":{"node_id":180,"output_index":0}},{"Node":{"node_id":250,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16815500381887058038,{"inputs":[{"Value":{"tagged_value":{"Artboard":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":74,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1024.0,768.0]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":1}},{"Value":{"tagged_value":{"String":"Artboard"},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null}},"import_index":5}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::artboard::CreateArtboardNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"core::option::Option>","alias":null}},{"Concrete":{"name":"graphene_core::table::Table","alias":null}}]},"import_index":0}},{"Node":{"node_id":2,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[412,{"inputs":[{"Node":{"node_id":413,"output_index":0}},{"Node":{"node_id":421,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[272,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[872.6913580246915,564.7407407407408]],[2,[885.701646090535,534.2283950617283]],[6,[873.7839506172841,571.9567901234568]],[4,[919.7592592592592,507.7592592592593]],[3,[896.2037037037037,507.6111111111111]],[5,[927.7592592592592,537.8333333333333]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[2,2],[1,1],[6,6],[3,3],[4,4],[5,5]],"end_point":[[4,5],[1,2],[6,1],[2,3],[5,6],[3,4]],"handle_primary":[[3,[5.629629629629449,-5.185185185185162]],[5,[0.0,0.0]],[6,[0.0,0.0]],[2,[2.6337448559671657,-9.349794238682987]],[1,[8.404909667028619,-14.163252363220296]],[4,[9.641681333516315,12.166883587532825]]],"handle_end":[[6,[0.0,0.0]],[2,[-6.29752559155645,5.8003525185389435]],[1,null],[3,[-6.222222222222285,-7.851851851851904]],[4,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[6,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[132,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[170.5082304526749,714.508230452675]],[4,[158.12962962962962,718.0637860082305]],[1,[172.61522633744855,706.3436213991771]],[3,[153.6522633744856,666.8374485596709]],[2,[158.95389422344155,655.6901143957208]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[3,3],[4,4],[5,5],[1,1],[2,2]],"end_point":[[1,2],[3,4],[4,5],[2,3],[5,1]],"handle_primary":[[1,[0.0,0.0]],[3,[-1.8436213991769537,9.744855967078138]],[4,[0.0,0.0]],[2,[0.0,0.0]],[5,[3.160493827160508,-3.5555555555554292]]],"handle_end":[[1,[10.930041152263357,25.448559670781947]],[2,[1.8436213991768968,-9.744855967078138]],[5,null],[4,[-3.403056460676396,3.828438518260782]],[3,[0.0,0.0]]],"stroke":[[2,0],[3,0],[5,0],[4,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18142347460553706128,{"inputs":[{"Node":{"node_id":3719764965605527929,"output_index":0}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[5714505144727602368,{"inputs":[{"Node":{"node_id":18142347460553706128,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[742.4503588311712,593.3522045638366]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.9530782},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[11.868580002725764,37.42791872115287]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136118,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3719764965605527929,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[-0.007635827307500006,0.8135210708932508]],[5,[0.5092009949861728,0.9569233045341342]],[4,[1.0925954941660798,1.0006513038165834]],[1,[0.024789182815927936,-0.19742232174172225]],[2,[0.5284291926980893,-0.05749241759918103]],[3,[0.9294778693529006,0.07804966382593222]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[6,6],[3,3],[2,2],[1,1],[5,5]],"end_point":[[1,2],[3,4],[6,1],[4,5],[5,6],[2,3]],"handle_primary":[[2,[0.21441988872806772,0.05895880273641681]],[6,[0.0,0.0]],[5,[-0.28124758738050376,-0.047835328360902984]],[4,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[5,[0.0,0.0]],[1,[-0.16942059711236046,-0.046585396643413435]],[4,[0.26857587477611267,0.04568009019878494]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[3,0],[4,0],[6,0],[5,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[194,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[5,[0.038029134760865314,0.7285470752399478]],[4,[0.9388148027481048,0.674134940686276]],[2,[0.2647731761418837,0.17920265855050785]],[3,[0.7287108039915611,0.06963660702488284]],[1,[-0.15531318767467384,0.11366419216517]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[2,2],[1,1],[5,5],[4,4],[3,3]],"end_point":[[4,5],[2,3],[3,4],[5,1],[1,2]],"handle_primary":[[3,[-0.06001521816071698,0.06545334966568245]],[1,[0.0,0.0]],[5,[0.0,0.0]],[2,[0.12249986382303002,-0.04615791866776875]],[4,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[1,[-0.1993257782423989,0.03454533724430142]],[2,[-0.2265909018579063,0.03511994027079236]],[3,[0.0,0.0]],[5,[0.0,0.0]]],"stroke":[[1,0],[5,0],[3,0],[4,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17020523203516467057,{"inputs":[{"Node":{"node_id":7148230379224894975,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.328125,"green":0.19633627,"blue":0.17047119,"alpha":1.0}]],"gradient_type":"Linear","start":[0.3458831403130609,0.8154173283216788],"end":[0.29832402234636923,0.9999999999999992]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[396,{"inputs":[{"Node":{"node_id":400,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}],[1.0,{"red":0.9098039,"green":0.6862745,"blue":0.27058825,"alpha":1.0}]],"gradient_type":"Linear","start":[0.03910157250347135,0.9695090157857073],"end":[0.36170698072938423,0.042039957474503786]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.7176471,"green":0.28627452,"blue":0.16862746,"alpha":1.0}],[1.0,{"red":0.9098039,"green":0.6862745,"blue":0.27058825,"alpha":1.0}]],"gradient_type":"Linear","start":[0.03910157250347135,0.9695090157857073],"end":[0.36170698072938423,0.042039957474503786]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[85,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":155,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[427,{"inputs":[{"Node":{"node_id":428,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[583.9293351067386,697.6163522012579]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[256,{"inputs":[{"Node":{"node_id":259,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.19879202692409503,0.5201781689919184],"end":[0.8398128222157668,0.5168778892557565]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.19879202692409503,0.5201781689919184],"end":[0.8398128222157668,0.5168778892557565]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[287,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[954.864197530864,116.14814814814812]],[2,[934.9526748971192,114.67283950617282]],[5,[904.5,283.46296296296293]],[7,[944.7962962962962,568.2037037037037]],[4,[910.06378600823,174.98559670781898]],[3,[913.619341563786,134.1625514403292]],[6,[898.2777777777778,520.5]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[4,4],[3,3],[2,2],[7,7],[6,6],[5,5],[1,1]],"end_point":[[6,7],[4,5],[3,4],[1,2],[7,1],[2,3],[5,6]],"handle_primary":[[5,[-3.5555555555556566,34.37037037037038]],[3,[-2.2386831275719032,10.008230452674894]],[2,[-9.481481481481635,1.8436213991769392]],[6,[0.0,0.0]],[7,[0.0,0.0]],[1,[0.0,0.0]],[4,[-0.7901234567891606,29.102880658436305]]],"handle_end":[[2,[2.677546335770103,-11.970207148147836]],[1,[9.481481481481635,-1.8436213991769392]],[5,[0.0,0.0]],[3,[0.370701337431683,-13.654165928739786]],[4,[3.5555555555554292,-34.37037037037038]],[7,[0.0,0.0]],[6,[0.0,0.0]]],"stroke":[[2,0],[7,0],[1,0],[6,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[318,{"inputs":[{"Node":{"node_id":319,"output_index":0}},{"Node":{"node_id":323,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[178,{"inputs":[{"Node":{"node_id":179,"output_index":0}},{"Node":{"node_id":244,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16821952675128396603,{"inputs":[{"Node":{"node_id":3885641499621884510,"output_index":0}},{"Node":{"node_id":36935169817407978,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[36935169817407978,{"inputs":[{"Node":{"node_id":15848750910363784662,"output_index":0}},{"Node":{"node_id":11279424538712841875,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[411,{"inputs":[{"Node":{"node_id":412,"output_index":0}},{"Node":{"node_id":415,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[442,{"inputs":[{"Node":{"node_id":445,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}],[0.14354235440709684,{"red":0.5882353,"green":0.30588236,"blue":0.20392157,"alpha":1.0}],[0.5,{"red":0.6784314,"green":0.33333334,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.76953125,"green":0.4772935,"blue":0.21943665,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5063739376770537,0.01352247091271197],"end":[0.5049575070821529,1.015819012091678]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}],[0.14354235440709684,{"red":0.5882353,"green":0.30588236,"blue":0.20392157,"alpha":1.0}],[0.5,{"red":0.6784314,"green":0.33333334,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.76953125,"green":0.4772935,"blue":0.21943665,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5063739376770537,0.01352247091271197],"end":[0.5049575070821529,1.015819012091678]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14205611254835578455,{"inputs":[{"Node":{"node_id":14335659566300901430,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[-1339.7031164295145,65.50112655997924]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.042402443},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.244995417859058,0.8619572141015625]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[4.90381723950611e-18,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[100,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,1.0]],[1,[-0.03917736275965821,1.5785983631388945e-15]],[3,[1.0,1.0]],[2,[0.9501947601024644,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[1,1],[3,3],[2,2],[4,4]],"end_point":[[1,2],[4,1],[2,3],[3,4]],"handle_primary":[[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"stroke":[[2,0],[1,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[162,{"inputs":[{"Node":{"node_id":164,"output_index":0}},{"Node":{"node_id":274,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9422094883894860610,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[6,[530.2777777777774,564.9115226337451]],[3,[481.882716049383,533.8333333333337]],[5,[541.9979423868313,611.7921810699589]],[4,[495.38065843621376,614.5137174211251]],[2,[500.121399176955,531.6385459533608]],[1,[527.0733882030179,547.0898491083676]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[3,3],[6,6],[4,4],[5,5]],"end_point":[[2,3],[3,4],[4,5],[5,6],[6,1],[1,2]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[5.684341886080804e-14,0.0]],[5,[0.0,0.0]],[6,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[5,[0.0,0.0]],[2,[0.0,0.0]],[1,[16.644617182340255,-0.4357059391355733]],[3,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[6,0],[4,0],[3,0],[1,0],[5,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[193,{"inputs":[{"Node":{"node_id":191,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[965.2687196297846,544.9034434174798]},"exposed":false}},{"Value":{"tagged_value":{"F64":-1.7199705},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[17.59013219658168,55.471003102038694]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136257,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[224,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"delta":[[17,[877.4053497942385,607.1831275720164]],[6,[819.3312757201645,537.1255144032921]],[10,[827.364197530864,555.9567901234567]],[2,[773.1090534979423,610.0802469135801]],[18,[876.3518518518517,620.2201646090534]],[14,[864.6316872427983,543.3148148148147]],[11,[830.3930041152262,568.5987654320987]],[19,[742.2503429355281,620.0445816186556]],[12,[837.1090534979422,574.2613168724279]],[9,[825.2572016460904,550.6893004115226]],[7,[817.6193415637858,545.6851851851851]],[13,[852.648148148148,535.9403292181069]],[16,[858.4423868312756,599.2818930041151]],[15,[874.7716049382715,566.491769547325]],[1,[741.4602194787379,611.9677640603566]],[8,[825.5205761316871,544.7633744855966]],[4,[790.0967078189299,592.170781893004]],[3,[779.9567901234567,598.5451457288699]],[5,[819.0679012345677,520.2695473251028]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"remove":[],"start_point":[[18,18],[11,11],[15,15],[4,4],[16,16],[19,19],[8,8],[9,9],[13,13],[10,10],[1,1],[17,17],[14,14],[6,6],[2,2],[5,5],[12,12],[3,3],[7,7]],"end_point":[[1,2],[8,9],[2,3],[19,1],[6,7],[13,14],[11,12],[17,18],[15,16],[5,6],[3,4],[14,15],[7,8],[12,13],[10,11],[4,5],[9,10],[18,19],[16,17]],"handle_primary":[[2,[4.609053497942341,-0.9218106995883772]],[1,[0.0,0.0]],[8,[0.0,0.0]],[5,[0.0,0.0]],[4,[1.0534979423869115,-4.345679012345613]],[10,[1.7119341563786747,1.316872427983526]],[17,[0.0,0.0]],[3,[5.530864197530832,-1.8969975807218589]],[19,[-21.66213092273972,1.775584501863932]],[18,[-1.843621399176982,1.975308641975289]],[16,[0.0,0.0]],[7,[1.4485596707819468,2.633744855967052]],[9,[0.0,0.0]],[14,[3.68724279835385,7.90123456790127]],[12,[0.0,0.0]],[15,[0.0,0.0]],[11,[0.658436213991763,2.1698525002639144]],[13,[0.0,0.0]],[6,[0.0,0.0]]],"handle_end":[[18,[21.421124828532356,-1.7558299039781105]],[5,[-0.39506172839503506,-3.160493827160508]],[7,[-5.135802469135797,4.609053497942341]],[1,[-4.609053497942341,0.9218106995883772]],[8,[1.1851851851852189,-2.502057613168745]],[10,[-0.658436213991763,-2.1698525002639144]],[12,[-7.637860082304542,12.641975308641918]],[19,[0.0,0.0]],[2,[-5.530864197530832,1.8969975807218589]],[14,[0.0,0.0]],[3,[-1.0534979423869115,4.345679012345613]],[11,[-2.10699588477371,-0.3950617283951487]],[17,[1.843621399176982,-1.975308641975289]],[4,[-16.987654320987644,28.049382716049426]],[13,[-3.68724279835385,-7.90123456790127]],[15,[2.765432098765359,-11.851851851851848]],[9,[-1.7119341563786747,-1.316872427983526]],[6,[-1.4485596707819468,-2.633744855967052]],[16,[-5.1358024691359105,-5.00411522633749]]],"stroke":[[19,0],[10,0],[1,0],[14,0],[15,0],[3,0],[18,0],[11,0],[4,0],[6,0],[9,0],[5,0],[17,0],[2,0],[12,0],[16,0],[8,0],[13,0],[7,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":19}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14579754335592291854,{"inputs":[{"Node":{"node_id":1644624352314732667,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":0.0}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":0.0}]],"gradient_type":"Radial","start":[0.49999999999999994,0.5000000000000009],"end":[0.9003149237651733,0.5000000000000009]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7134154821675013808,{"inputs":[{"Node":{"node_id":408,"output_index":0}},{"Node":{"node_id":14205611254835578455,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[457,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[2,[80.05555555555559,484.94444444444446]],[3,[129.38888888888889,628.0555555555557]],[1,[-4.833333333333332,345.83333333333326]]]},"segments":{"add":[1,2],"remove":[],"start_point":[[1,1],[2,2]],"end_point":[[1,2],[2,3]],"handle_primary":[[2,[32.038317168599576,69.73045501401077]],[1,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[-45.33333333333338,-98.66666666666669]]],"stroke":[[2,0],[1,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[115,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.0]],[4,[0.0,1.0]],[3,[1.0,1.0]],[1,[-0.04384002017081715,1.8188575645616826e-15]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[1,1],[3,3]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6710503329407068595,{"inputs":[{"Node":{"node_id":16831252454255560063,"output_index":0}},{"Node":{"node_id":10486443711686704000,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9570557034533539493,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[789.2187928669412,601.4967933823075]],[2,[755.3312757201647,586.2448559670783]],[1,[740.3456790123458,588.2030178326476]],[6,[751.1172839506169,611.1776406035664]],[3,[794.0473251028808,582.3820301783265]],[5,[767.1831275720166,614.1625514403293]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[5,5],[4,4],[6,6],[2,2],[1,1]],"end_point":[[5,6],[2,3],[1,2],[3,4],[4,5],[6,1]],"handle_primary":[[1,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[6,[0.0,0.0]],[5,[-11.149519890260535,0.2794994541025062]],[2,[9.481481481481524,0.4824094931645959]],[3,[0.0,0.0]]],"handle_end":[[6,[0.0,0.0]],[2,[-9.305898491083669,-1.1412894375856697]],[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[3,[8.427983539094612,-8.539557783673331]],[1,[-9.481481481481524,-0.4824094931645959]]],"stroke":[[1,0],[5,0],[6,0],[4,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5175066652268973319,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[1.0362898771040632,0.9994054840058096]],[4,[0.0,1.0]],[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[2,3],[4,1],[1,2],[3,4]],"handle_primary":[[2,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]]],"stroke":[[3,0],[4,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[177,{"inputs":[{"Node":{"node_id":178,"output_index":0}},{"Node":{"node_id":238,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[208,{"inputs":[{"Node":{"node_id":212,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15277819403265847073,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":4913361824430066698,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[99,{"inputs":[{"Node":{"node_id":100,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[827.4018790826805,704.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[74.57030178326477,63.99999999999989]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[161,{"inputs":[{"Node":{"node_id":162,"output_index":0}},{"Node":{"node_id":168,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17245613731534563958,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,0.5]],[3,[0.5,1.0]],[1,[0.5,0.0]],[2,[1.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[2,2],[3,3]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[1,[0.27589238888950707,0.0]],[3,[-0.275892388889507,0.0]],[2,[0.0,0.27589238888950707]],[4,[0.0,-0.275892388889507]]],"handle_end":[[4,[-0.275892388889507,0.0]],[1,[0.0,-0.275892388889507]],[3,[0.0,0.27589238888950707]],[2,[0.27589238888950707,0.0]]],"stroke":[[2,0],[3,0],[1,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[394,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":404,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[254,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[1,[887.506172839506,620.2933732713938]],[2,[999.8086419753088,626.6728395061729]],[5,[910.5246913580244,598.202467627757]],[3,[1012.648148148148,620.7933732713938]],[4,[1004.3518518518516,600.7306004720272]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[4,4],[3,3],[2,2],[1,1]],"end_point":[[3,4],[4,5],[2,3],[1,2],[5,1]],"handle_primary":[[3,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[1,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[5,[0.0,0.0]],[4,[0.0,0.0]],[2,[0.0,0.0]],[1,[-43.25925925925878,-1.3827160493827932]]],"stroke":[[3,0],[2,0],[4,0],[5,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[83,{"inputs":[{"Node":{"node_id":85,"output_index":0}},{"Node":{"node_id":117,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[114,{"inputs":[{"Node":{"node_id":115,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[926.5490676442352,657.3888888888888]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[97.92901234567933,111.111111111111]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[487,{"inputs":[{"Node":{"node_id":491,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.5546875,"green":0.30678105,"blue":0.24050903,"alpha":1.0}],[1.0,{"red":0.41015625,"green":0.26908994,"blue":0.22590637,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6510643291021605,0.0026199374677413345],"end":[0.6510643291021605,0.8853991419751945]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.5546875,"green":0.30678105,"blue":0.24050903,"alpha":1.0}],[1.0,{"red":0.41015625,"green":0.26908994,"blue":0.22590637,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6510643291021605,0.0026199374677413345],"end":[0.6510643291021605,0.8853991419751945]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[316,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[740.3456790123458,588.2030178326476]],[2,[755.3312757201647,586.2448559670783]],[3,[794.0473251028808,582.3820301783265]],[4,[789.2187928669412,601.4967933823075]],[6,[751.1172839506169,611.1776406035664]],[5,[767.1831275720166,614.1625514403293]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[4,4],[3,3],[1,1],[6,6],[2,2],[5,5]],"end_point":[[2,3],[5,6],[6,1],[1,2],[3,4],[4,5]],"handle_primary":[[6,[0.0,0.0]],[4,[-8.427983539094612,8.539557783673331]],[2,[9.481481481481524,0.4824094931645959]],[1,[0.0,0.0]],[3,[0.0,0.0]],[5,[-11.149519890260535,0.2794994541025062]]],"handle_end":[[4,[11.149519890260535,-0.2794994541025062]],[2,[-9.305898491083669,-1.1412894375856697]],[6,[0.0,0.0]],[1,[-9.481481481481524,-0.4824094931645959]],[3,[8.427983539094612,-8.539557783673331]],[5,[0.0,0.0]]],"stroke":[[1,0],[4,0],[3,0],[2,0],[5,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[97478832511923699,{"inputs":[{"Node":{"node_id":2999157202967297847,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.14917418},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136096,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[176,{"inputs":[{"Node":{"node_id":177,"output_index":0}},{"Node":{"node_id":232,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12717405604755313921,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":15483449862348058100,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1644624352314732667,{"inputs":[{"Node":{"node_id":3930114406985796561,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[409,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":442,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[238,{"inputs":[{"Node":{"node_id":242,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[3707802522175443254,{"inputs":[{"Node":{"node_id":10278740841813346388,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[440,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[2,[1.0,0.0]],[4,[0.0387096774193552,1.0]],[1,[0.0,0.0]],[3,[1.035483870967742,1.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[3,3],[1,1],[2,2]],"end_point":[[1,2],[2,3],[3,4],[4,1]],"handle_primary":[[4,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[2,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]],[4,[0.0,0.0]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9603838021022368374,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[3,[698.0912208504803,600.3792866941013]],[5,[710.9477975918305,613.6358024691357]],[6,[729.3449931412895,610.3875171467763]],[1,[744.3996087994717,586.9732002235432]],[4,[706.1680384087791,607.8415637860082]],[2,[734.9571457603006,587.5194584158918]],[7,[779.7592592592597,612.6204267490609]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[7,7],[3,3],[2,2],[4,4],[5,5],[6,6],[1,1]],"end_point":[[6,7],[3,4],[1,2],[5,6],[4,5],[2,3],[7,1]],"handle_primary":[[5,[7.452522481329197,2.721536351166037]],[1,[0.0,0.0]],[3,[0.0,0.0]],[6,[15.119646395366544,2.853223593964344]],[4,[2.1947873799731497,4.691071467853249]],[7,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[1,[0.0,0.0]],[5,null],[7,[9.28638926992835,13.56378600823075]],[6,[0.0,0.0]],[3,[-2.494608558449272,-5.331900091455282]],[4,null],[2,[6.496570644718986,-11.149519890260422]]],"stroke":[[5,0],[4,0],[1,0],[3,0],[7,0],[2,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[471,{"inputs":[{"Node":{"node_id":475,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[300,{"inputs":[{"Node":{"node_id":304,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[331,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"delta":[[11,[675.4629629629632,591.0185185185186]],[8,[446.6563786008233,618.9032921810701]],[10,[750.8539094650207,617.9375857338821]],[4,[563.1666666666666,433.38888888888886]],[5,[540.9444444444443,605.8710283878144]],[1,[659.4434537418081,187.67146776406028]],[6,[523.3861454046643,611.9385002286241]],[7,[486.7770919067218,613.3724279835391]],[9,[661.5370370370372,619.7592592592594]],[3,[588.0884773662551,227.52880658436212]],[2,[622.9855967078189,184.4670781893004]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11],"remove":[],"start_point":[[7,7],[9,9],[5,5],[3,3],[1,1],[4,4],[8,8],[10,10],[6,6],[11,11],[2,2]],"end_point":[[8,9],[7,8],[3,4],[5,6],[11,1],[10,11],[1,2],[9,10],[2,3],[4,5],[6,7]],"handle_primary":[[2,[-6.716049382716051,0.9218106995884908]],[4,[-10.222222222222172,79.55555555555549]],[8,[0.0,0.0]],[11,[0.0,0.0]],[9,[43.09465020576113,-0.9876543209876444]],[5,[0.0,0.0]],[10,[1.1851851851849915,-37.53086419753106]],[6,[0.0,0.0]],[1,[-3.9798811156837246,-1.1315348270080108]],[3,[-3.950617283950692,42.13991769547326]],[7,[-3.511659807956221,0.819387288523103]]],"handle_end":[[4,[0.0,0.0]],[3,[10.222222222222172,-79.55555555555549]],[1,[6.716049382716051,-0.9218106995884624]],[9,[-22.386831275720624,5.3991769547326385]],[11,null],[2,[3.950617283950692,-42.13991769547323]],[5,[5.5601280292639785,-9.422953818016254]],[10,[0.0,0.0]],[6,[5.110425979711636,-1.1924327285993286]],[8,[-14.51772944216873,0.33272107201298695]],[7,[1.5363511659809888,-3.599451303154865]]],"stroke":[[2,0],[4,0],[5,0],[8,0],[3,0],[6,0],[7,0],[9,0],[10,0],[11,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":11}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[191,{"inputs":[{"Node":{"node_id":194,"output_index":0}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[6980979116665635870,{"inputs":[{"Node":{"node_id":5175066652268973319,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[486.78967826851385,539.8989473007496]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.14917418},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[24.603566707484493,77.5880766500041]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.12623993859136096,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[393,{"inputs":[{"Node":{"node_id":394,"output_index":0}},{"Node":{"node_id":398,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[424,{"inputs":[{"Node":{"node_id":427,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.72265625,"green":0.3808298,"blue":0.2117157,"alpha":1.0}],[0.07456140350877193,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.72265625,"green":0.3808298,"blue":0.2117157,"alpha":1.0}],[0.07456140350877193,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[82,{"inputs":[{"Node":{"node_id":83,"output_index":0}},{"Node":{"node_id":102,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[455,{"inputs":[{"Node":{"node_id":453,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":6.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[144,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[0.5,1.0]],[2,[1.0,0.5]],[1,[0.5,0.0]],[4,[0.0,0.5]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[2,2],[1,1],[4,4]],"end_point":[[4,1],[3,4],[1,2],[2,3]],"handle_primary":[[2,[0.0,0.27589238888950707]],[1,[0.27589238888950707,0.0]],[4,[0.0,-0.275892388889507]],[3,[-0.275892388889507,0.0]]],"handle_end":[[1,[0.0,-0.275892388889507]],[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]]],"stroke":[[3,0],[4,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[175,{"inputs":[{"Node":{"node_id":176,"output_index":0}},{"Node":{"node_id":226,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[206,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"delta":[[13,[967.3148148148148,531.9074074074074]],[11,[975.1666666666664,511.3148148148148]],[15,[1001.8333333333334,567.0185185185184]],[2,[988.351851851852,494.72222222222223]],[3,[971.3148148148148,466.5740740740741]],[8,[972.5274348422496,495.6732967535437]],[6,[967.9074074074072,482.8703703703703]],[5,[963.3148148148148,466.8703703703703]],[10,[968.2037037037036,504.05555555555554]],[7,[965.9814814814814,501.38888888888886]],[1,[1009.6296296296296,552.8888888888889]],[12,[981.6851851851852,523.1666666666666]],[14,[974.574074074074,539.3148148148148]],[4,[956.3024691358024,462.55639384240214]],[9,[973.0925925925924,496.5]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"remove":[],"start_point":[[5,5],[12,12],[9,9],[8,8],[14,14],[2,2],[6,6],[4,4],[3,3],[15,15],[10,10],[1,1],[11,11],[7,7],[13,13]],"end_point":[[3,4],[1,2],[9,10],[6,7],[10,11],[4,5],[13,14],[15,1],[5,6],[2,3],[7,8],[8,9],[11,12],[12,13],[14,15]],"handle_primary":[[7,[0.0,0.0]],[15,[0.0,0.0]],[14,[0.0,0.0]],[4,[0.0,0.0]],[8,[0.0,0.0]],[10,[0.0,0.0]],[12,[-4.888888888889028,8.59259259259261]],[9,[0.0,0.0]],[6,[-5.333333333333144,8.296296296296305]],[3,[-4.395061728394808,-4.740740740740705]],[1,[0.0,0.0]],[13,[0.0,0.0]],[11,[3.703703703703809,-0.7407407407407618]],[2,[-6.51851851851859,-12.148148148148152]],[5,[2.814814814814781,3.7037037037036953]]],"handle_end":[[13,[-4.296296296296418,-2.6666666666666288]],[11,[4.8888888888888005,-8.59259259259261]],[7,[-2.6666666666667425,0.740740740740705]],[1,[6.51851851851859,12.148148148148152]],[15,[-3.796296296296191,11.166666666666517]],[6,[-1.7777777777778283,-0.8888888888889142]],[2,[3.786081133230596,4.083862795394623]],[14,[-3.4074074074073906,-0.7407407407407618]],[12,[0.0,0.0]],[3,[3.265062349348341,-2.124337414689535]],[5,[5.333333333333485,-8.296296296296305]],[10,[-3.7037037037035816,0.7407407407407618]],[4,[-2.814814814814781,-3.7037037037036953]],[8,[-0.009144947416189098,-0.38774577046183367]],[9,[0.7407407407407618,-4.0]]],"stroke":[[5,0],[8,0],[15,0],[3,0],[12,0],[4,0],[7,0],[9,0],[14,0],[6,0],[1,0],[13,0],[2,0],[10,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":15}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[408,{"inputs":[{"Node":{"node_id":409,"output_index":0}},{"Node":{"node_id":411,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1453710883947581217,{"inputs":[{"Node":{"node_id":281,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[268,{"inputs":[{"Node":{"node_id":272,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[439,{"inputs":[{"Node":{"node_id":440,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[344.5177419354837,697.8333333333333]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[206.6666666666667,70.66666666666666]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12768614558324028960,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":6710503329407068595,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[128,{"inputs":[{"Node":{"node_id":132,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[159,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5],"remove":[],"delta":[[2,[153.0925925925926,632.7962962962963]],[1,[-2.6666666666667,581.3333333333333]],[3,[266.2777777777779,704.4077331232156]],[4,[249.09259259259255,770.8703703703704]],[5,[-2.6666666666666856,770.8703703703704]]]},"segments":{"add":[1,2,3,4,5],"remove":[],"start_point":[[5,5],[1,1],[2,2],[4,4],[3,3]],"end_point":[[4,5],[5,1],[1,2],[2,3],[3,4]],"handle_primary":[[2,[69.92592592592595,31.40740740740773]],[3,[8.273042653236644,16.012340619167617]],[5,[0.0,0.0]],[1,[0.0,0.0]],[4,[0.0,0.0]]],"handle_end":[[2,[-9.18518518518522,-17.777777777777715]],[5,[0.0,0.0]],[4,[0.0,0.0]],[1,[-105.44980253803315,-47.36304690267639]],[3,[19.407407407407447,-32.148148148148266]]],"stroke":[[4,0],[5,0],[3,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":5}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2489761779922717592,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[3,[205.93209876543213,600.5987654320988]],[4,[282.37654320987656,585.9814814814815]],[7,[455.2160493827161,586.8374485596709]],[9,[447.46059205066985,619.9047655337092]],[8,[481.88271604938296,600.2037037037037]],[6,[468.0555555555556,551.0185185185187]],[2,[161.81687242798355,618.7716049382714]],[10,[288.6975308641976,620.1543209876544]],[5,[338.4753086419753,574.1296296296297]],[1,[156.18106995884773,623.2098765432096]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[6,6],[8,8],[9,9],[1,1],[4,4],[3,3],[7,7],[10,10],[2,2],[5,5]],"end_point":[[10,1],[6,7],[8,9],[1,2],[3,4],[9,10],[2,3],[4,5],[7,8],[5,6]],"handle_primary":[[9,[0.0,0.0]],[4,[22.71604938271605,-4.9382716049382225]],[2,[5.925925925925924,-2.370370370370324]],[6,[-0.19753086419751753,-0.19753086419757435]],[1,[0.0,0.0]],[10,[-70.32098765432102,1.975308641975289]],[3,[21.135802469135797,-7.703703703703695]],[5,[0.0,0.0]],[8,[0.0,0.0]],[7,[0.0,0.0]]],"handle_end":[[10,[41.77160493827162,-2.8703703703704377]],[9,[70.32098765432102,-1.975308641975289]],[6,[4.345679012345613,-25.481481481481524]],[4,[0.0,0.0]],[7,[-8.691358024691567,-7.308641975308547]],[1,[-5.925925925925924,2.370370370370324]],[2,[-21.135802469135797,7.703703703703695]],[5,[-40.09876543209879,-8.09876543209873]],[8,[11.358024691357969,-11.390946502057773]],[3,[-22.71604938271605,4.9382716049382225]]],"stroke":[[6,0],[9,0],[1,0],[2,0],[8,0],[7,0],[3,0],[10,0],[5,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[190,{"inputs":[{"Node":{"node_id":193,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.1331892468887066,0.5346273584022614],"end":[0.8687039445257865,0.5091081472114145]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.1331892468887066,0.5346273584022614],"end":[0.8687039445257865,0.5091081472114145]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11427960919145580782,{"inputs":[{"Node":{"node_id":6873123446543957690,"output_index":0}},{"Node":{"node_id":11345069121502219134,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15848750910363784662,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":17911294938421300842,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[81,{"inputs":[{"Node":{"node_id":82,"output_index":0}},{"Node":{"node_id":87,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15483449862348058100,{"inputs":[{"Node":{"node_id":5382879283978921947,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[283,{"inputs":[{"Node":{"node_id":16360261423333265502,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[143,{"inputs":[{"Node":{"node_id":144,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[22.81427346112025,718.7256085656885]},"exposed":false}},{"Value":{"tagged_value":{"F64":-0.028919384},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[114.60967448512612,10.883703174332329]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[-0.002522502109903075,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6873123446543957690,{"inputs":[{"Node":{"node_id":12717405604755313921,"output_index":0}},{"Node":{"node_id":3707802522175443254,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[485,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7],"remove":[],"delta":[[1,[901.7869989330896,337.4632677945435]],[6,[879.873428946497,552.0307817039356]],[5,[874.2777777777776,540.5]],[7,[907.1666666666664,501.16666666666663]],[3,[873.1913580246915,359.61111111111114]],[4,[873.611111111111,465.6111111111111]],[2,[881.6925011431184,340.0384849870446]]]},"segments":{"add":[1,2,3,4,5,6,7],"remove":[],"start_point":[[3,3],[2,2],[6,6],[5,5],[7,7],[1,1],[4,4]],"end_point":[[6,7],[5,6],[1,2],[4,5],[3,4],[7,1],[2,3]],"handle_primary":[[3,[0.09876543209873034,9.87654320987656]],[4,[-0.22222222222228535,37.77777777777777]],[5,[1.086419753086716,4.000000000000114]],[2,[-5.885745135394927,5.678500588373993]],[1,[0.0,0.0]],[6,[4.0,1.7777777777777146]],[7,[2.888888888889028,-35.111111111111086]]],"handle_end":[[7,[0.0,0.0]],[4,[-0.9901901223357754,-3.645699995871837]],[3,[0.22222222222228535,-37.77777777777777]],[2,[-0.09876543209873034,-9.87654320987656]],[5,[-4.0,-1.7777777777777146]],[1,[5.5406188081085475,-5.34552659655543]],[6,[-2.8888888888888005,35.111111111111086]]],"stroke":[[1,0],[7,0],[6,0],[2,0],[3,0],[4,0],[5,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":7}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[174,{"inputs":[{"Node":{"node_id":175,"output_index":0}},{"Node":{"node_id":220,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4633399390154487467,{"inputs":[{"Node":{"node_id":11155094820673141470,"output_index":0}},{"Value":{"tagged_value":{"F64":75.0},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::blending_nodes::OpacityNode"}},"visible":true,"skip_deduplication":false}],[236,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[1,[842.2716049382717,560.2962962962963]],[6,[838.425925925926,581.0432098765433]],[4,[828.8127572016463,566.4259259259259]],[3,[832.8950617283951,560.829218106996]],[2,[837.9320987654322,560.7962962962963]],[5,[826.9691358024693,580.1543209876544]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[1,1],[2,2],[6,6],[5,5],[3,3],[4,4]],"end_point":[[3,4],[4,5],[6,1],[2,3],[5,6],[1,2]],"handle_primary":[[6,[0.0,0.0]],[2,[0.0,0.0]],[5,[0.0,0.0]],[1,[-4.339506172839492,0.5]],[3,[-2.1728395061728634,1.4814814814815236]],[4,[-3.649513397469832,2.8283728830390373]]],"handle_end":[[2,[2.1728395061728634,-1.4814814814815236]],[5,[0.0,0.0]],[4,[0.0,0.0]],[1,null],[6,[0.0,0.0]],[3,[2.633744855967052,-2.0411522633744426]]],"stroke":[[1,0],[5,0],[4,0],[6,0],[2,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1598976462838094167,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"delta":[[9,[510.261316872428,573.2078189300412]],[15,[496.30246913580254,612.3006782502672]],[1,[506.7057613168725,531.9348803536052]],[3,[488.5329218106997,551.6587029416252]],[8,[502.6234567901235,563.1154930650816]],[17,[448.3683127572017,617.6340115836006]],[10,[496.50000000000006,582.6234567901236]],[4,[500.77983539094663,544.0208428593207]],[20,[480.89506172839504,532.4323654930657]],[6,[490.17901234567904,556.0043819539711]],[7,[495.90740740740733,567.882982777016]],[5,[500.4506172839507,547.5105547934772]],[2,[497.8388203017833,534.5393613778391]],[12,[513.3888888888889,585.5544307531777]],[11,[504.00617283950623,588.9444444444446]],[19,[468.05555555555594,550.6710486206383]],[14,[496.49999999999994,603.4117893613783]],[16,[478.9197530864198,618.6875095259874]],[18,[438.2283950617284,585.5544307531777]],[13,[516.8017832647463,593.4437585733884]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"remove":[],"start_point":[[17,17],[15,15],[5,5],[20,20],[8,8],[2,2],[12,12],[7,7],[18,18],[19,19],[10,10],[3,3],[13,13],[9,9],[14,14],[16,16],[1,1],[4,4],[6,6],[11,11]],"end_point":[[1,2],[9,10],[19,20],[11,12],[3,4],[20,1],[17,18],[6,7],[16,17],[4,5],[12,13],[2,3],[13,14],[8,9],[14,15],[15,16],[7,8],[18,19],[5,6],[10,11]],"handle_primary":[[12,[0.0,0.0]],[14,[0.0,0.0]],[1,[0.0,0.0]],[17,[0.0,0.0]],[5,[-6.737997256515712,3.1824417009599983]],[16,[0.0,0.0]],[13,[0.0,0.0]],[10,[0.0,0.0]],[19,[0.0,0.0]],[6,[0.0,0.0]],[8,[0.0,0.0]],[3,[4.565157750342848,-4.301783264746064]],[2,[-7.188100137174104,2.6138545953361927]],[20,[7.46503467504715,-4.02781143068205]],[4,null],[15,[0.0,0.0]],[7,[0.0,0.0]],[11,[0.0,0.0]],[18,[0.0,0.0]],[9,[0.0,0.0]]],"handle_end":[[12,[-0.39506172839503506,-1.975308641975289]],[4,null],[13,[0.0,0.0]],[17,[0.0,0.0]],[2,[0.27087722942241044,-5.120145445603839]],[15,[0.0,0.0]],[10,[-2.765432098765416,-3.555555555555543]],[19,[-3.394604481024089,3.2873037646699004]],[16,[0.0,0.0]],[7,[-3.6872427983540206,1.4485596707820605]],[5,[0.0,0.0]],[18,[0.0,0.0]],[11,[-3.851851851851848,0.7581344568814075]],[6,[-2.508333333333439,-2.0902777777778283]],[1,[3.4386245260820374,-1.250408918575317]],[20,[0.0,0.0]],[3,null],[14,[-0.7901234567900701,-4.938271604938336]],[9,[6.716049382716108,-8.49382716049422]],[8,[-1.7777777777777717,-5.728395061728406]]],"stroke":[[14,0],[11,0],[2,0],[19,0],[15,0],[1,0],[10,0],[5,0],[16,0],[9,0],[12,0],[8,0],[13,0],[6,0],[17,0],[4,0],[7,0],[20,0],[3,0],[18,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":20}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12435496696188763850,{"inputs":[{"Node":{"node_id":9286544882258200464,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[96,{"inputs":[{"Node":{"node_id":99,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7594724231651877,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.0,0.5],"end":[1.0,0.0]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[0.7594724231651877,{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Radial","start":[0.0,0.5],"end":[1.0,0.0]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[469,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"delta":[[6,[110.91975308641976,406.62345679012344]],[3,[-7.030559365950182,200.5]],[7,[129.38888888888886,443.61235349483104]],[4,[50.72222222222222,278.78532235939633]],[11,[177.83333333333343,384.49999999999994]],[5,[81.68518518518522,338.8703703703703]],[13,[223.25,608.7633744855967]],[9,[111.83431058292848,134.6107990062408]],[8,[82.0,29.5]],[2,[-7.000000000000025,626.675562328647]],[10,[137.68518518518513,236.64814814814815]],[1,[137.75,641.0]],[12,[199.1666666666667,473.1666666666667]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13],"remove":[],"start_point":[[11,11],[5,5],[7,7],[2,2],[6,6],[4,4],[8,8],[10,10],[3,3],[13,13],[1,1],[9,9],[12,12]],"end_point":[[8,9],[2,3],[5,6],[7,8],[12,13],[10,11],[4,5],[3,4],[9,10],[13,1],[11,12],[6,7],[1,2]],"handle_primary":[[7,[-20.788075479416264,-70.61235349483104]],[1,[0.0,0.0]],[5,[6.73334689148848,12.881185357630102]],[10,[12.334360893667936,45.715346431469186]],[2,[0.0,0.0]],[11,[6.410520201070284,29.915760938327992]],[13,[0.0,0.0]],[4,[7.654320987654309,14.850480109739408]],[12,[11.42335240155694,63.4630688975397]],[3,[31.078939476013172,37.97283968100555]],[6,[8.537957281505157,20.688127259031944]],[8,[0.0,0.0]],[9,[5.9990227504048335,27.666978771536947]]],"handle_end":[[11,[-5.999999999999915,-33.33333333333343]],[12,[0.0,0.0]],[7,[14.499999999999943,172.0]],[13,[0.0,0.0]],[4,[-9.08641975308646,-17.382716049382736]],[1,[0.0,0.0]],[9,[-13.510174692931455,-48.54050114169854]],[6,[0.0,0.0]],[3,[-14.856706650648782,-28.82414089604376]],[5,[-10.271604938271594,-24.88888888888897]],[8,[-13.354098963944438,-61.58795989288773]],[10,[-12.0,-55.99999999999994]],[2,[0.0,0.0]]],"stroke":[[9,0],[12,0],[13,0],[5,0],[8,0],[7,0],[4,0],[6,0],[1,0],[10,0],[3,0],[2,0],[11,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":13}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11279424538712841875,{"inputs":[{"Node":{"node_id":2489761779922717592,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[329,{"inputs":[{"Node":{"node_id":327,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[4452902364641883403,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":8861964493222160710,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16894739051789815098,{"inputs":[{"Node":{"node_id":17245613731534563958,"output_index":0}},{"Value":{"tagged_value":{"DVec2":[337.1982047610469,692.7466487935636]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[50.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null}},"import_index":4}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::transform_nodes::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[220,{"inputs":[{"Node":{"node_id":224,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[422,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":430,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[453,{"inputs":[{"Node":{"node_id":457,"output_index":0}},{"Value":{"tagged_value":{"Fill":"None"},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[111,{"inputs":[{"Node":{"node_id":114,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13606781735926093266,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"delta":[[4,[699.4958847736627,594.497256515775]],[8,[708.7139917695473,601.783950617284]],[1,[645.3333333333333,614.013717421125]],[10,[712.0500685871053,614.4420508944315]],[3,[680.2695473251027,600.730452674897]],[5,[744.3996087994716,586.9732002235431]],[6,[717.5809327846364,593.2681755829904]],[7,[702.5246913580245,600.8931773149878]],[9,[713.2108672458469,610.5533455265964]],[2,[658.574074074074,609.6851851851851]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10],"remove":[],"start_point":[[10,10],[9,9],[6,6],[4,4],[2,2],[8,8],[3,3],[7,7],[1,1],[5,5]],"end_point":[[10,1],[7,8],[4,5],[6,7],[9,10],[5,6],[3,4],[1,2],[2,3],[8,9]],"handle_primary":[[7,[0.0,0.0]],[6,[-10.886145404663694,2.8971193415636662]],[8,[0.0,0.0]],[2,[4.740740740740762,-4.148148148148152]],[9,[0.0,0.0]],[4,[4.444444444444002,-5.662551440328798]],[10,[-58.35223289132739,3.851425709744945]],[1,[0.0,0.0]],[3,[7.374485596707928,-0.92181069958815]],[5,[0.0,0.0]]],"handle_end":[[4,[-5.794238683127446,-2.0192043895747247]],[9,[-0.08779149519853036,-2.2109123484780184]],[7,[-2.89711934156378,-1.975308641975289]],[1,[-4.740740740740762,4.148148148148152]],[2,[-6.174173455107166,0.7717716818881399]],[10,null],[8,[-2.5361987501905787,-3.706752019509281]],[5,[10.516302710276136,-2.79869346321857]],[3,[-1.6866098186769705,2.1488658430550913]],[6,[0.0,0.0]]],"stroke":[[6,0],[9,0],[8,0],[1,0],[4,0],[3,0],[5,0],[7,0],[10,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":10}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2999157202967297847,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[1,[-0.09890842105846484,-0.06578040790199424]],[2,[0.8379395417513005,-0.05940639119491883]],[4,[0.0,1.0]],[3,[1.0362898771040632,0.9994054840058096]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[1,1],[3,3],[2,2]],"end_point":[[2,3],[1,2],[3,4],[4,1]],"handle_primary":[[1,[0.0,0.0]],[4,[0.0,0.0]],[3,[0.0,0.0]],[2,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.0,0.0]],[1,[0.0,0.0]]],"stroke":[[4,0],[2,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[173,{"inputs":[{"Node":{"node_id":174,"output_index":0}},{"Node":{"node_id":214,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16360261423333265502,{"inputs":[{"Node":{"node_id":287,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16831252454255560063,{"inputs":[{"Node":{"node_id":14080831508667499826,"output_index":0}},{"Node":{"node_id":17257434333682934071,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[406,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[2,[380.6371742112481,265.1035665294926]],[5,[332.5,581.8333333333333]],[6,[428.9444444444444,568.9444444444443]],[4,[353.38888888888886,444.5]],[3,[369.7510288065844,308.3847736625514]],[1,[401.70713305898494,260.36282578875165]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[3,3],[6,6],[4,4],[5,5],[2,2],[1,1]],"end_point":[[1,2],[4,5],[2,3],[5,6],[6,1],[3,4]],"handle_primary":[[1,[-10.359396433470463,-3.160493827160451]],[2,[-10.643715697978225,7.851921416541302]],[6,[0.0,0.0]],[4,[-5.333333333333314,40.0]],[5,[0.0,0.0]],[3,[-1.3105663299890011,14.89279920442118]]],"handle_end":[[3,[5.333333333333314,-40.0]],[5,[0.0,0.0]],[2,[0.9657064471879266,-10.97393689986285]],[4,[4.0,-30.666666666666742]],[1,null],[6,[0.0,0.0]]],"stroke":[[2,0],[5,0],[3,0],[1,0],[4,0],[6,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9286544882258200464,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[3,[455.2160493827161,586.837448559671]],[4,[464.82921810699577,552.1378600823044]],[1,[480.8950617283949,532.7798353909467]],[2,[472.818244170096,545.5973936899862]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[3,3],[1,1],[4,4],[2,2]],"end_point":[[2,3],[4,1],[3,4],[1,2]],"handle_primary":[[2,[-5.249967385837806,9.166609721304098]],[1,[0.0,0.0]],[4,[4.236143848022095,-8.765075372687306]],[3,[0.0,0.0]]],"handle_end":[[3,[-10.501290993452583,21.72839506172852]],[1,[5.530864197530832,-9.657064471879266]],[2,[0.0,0.0]],[4,[-3.58969669257732,1.843621399176868]]],"stroke":[[2,0],[4,0],[3,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[266,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[3,[907.9074074074074,539.3148148148149]],[5,[916.9444444444443,525.3888888888889]],[2,[903.0185185185188,539.9074074074074]],[8,[877.5736601163951,577.8827160493829]],[4,[906.574074074074,531.3148148148149]],[7,[902.8209876543212,578.672839506173]],[6,[931.067901234568,549.8333333333334]],[1,[890.376543209877,558.3271604938273]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[6,6],[8,8],[7,7],[4,4],[1,1],[2,2],[3,3],[5,5]],"end_point":[[7,8],[4,5],[6,7],[2,3],[3,4],[8,1],[5,6],[1,2]],"handle_primary":[[3,[0.0,0.0]],[5,[12.296296296296418,0.14814814814803867]],[2,[0.0,0.0]],[8,[0.0,0.0]],[7,[0.0,0.0]],[1,[0.0,0.0]],[6,[0.0,0.0]],[4,[0.05385802469163536,0.0]]],"handle_end":[[6,[0.0,0.0]],[1,[-16.592592592592723,23.703703703703923]],[7,[0.0,0.0]],[4,[-3.0120068298679143,-0.036289238914037014]],[5,[0.0,0.0]],[8,[0.0,0.0]],[2,[0.0,0.0]],[3,[0.2962962962964184,4.888888888889028]]],"stroke":[[8,0],[5,0],[7,0],[3,0],[4,0],[6,0],[1,0],[2,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[126,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"delta":[[11,[162.67283950617286,705.2901234567901]],[15,[196.05555555555557,678.8209876543209]],[17,[209.09259259259255,727.8086419753085]],[7,[131.06790123456793,702.1296296296296]],[14,[188.5493827160494,680.4012345679012]],[13,[177.0925925925926,696.4012345679012]],[10,[158.3271604938272,661.4382716049382]],[9,[158.40763603109284,655.1124066453283]],[5,[115.66049382716052,719.5123456790124]],[1,[83.98971193415636,727.8086419753087]],[3,[94.12962962962963,696.9938271604938]],[4,[102.03086419753087,696.7962962962963]],[2,[79.11728395061729,724.0555555555555]],[8,[148.8456790123457,665.3888888888888]],[6,[123.75925925925928,720.3024691358024]],[12,[169.3888888888889,709.0432098765432]],[16,[211.0679012345679,719.5123456790124]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"remove":[],"start_point":[[1,1],[3,3],[6,6],[12,12],[17,17],[7,7],[16,16],[10,10],[13,13],[9,9],[8,8],[5,5],[15,15],[11,11],[14,14],[4,4],[2,2]],"end_point":[[2,3],[3,4],[5,6],[7,8],[16,17],[1,2],[4,5],[8,9],[13,14],[12,13],[11,12],[17,1],[14,15],[9,10],[10,11],[6,7],[15,16]],"handle_primary":[[2,[3.2490948717098007,-6.29142916067417]],[1,[-3.7139917695473343,-0.22427983539080287]],[6,[0.0,0.0]],[13,[3.555555555555543,-7.308641975308547]],[11,[0.0,0.0]],[14,[2.3703703703703525,-2.5679012345678984]],[5,[0.9523778763475974,1.643318688599834]],[12,[0.0,0.0]],[15,[2.370370370370381,3.950617283950692]],[16,[0.0,0.0]],[10,[-0.24572721430195088,3.082066920469856]],[17,[-3.028806584362002,2.897119341564121]],[9,[1.416857186404485,0.2219173906416927]],[3,[2.3703703703704093,-2.5679012345678984]],[7,[2.962962962962962,-6.320987654321016]],[8,[2.172839506172835,-5.3333333333332575]],[4,[3.753086419753103,4.9382716049382225]]],"handle_end":[[7,[-2.172839506172835,5.3333333333332575]],[10,[1.1851851851851904,-8.296296296296305]],[2,[-2.3703703703703525,2.5679012345678984]],[3,[-3.753086419753074,-4.9382716049382225]],[4,[-1.119341563786023,-1.9314128943758533]],[15,[-3.753086419753089,-24.493827160493765]],[12,[-3.5555555555555713,7.308641975308547]],[6,[-2.962962962962962,6.320987654321016]],[9,[0.31458619112936503,-3.9457399786616634]],[17,[4.846281557722946,0.29265633783461453]],[16,[3.77785186523289,-3.613597436310215]],[11,[-4.148148148148152,-0.39506172839503506]],[14,[-2.370370370370381,-3.950617283950692]],[13,[-2.370370370370381,2.5679012345678984]],[5,[-4.148148148148167,0.5925925925926094]],[8,[-2.3218581751052625,-0.3636645334502191]],[1,[-2.4142661179698734,4.6748971193414945]]],"stroke":[[14,0],[9,0],[6,0],[2,0],[15,0],[1,0],[5,0],[12,0],[3,0],[4,0],[11,0],[7,0],[17,0],[13,0],[16,0],[8,0],[10,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":17}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16164610528699022118,{"inputs":[{"Node":{"node_id":7134154821675013808,"output_index":0}},{"Node":{"node_id":12875520257830460085,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[600590258445096812,{"inputs":[{"Node":{"node_id":9778003574990260202,"output_index":0}},{"Node":{"node_id":12435496696188763850,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[188,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3],"remove":[],"delta":[[1,[1027.3333333333333,523.5555555555555]],[3,[1026.2777777777778,610.4999999999999]],[2,[987.6111111111112,593.3888888888889]]]},"segments":{"add":[1,2,3],"remove":[],"start_point":[[3,3],[2,2],[1,1]],"end_point":[[1,2],[2,3],[3,1]],"handle_primary":[[3,[0.0,0.0]],[2,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[3,[0.0,0.0]],[2,[-16.66666666666663,0.22222222222228535]],[1,[28.22222222222217,-65.11111111111109]]],"stroke":[[3,0],[2,0],[1,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":3}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3885641499621884510,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":600590258445096812,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[421,{"inputs":[{"Node":{"node_id":422,"output_index":0}},{"Node":{"node_id":424,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[79,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":493,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[250,{"inputs":[{"Node":{"node_id":254,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6377392483726765,0.3630996922378644],"end":[0.6306417402456479,0.9306187973093224]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.50980395,"green":0.26666668,"blue":0.2,"alpha":1.0}]],"gradient_type":"Linear","start":[0.6377392483726765,0.3630996922378644],"end":[0.6306417402456479,0.9306187973093224]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[281,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[5,[923.3641975308644,158.72222222222226]],[3,[972.746913580247,118.22839506172843]],[8,[1026.2777777777776,592.5]],[6,[923.4629629629628,289.38888888888886]],[1,[1026.168038408779,250.70576131687224]],[2,[998.8209876543212,150.42592592592595]],[7,[926.7222222222222,528.7962962962963]],[4,[929.6851851851852,121.58641975308646]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[1,1],[7,7],[4,4],[6,6],[5,5],[3,3],[8,8],[2,2]],"end_point":[[6,7],[1,2],[5,6],[7,8],[2,3],[3,4],[4,5],[8,1]],"handle_primary":[[6,[0.2962962962964184,19.259259259259295]],[2,[-4.543209876543415,-11.06172839506172]],[4,[-5.135802469135797,10.864197530864176]],[5,[0.0,11.061728395061747]],[1,[-10.22770919067159,-29.761316872427727]],[8,[0.0,0.0]],[7,[0.0,0.0]],[3,[-17.77777777777783,-3.753086419753074]]],"handle_end":[[3,[5.135802469135797,-10.864197530864176]],[7,[0.0,0.0]],[6,[-2.370370370370324,-53.03703703703695]],[1,[4.543209876543187,11.06172839506172]],[4,[0.0,-11.061728395061747]],[2,[17.77777777777783,3.753086419753089]],[8,null],[5,[-0.2962962962964184,-19.259259259259295]]],"stroke":[[2,0],[1,0],[5,0],[8,0],[3,0],[7,0],[6,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5382879283978921947,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6],"remove":[],"delta":[[4,[789.2187928669412,601.4967933823075]],[3,[794.0473251028808,582.3820301783265]],[2,[755.3312757201647,586.2448559670783]],[5,[767.1831275720166,614.1625514403293]],[6,[751.1172839506169,611.1776406035664]],[1,[740.3456790123458,588.2030178326476]]]},"segments":{"add":[1,2,3,4,5,6],"remove":[],"start_point":[[5,5],[4,4],[6,6],[2,2],[1,1],[3,3]],"end_point":[[5,6],[6,1],[3,4],[2,3],[1,2],[4,5]],"handle_primary":[[2,[9.481481481481524,0.4824094931645959]],[4,[-8.427983539094612,8.539557783673331]],[5,[-11.149519890260535,0.2794994541025062]],[6,[0.0,0.0]],[1,[0.0,0.0]],[3,[0.0,0.0]]],"handle_end":[[4,[11.149519890260535,-0.2794994541025062]],[5,[0.0,0.0]],[3,[8.427983539094612,-8.539557783673331]],[2,[-9.305898491083669,-1.1412894375856697]],[6,[0.0,0.0]],[1,[-9.481481481481524,-0.4824094931645959]]],"stroke":[[6,0],[2,0],[4,0],[5,0],[1,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":6}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[312,{"inputs":[{"Node":{"node_id":316,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5105625446268484763,{"inputs":[{"Node":{"node_id":9422094883894860610,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[989999757220954936,{"inputs":[{"Node":{"node_id":10544930474333783117,"output_index":0}},{"Node":{"node_id":5105625446268484763,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[172,{"inputs":[{"Node":{"node_id":173,"output_index":0}},{"Node":{"node_id":208,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[436,{"inputs":[{"Node":{"node_id":439,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.7490196,"green":0.3764706,"blue":0.19215687,"alpha":1.0}],[0.08176100628930963,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.7490196,"green":0.3764706,"blue":0.19215687,"alpha":1.0}],[0.08176100628930963,{"red":0.827451,"green":0.42352942,"blue":0.19215687,"alpha":1.0}],[1.0,{"red":0.84705883,"green":0.48235294,"blue":0.20784314,"alpha":1.0}]],"gradient_type":"Linear","start":[0.5000000000000004,0.0],"end":[0.5000000000000004,1.0]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[94,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4],"remove":[],"delta":[[4,[0.0,0.5]],[3,[0.5,1.0]],[2,[1.0,0.5]],[1,[0.5,0.0]]]},"segments":{"add":[1,2,3,4],"remove":[],"start_point":[[4,4],[2,2],[3,3],[1,1]],"end_point":[[1,2],[4,1],[3,4],[2,3]],"handle_primary":[[4,[0.0,-0.275892388889507]],[1,[0.27589238888950707,0.0]],[2,[0.0,0.27589238888950707]],[3,[-0.275892388889507,0.0]]],"handle_end":[[2,[0.27589238888950707,0.0]],[3,[0.0,0.27589238888950707]],[4,[-0.275892388889507,0.0]],[1,[0.0,-0.275892388889507]]],"stroke":[[1,0],[2,0],[3,0],[4,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":4}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[467,{"inputs":[{"Node":{"node_id":465,"output_index":0}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"F64":2.0},"exposed":false}},{"Value":{"tagged_value":{"StrokeAlign":"Center"},"exposed":false}},{"Value":{"tagged_value":{"StrokeCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"StrokeJoin":"Round"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}},{"Value":{"tagged_value":{"PaintOrder":"StrokeAbove"},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[327,{"inputs":[{"Node":{"node_id":331,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[218,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8],"remove":[],"delta":[[6,[888.3518518518518,541.9814814814815]],[3,[872.8621399176955,563.858024691358]],[8,[891.0185185185185,531.9074074074074]],[2,[890.7057613168722,514.4753086419753]],[1,[901.9820911446426,504.0199918711579]],[7,[886.574074074074,540.0555555555557]],[4,[874.0473251028807,569.7181069958847]],[5,[880.5,566.7222222222222]]]},"segments":{"add":[1,2,3,4,5,6,7,8],"remove":[],"start_point":[[6,6],[4,4],[2,2],[1,1],[7,7],[5,5],[8,8],[3,3]],"end_point":[[8,1],[6,7],[1,2],[5,6],[3,4],[7,8],[2,3],[4,5]],"handle_primary":[[4,[0.0,0.0]],[6,[0.0,0.0]],[2,[-3.0946502057612406,7.835390946502002]],[3,[0.0,0.0]],[7,[0.0,0.0]],[8,[0.0,0.0]],[5,[0.0,0.0]],[1,[0.0,0.0]]],"handle_end":[[4,[0.0,0.0]],[2,[7.111111111111086,-11.522633744855966]],[6,[0.0,0.0]],[7,[0.0,0.0]],[3,[0.0,0.0]],[5,[0.0,0.0]],[1,[3.0946502057612406,-7.835390946502002]],[8,[-7.693415637860312,3.5987654320987303]]],"stroke":[[1,0],[4,0],[2,0],[7,0],[5,0],[6,0],[8,0],[3,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":8}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[78,{"inputs":[{"Node":{"node_id":79,"output_index":0}},{"Node":{"node_id":477,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[451,{"inputs":[{"Value":{"tagged_value":{"Graphic":{"element":[],"transform":[],"alpha_blending":[],"source_node_id":[]}},"exposed":true}},{"Node":{"node_id":471,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[109,{"inputs":[{"Value":{"tagged_value":{"Vector":{"element":[{"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"cap":"Butt","join":"Miter","join_miter_limit":4.0,"align":"Center","transform":[1.0,0.0,0.0,1.0,0.0,0.0],"non_scaling":false,"paint_order":"StrokeAbove"},"fill":"None"},"colinear_manipulators":[],"point_domain":{"id":[],"position":[]},"segment_domain":{"id":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"id":[],"segment_range":[],"fill":[]},"upstream_nested_layers":null}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"delta":[[19,[988.3834502828158,483.83978387530175]],[48,[1078.092184072945,124.46115941908752]],[31,[1336.888288825075,539.8397813321702]],[39,[1145.5096567394662,398.4805644507546]],[14,[783.956275100461,458.8300762732051]],[16,[763.8397711596442,482.7524052839062]],[45,[1105.8203381535304,315.83979150469634]],[41,[1216.7329544758718,262.5582405263166]],[34,[1256.9659623575055,413.8640589204806]],[1,[865.1205730638582,195.5865278374037]],[8,[810.5970505896508,321.8203737573716]],[2,[910.288570576692,217.7758226144784]],[47,[1073.742669707363,200.0339715210751]],[22,[1000.3446147881664,518.0922095042602]],[49,[1038.402865487009,182.635914058747]],[7,[758.9465674983644,277.2378515101559]],[46,[1098.7523773094597,263.6456191177121]],[23,[972.616460707581,519.7232773913535]],[52,[939.3251404063708,207.7548507796705]],[42,[1287.4125629165796,203.2961072952616]],[15,[728.4999669392903,519.7232773913535]],[28,[1134.0921815298134,465.8980371172759]],[18,[909.5485024066418,487.10191964948825]],[36,[1387.451393324966,404.4611467034299]],[38,[1223.8009153199428,370.7524103701693]],[5,[914.9853953636192,333.78153826272217]],[6,[838.3252046702362,291.37377319829744]],[32,[1323.839745728329,479.4902695097197]],[9,[770.907732003715,320.7329951659761]],[13,[885.0824841002429,442.5193974022726]],[27,[1093.315484352482,509.93687006879384]],[29,[1205.8591685619167,441.9757081065748]],[17,[813.8591863638374,482.2087159882085]],[40,[1180.3057716641222,344.11163488097947]],[11,[730.1310348263835,333.2378489670244]],[30,[1277.62615559402,478.946580214022]],[43,[1210.2086829274988,227.76212560166044]],[25,[1110.71354181481,529.509684713913]],[12,[783.956275100461,383.2572641712176]],[26,[1143.3348995566753,518.6358987999579]],[50,[1016.655293659099,296.810666155275]],[4,[956.3057818366484,357.1601779777255]],[33,[1284.1504271423933,435.99512585389954]],[24,[1014.480536476308,543.1019171063567]],[10,[670.8689015953286,344.1116348809794]],[35,[1281.975669959602,393.04367149377714]],[21,[990.5582074656068,498.5193948591411]],[3,[943.8009280356002,277.78154080585364]],[51,[994.3640325354912,266.3640655962009]],[37,[1302.6358631961166,363.1407602304008]],[44,[1156.927131949119,259.8397940478278]],[20,[969.8980142290924,494.7135697892568]]]},"segments":{"add":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"remove":[],"start_point":[[19,19],[2,2],[34,34],[7,7],[45,45],[37,37],[47,47],[23,23],[40,40],[44,44],[3,3],[15,15],[8,8],[42,42],[25,25],[24,24],[48,48],[51,51],[26,26],[12,12],[6,6],[28,28],[43,43],[5,5],[10,10],[49,49],[27,27],[20,20],[22,22],[36,36],[46,46],[17,17],[41,41],[31,31],[11,11],[1,1],[50,50],[14,14],[9,9],[38,38],[39,39],[16,16],[35,35],[13,13],[4,4],[18,18],[32,32],[52,52],[33,33],[21,21],[29,29],[30,30]],"end_point":[[26,27],[40,41],[33,34],[37,38],[42,43],[52,1],[4,5],[41,42],[17,18],[2,3],[48,49],[23,24],[35,36],[49,50],[20,21],[11,12],[8,9],[31,32],[9,10],[19,20],[18,19],[24,25],[43,44],[15,16],[12,13],[29,30],[14,15],[44,45],[28,29],[51,52],[39,40],[46,47],[32,33],[36,37],[34,35],[45,46],[13,14],[3,4],[27,28],[30,31],[22,23],[21,22],[7,8],[1,2],[38,39],[6,7],[16,17],[47,48],[25,26],[50,51],[10,11],[5,6]],"handle_primary":[[1,[0.0,0.0]],[11,[26.097086193492142,5.980582252675276]],[49,[-10.873785913954862,28.81553267198086]],[28,[0.0,0.0]],[26,[0.0,0.0]],[39,[0.0,0.0]],[12,[41.864075768726934,30.606794749262978]],[48,[0.0,0.0]],[19,[0.0,0.0]],[34,[0.0,0.0]],[36,[0.0,0.0]],[33,[-13.048543096746243,-19.57281464511908]],[23,[0.0,0.0]],[47,[-1.6310678870931952,-7.611650139768528]],[45,[0.0,0.0]],[44,[-21.74757182791018,14.135921688141591]],[8,[0.0,0.0]],[21,[0.0,0.0]],[7,[0.0,0.0]],[3,[7.06796084407074,48.3883473171]],[43,[-16.310678870932634,13.048543096746071]],[10,[0.0,0.0]],[18,[18.485436053723447,-2.7184464784887723]],[31,[0.0,0.0]],[24,[39.145629290237935,9.786407322559626]],[13,[0.0,0.0]],[32,[-24.466018306398837,-28.81553267198086]],[4,[0.0,0.0]],[35,[8.699028731163935,-10.3300966182573]],[20,[0.0,0.0]],[40,[12.504853801048512,-14.135921688141591]],[5,[-19.02912534942118,-15.766989575234843]],[29,[20.116503940816983,1.631067887093252]],[16,[14.13592168814148,-1.631067887093252]],[38,[-17.941746758026056,-1.0873785913955205]],[22,[0.0,0.0]],[14,[-44.03883295151786,20.11650394081687]],[51,[-18.48543605372367,-25.009707602096626]],[2,[16.937999067312603,14.3156740497256]],[42,[0.0,0.0]],[27,[0.0,0.0]],[52,[-26.097086193492142,-12.504853801048256]],[6,[-25.00970760209657,-1.0873785913954634]],[41,[15.427586663144211,-29.493915679540574]],[30,[26.097086193492032,5.436892956977488]],[46,[-6.524271548372781,-16.310678870932577]],[50,[0.0,0.0]],[37,[-48.38834731709994,-2.174757182791041]],[17,[31.53397915046969,11.961164505350553]],[15,[0.0,0.0]],[25,[14.679610983839666,-8.155339435466317]],[9,[-26.64077548918988,2.7184464784887723]]],"handle_end":[[44,[0.0,0.0]],[50,[18.48543605372356,25.009707602096626]],[15,[-14.13592168814148,1.631067887093252]],[52,[21.791261123607796,0.5873785913955203]],[49,[-5.98058225267539,-75.02912280628982]],[26,[30.446600559074568,-5.980582252675276]],[10,[-26.097086193492142,-5.980582252675276]],[25,[-12.504853801048284,-3.262135774186504]],[29,[-26.097086193492032,-5.436892956977488]],[3,[5.436892956977545,-25.553396897794357]],[19,[3.805825069884008,-5.436892956977601]],[38,[0.0,0.0]],[39,[-9.034630967226803,10.21306109338667]],[11,[-41.864075768726934,-30.606794749263088]],[51,[26.097086193492032,12.50485380104834]],[28,[-20.11650394081721,-1.6310678870931952]],[18,[-11.41747520965282,-9.242718026861724]],[32,[13.048543096746243,19.57281464511908]],[30,[-0.5436892956979591,-24.46601830639895]],[2,[-7.067960844070626,-48.3883473171]],[27,[-8.15533943546643,25.00970760209657]],[23,[-39.14562929023816,-9.786407322559626]],[5,[25.00970760209657,1.0873785913954634]],[21,[-4.3495143655819675,-3.262135774186504]],[47,[-22.83495041930587,36.42718281174942]],[45,[6.524271548372553,16.310678870932577]],[48,[10.87378591395509,-28.81553267198086]],[35,[-71.76698703210332,-41.864075768726934]],[12,[-31.533979150469577,-8.15533943546626]],[40,[-18.48543605372356,35.33980422035398]],[17,[-18.48543605372356,2.7184464784887723]],[16,[-31.53397915046969,-11.961164505350553]],[36,[48.388347317099715,2.174757182790927]],[41,[-32.07766844616731,15.223300279537028]],[24,[-14.67961098383944,8.155339435466317]],[14,[0.0,0.0]],[31,[24.466018306399064,28.81553267198086]],[20,[-4.8932036612795855,-5.980582252675276]],[43,[21.74757182791018,-14.135921688141565]],[13,[44.03883295151786,-20.11650394081687]],[8,[26.64077548918988,-2.7184464784887723]],[22,[3.805825069884122,-4.3495143655819675]],[9,[27.18446478488761,-22.291261123607853]],[4,[19.02912534942141,15.766989575234843]],[33,[0.0,0.0]],[34,[-8.699028731163935,10.330096618257244]],[42,[16.310678870932634,-13.048543096746071]],[46,[1.6310678870931952,7.611650139768528]],[6,[0.0,0.0]],[7,[-5.436892956977545,-19.029125349421292]],[1,[-14.628148339931158,-12.363432230293256]],[37,[17.941746758026056,1.0873785913955205]]],"stroke":[[41,0],[12,0],[1,0],[29,0],[27,0],[4,0],[51,0],[47,0],[32,0],[7,0],[19,0],[11,0],[35,0],[25,0],[28,0],[43,0],[20,0],[23,0],[22,0],[24,0],[18,0],[48,0],[6,0],[15,0],[36,0],[52,0],[42,0],[3,0],[5,0],[44,0],[10,0],[49,0],[21,0],[34,0],[26,0],[8,0],[33,0],[9,0],[31,0],[46,0],[38,0],[17,0],[16,0],[50,0],[37,0],[40,0],[2,0],[14,0],[39,0],[13,0],[30,0],[45,0]]},"regions":{"add":[0],"remove":[],"segment_range":[[0,{"start":1,"end":52}]],"fill":[[0,0]]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::table::Table","alias":null}},"import_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_modification::VectorModification","alias":null}},"import_index":1}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12325841371509826180,{"inputs":[{"Node":{"node_id":6980979116665635870,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625]}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.3764706,"green":0.23529412,"blue":0.20784314,"alpha":1.0}],[1.0,{"red":0.5058824,"green":0.26666668,"blue":0.20392157,"alpha":1.0}]],"gradient_type":"Linear","start":[0.08732233199581252,0.5212000945774993],"end":[0.9287098983518448,0.5070261975055625]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[140,{"inputs":[{"Node":{"node_id":143,"output_index":0}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"Color":{"element":[{"red":0.24313726,"green":0.18431373,"blue":0.19215687,"alpha":1.0}],"transform":[[1.0,0.0,0.0,1.0,0.0,0.0]],"alpha_blending":[{"blend_mode":"Normal","opacity":1.0,"fill":1.0,"clip":false}],"source_node_id":[null]}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5]}},"exposed":false}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[171,{"inputs":[{"Node":{"node_id":172,"output_index":0}},{"Node":{"node_id":202,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"Network":{"exports":[{"Node":{"node_id":4,"output_index":0}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ToGraphicNode"}},"visible":true,"skip_deduplication":false}],[4,{"inputs":[{"Node":{"node_id":0,"output_index":0}},{"Node":{"node_id":3,"output_index":0}}],"call_argument":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::ExtendNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":2,"output_index":0}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[2,{"inputs":[{"Node":{"node_id":1,"output_index":0}},{"Reflection":"DocumentNodePath"}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::SourceNodeIdNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"call_argument":{"Concrete":{"name":"core::option::Option>","alias":null}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic::WrapGraphicNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[10278740841813346388,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[200,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17414691604179185270,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[428,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12435496696188763850,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1644624352314732667,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","x":"W","is_integer":false,"y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[411,{"persistent_metadata":{"reference":"Merge","display_name":"From Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,217]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[175,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[248,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[292,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[427,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3930114406985796561,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[257,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[455,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[250,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[260,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[193,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[214,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12068777759187203228,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[169,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[179,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[398,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9286544882258200464,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11427960919145580782,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[331,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11472292186872186521,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,43]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[111,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5714505144727602368,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","y":"Y","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16164610528699022118,{"persistent_metadata":{"reference":"Merge","display_name":"Spike Spire Corner Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,202]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[287,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[450,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[173,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[600590258445096812,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,169]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[465,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[453,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,238]}}},"network_metadata":null}}],[446,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[290,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[259,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"x":"X","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[103,{"persistent_metadata":{"reference":"Merge","display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[318,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,139]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[412,{"persistent_metadata":{"reference":"Merge","display_name":"From Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16815500381887058038,{"persistent_metadata":{"reference":"Artboard","display_name":"Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Artboards","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"hidden","input_name":"Contents","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Location","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":true,"x":"W","y":"H","unit":" px"},"widget_override":"vec2","input_name":"Dimensions","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"artboard_background","input_name":"Background","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Clip","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-1,1]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-4]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Create Artboard","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[122,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16894739051789815098,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"Y","unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","is_integer":false,"x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[165,{"persistent_metadata":{"reference":"Merge","display_name":"Rocky Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[36935169817407978,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,160]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[79,{"persistent_metadata":{"reference":"Merge","display_name":"Sky","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9603838021022368374,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[172,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[128,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[180,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[143,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"X","is_integer":false,"unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[262,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17245613731534563958,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6272196533192700024,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"H","x":"W","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[118,{"persistent_metadata":{"reference":"Merge","display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[208,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[306,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[300,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[272,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[434,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11155094820673141470,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15277819403265847073,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1598976462838094167,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16831252454255560063,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17173383864410319040,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[75,{"persistent_metadata":{"reference":"Merge","display_name":"Slab Spires","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":45}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[440,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[283,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[102,{"persistent_metadata":{"reference":"Merge","display_name":"Agave Plant","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,19]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5105625446268484763,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[220,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[184,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[400,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[206,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[274,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,121]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[227,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[485,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[421,{"persistent_metadata":{"reference":"Merge","display_name":"Left Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,223]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17257434333682934071,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[422,{"persistent_metadata":{"reference":"Merge","display_name":"Right Half","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[477,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,253]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[475,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7134154821675013808,{"persistent_metadata":{"reference":"Merge","display_name":"Left Slope Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14080831508667499826,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[493,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[140,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[445,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"W","y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12325841371509826180,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[393,{"persistent_metadata":{"reference":"Merge","display_name":"Face","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,193]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[496,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[413,{"persistent_metadata":{"reference":"Merge","display_name":"From Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13606781735926093266,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[230,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17020523203516467057,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6710503329407068595,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-35,106]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4633399390154487467,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5175066652268973319,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[268,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[277,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[436,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3719764965605527929,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11891167879168294182,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14205611254835578455,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","is_integer":false,"unit":" px","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","unit":"x","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,208]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[182,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[174,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[132,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10544930474333783117,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[170,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[212,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[275,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[396,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14579754335592291854,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11345069121502219134,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[120,{"persistent_metadata":{"reference":"Merge","display_name":"Ground Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[319,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14433811491576609500,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[96,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[138,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[463,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[394,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2489761779922717592,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15848750910363784662,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[467,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[190,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[430,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[419,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[194,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16360261423333265502,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[471,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4913361824430066698,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[117,{"persistent_metadata":{"reference":"Merge","display_name":"Stones","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,28]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1635416892097245588,{"persistent_metadata":{"reference":"Merge","display_name":"Shading","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[82,{"persistent_metadata":{"reference":"Merge","display_name":"Right Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[989999757220954936,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[74,{"persistent_metadata":{"reference":"Merge","display_name":"Foreground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-5,4]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11377169273880889832,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8861964493222160710,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[178,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[266,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11279424538712841875,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[218,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17911294938421300842,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[459,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9570557034533539493,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[481,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[325,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-46,139]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[457,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,238]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[449,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow Lower","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[491,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[88,{"persistent_metadata":{"reference":"Merge","display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9778003574990260202,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15483449862348058100,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[442,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[224,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[144,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[478,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[329,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[191,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[316,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[196,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[85,{"persistent_metadata":{"reference":"Merge","display_name":"Left Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":21}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18142347460553706128,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2999157202967297847,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[406,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[310,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1453710883947581217,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[281,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,121]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[232,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[229,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","y":"H","x":"W","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12875520257830460085,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14335659566300901430,{"persistent_metadata":{"reference":"Merge","display_name":"Soft Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11807598261442997948,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[415,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[77,{"persistent_metadata":{"reference":"Merge","display_name":"Spike Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[161,{"persistent_metadata":{"reference":"Merge","display_name":"Rocky Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,55]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[254,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[155,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[176,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5382879283978921947,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[166,{"persistent_metadata":{"reference":"Merge","display_name":"Left Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":33}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[114,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","is_integer":false,"x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[159,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[202,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[409,{"persistent_metadata":{"reference":"Merge","display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9422094883894860610,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[408,{"persistent_metadata":{"reference":"Merge","display_name":"Reflections","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[323,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[226,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[448,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow Fissure","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,238]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[108,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","unit":"x","y":"H","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7148230379224894975,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[424,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5364427239360309137,{"persistent_metadata":{"reference":"Opacity","display_name":"Opacity","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Opacity","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[291,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[433,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","y":"Y","unit":" px"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","unit":"x","is_integer":false},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[115,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[497,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6926019345498826421,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4454263454059119441,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[119,{"persistent_metadata":{"reference":"Merge","display_name":"Highlight","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6015109908395573189,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"x":"X","unit":" px","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3885641499621884510,{"persistent_metadata":{"reference":"Merge","display_name":"Rock Outcropping","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[304,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[238,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[256,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[164,{"persistent_metadata":{"reference":"Merge","display_name":"Center Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":15}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[126,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[244,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14113040319560793790,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12717405604755313921,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[487,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[171,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[105,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[94,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3707802522175443254,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[327,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[451,{"persistent_metadata":{"reference":"Merge","display_name":"Shadow Upper","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[236,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[100,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[242,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12768614558324028960,{"persistent_metadata":{"reference":"Merge","display_name":"Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[177,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[168,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,58]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10486443711686704000,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7135480377162524224,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[134,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[469,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6980979116665635870,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"y":"Y","x":"X","unit":" px","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":"x","is_integer":false,"x":"W","y":"H"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4452902364641883403,{"persistent_metadata":{"reference":"Merge","display_name":"Soft Shadow","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[83,{"persistent_metadata":{"reference":"Merge","display_name":"Stone Cluster","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":6}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[439,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","is_integer":false,"x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"y":"H","x":"W","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[404,{"persistent_metadata":{"reference":"Stroke","display_name":"Stroke","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the stroke style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Color","input_description":"The stroke color.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Weight","input_description":"The stroke weight.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Align","input_description":"The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Cap","input_description":"The shape of the stroke at open endpoints.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Join","input_description":"The curvature of the bent stroke at sharp corners.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Miter Limit","input_description":"The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Paint Order","input_description":"The order to paint the stroke on top of the fill, or the fill on top of the stroke.\n\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Lengths","input_description":"The stroke dash lengths. Each length forms a distance in a pattern where the first length is a dash, the second is a gap, and so on. If the list is an odd length, the pattern repeats with solid-gap roles reversed.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Dash Offset","input_description":"The phase offset distance from the starting point of the dash pattern.\n"}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[81,{"persistent_metadata":{"reference":"Merge","display_name":"Left Plinth","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-15,7]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[87,{"persistent_metadata":{"reference":"Merge","display_name":"Ball","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,10]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[109,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[97478832511923699,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","x":"X","is_integer":false,"y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[162,{"persistent_metadata":{"reference":"Merge","display_name":"Right Slab Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":60}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6873123446543957690,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[181,{"persistent_metadata":{"reference":"Merge","display_name":"","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[321,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-53,139]}}},"network_metadata":null}}],[16821952675128396603,{"persistent_metadata":{"reference":"Merge","display_name":"Main Slope","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-25,157]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[78,{"persistent_metadata":{"reference":"Merge","display_name":"Distant Spire","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[188,{"persistent_metadata":{"reference":"Path","display_name":"Path","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Modification","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[90,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[402,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15552693212536925398,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[99,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","x":"X","y":"Y"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","is_integer":false,"y":"H","unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[76,{"persistent_metadata":{"reference":"Merge","display_name":"Ground","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Graphical Data","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Over","input_description":"TODO"}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Layer":{"position":{"Stack":144}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[2,{"persistent_metadata":{"reference":null,"display_name":"Source Node ID","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-3]}}},"network_metadata":null}}],[4,{"persistent_metadata":{"reference":null,"display_name":"Extend","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Wrap Graphic","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-21,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[418,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":" px","y":"Y","x":"X"},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"is_integer":false,"unit":"x","y":"H","x":"W"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[93,{"persistent_metadata":{"reference":"Transform","display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Value","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"unit":" px","y":"Y","x":"X","is_integer":false},"widget_override":"vec2","input_name":"Translation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_rotation","input_name":"Rotation","input_description":"TODO"}},{"persistent_metadata":{"input_data":{"x":"W","y":"H","is_integer":false,"unit":"x"},"widget_override":"vec2","input_name":"Scale","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":"transform_skew","input_name":"Skew","input_description":"TODO"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[""],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[7,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[312,{"persistent_metadata":{"reference":"Fill","display_name":"Fill","input_metadata":[{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Content","input_description":"The content with vector paths to apply the fill style to.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Fill","input_description":"The fill to paint the path with.\n"}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Color","input_description":""}},{"persistent_metadata":{"input_data":{},"widget_override":null,"input_name":"Backup Gradient","input_description":""}}],"output_names":[],"locked":false,"pinned":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[459.0,-501.0],"tilt":0.0,"zoom":1.0,"flip":false},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1450.0,80.0],"node_graph_top_right":[1468.796875,0.0]},"selection_undo_history":[[],[],[]],"selection_redo_history":[]}}},"collapsed":[],"commit_hash":"","document_ptz":{"pan":[-507.74999999999994,-385.9351851851852],"tilt":0.0,"zoom":1.0,"flip":false},"document_mode":"DesignMode","view_mode":"Normal","overlays_visibility_settings":{"all":true,"artboard_name":true,"compass_rose":true,"quick_measurement":true,"transform_measurement":true,"transform_cage":true,"hover_outline":true,"selection_outline":true,"pivot":true,"origin":true,"path":true,"anchors":true,"handles":true},"rulers_visible":true,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"artboards":true,"tolerance":8.0,"bounding_box":{"center_point":true,"corner_point":true,"edge_midpoint":true,"align_with_edges":true,"distribute_evenly":true},"path":{"anchor_point":true,"line_midpoint":true,"along_path":true,"normal_to_path":true,"tangent_to_path":true,"path_intersection_point":true,"align_with_anchor_point":true,"perpendicular_from_endpoint":true},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangular":{"spacing":[1.0,1.0]}},"rectangular_spacing":[1.0,1.0],"isometric_y_spacing":1.0,"isometric_angle_a":30.0,"isometric_angle_b":30.0,"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false}},"graph_view_overlay_open":false,"graph_fade_artwork_percentage":80.0} \ No newline at end of file diff --git a/deny.toml b/deny.toml index 610902ac35..932f8f6bf4 100644 --- a/deny.toml +++ b/deny.toml @@ -28,10 +28,6 @@ targets = [ #{ triple = "wasm32-unknown-unknown", features = ["atomics"] }, ] -# Tauri produces too many nonsense warnings. -exclude = ["tauri", "tauri-build"] - - # This section is considered when running `cargo deny check advisories` # More documentation for the advisories section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html @@ -45,9 +41,7 @@ db-urls = ["https://github.com/rustsec/advisory-db"] ignore = [ "RUSTSEC-2024-0370", # Unmaintained but still fully functional crate `proc-macro-error` "RUSTSEC-2024-0388", # Unmaintained but still fully functional crate `derivative` - "RUSTSEC-2025-0007", # Unmaintained but still fully functional crate `ring` "RUSTSEC-2024-0436", # Unmaintained but still fully functional crate `paste` - "RUSTSEC-2025-0014", # Unmaintained but still fully functional crate `humantime` ] # Threshold for security vulnerabilities, any vulnerability with a CVSS score # lower than the range specified will be ignored. Note that ignored advisories @@ -67,24 +61,25 @@ ignore = [ # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.11 short identifier (+ optional exception)]. # -# Keep this list in sync with those in `/about.toml` and `/frontend/vite.config.ts`. allow = [ - "Apache-2.0 WITH LLVM-exception", - "Apache-2.0", - "BSD-2-Clause", - "BSD-3-Clause", - "BSL-1.0", - "CC0-1.0", - "CDLA-Permissive-2.0", - "ISC", - "MIT-0", - "MIT", - "MPL-2.0", - "OpenSSL", - "Unicode-3.0", - "Unicode-DFS-2016", - "Zlib", - "NCSA", + "Apache-2.0 WITH LLVM-exception", # Keep this list in sync with those in `/about.toml` + "Apache-2.0", # Keep this list in sync with those in `/about.toml` + "BSD-2-Clause", # Keep this list in sync with those in `/about.toml` + "BSD-3-Clause", # Keep this list in sync with those in `/about.toml` + "BSL-1.0", # Keep this list in sync with those in `/about.toml` + "CC0-1.0", # Keep this list in sync with those in `/about.toml` + "CDLA-Permissive-2.0", # Keep this list in sync with those in `/about.toml` + "ISC", # Keep this list in sync with those in `/about.toml` + "MIT-0", # Keep this list in sync with those in `/about.toml` + "MIT", # Keep this list in sync with those in `/about.toml` + "MPL-2.0", # Keep this list in sync with those in `/about.toml` + "OpenSSL", # Keep this list in sync with those in `/about.toml` + "Unicode-3.0", # Keep this list in sync with those in `/about.toml` + "Unicode-DFS-2016", # Keep this list in sync with those in `/about.toml` + "Zlib", # Keep this list in sync with those in `/about.toml` + "NCSA", # Keep this list in sync with those in `/about.toml` + "bzip2-1.0.6", # Keep this list in sync with those in `/about.toml` + "OFL-1.1", # Keep this list in sync with those in `/about.toml` ] # The confidence threshold for detecting a license from license text. # The higher the value, the more closely the license text must be to the diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml new file mode 100644 index 0000000000..0ed348e82b --- /dev/null +++ b/desktop/Cargo.toml @@ -0,0 +1,66 @@ +[package] +name = "graphite-desktop" +version = "0.1.0" +description = "Graphite Desktop" +authors = ["Graphite Authors "] +license = "Apache-2.0" +repository = "" +edition = "2024" +rust-version = "1.87" + +[features] +default = ["recommended", "embedded_resources"] +recommended = ["gpu", "accelerated_paint"] +embedded_resources = ["dep:graphite-desktop-embedded-resources"] +gpu = ["graphite-desktop-wrapper/gpu"] + +# Hardware acceleration features +accelerated_paint = ["accelerated_paint_dmabuf", "accelerated_paint_d3d11", "accelerated_paint_iosurface"] +accelerated_paint_dmabuf = ["libc", "ash"] +accelerated_paint_d3d11 = ["windows", "ash"] +accelerated_paint_iosurface = ["objc2-io-surface", "objc2-metal", "core-foundation"] + +[dependencies] +# Local dependencies +graphite-desktop-wrapper = { path = "wrapper" } +graphite-desktop-embedded-resources = { path = "embedded-resources", optional = true } + +wgpu = { workspace = true } +winit = { workspace = true, features = ["serde"] } +thiserror = { workspace = true } +futures = { workspace = true } +cef = { workspace = true } +cef-dll-sys = { workspace = true } +tracing-subscriber = { workspace = true } +tracing = { workspace = true } +dirs = { workspace = true } +ron = { workspace = true} +bytemuck = { workspace = true } +glam = { workspace = true } +vello = { workspace = true } +derivative = { workspace = true } +rfd = { workspace = true } +open = { workspace = true } + +# Hardware acceleration dependencies +ash = { version = "0.38", optional = true } + +# Windows-specific dependencies +[target.'cfg(windows)'.dependencies] +windows = { version = "0.58", features = [ + "Win32_Graphics_Direct3D11", + "Win32_Graphics_Direct3D12", + "Win32_Graphics_Dxgi", + "Win32_Graphics_Dxgi_Common", + "Win32_Foundation" +], optional = true } + +# macOS-specific dependencies +[target.'cfg(target_os = "macos")'.dependencies] +objc2-io-surface = { version = "0.3", optional = true } +objc2-metal = { version = "0.3", optional = true } +core-foundation = { version = "0.9", optional = true } + +# Linux-specific dependencies +[target.'cfg(target_os = "linux")'.dependencies] +libc = { version = "0.2", optional = true } diff --git a/desktop/assets/graphite-icon-color.png b/desktop/assets/graphite-icon-color.png new file mode 100644 index 0000000000..f4e2047ca9 Binary files /dev/null and b/desktop/assets/graphite-icon-color.png differ diff --git a/desktop/assets/graphite-icon-color.svg b/desktop/assets/graphite-icon-color.svg new file mode 100644 index 0000000000..00166c61d8 --- /dev/null +++ b/desktop/assets/graphite-icon-color.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/desktop/assets/rs.graphite.GraphiteEditor.desktop b/desktop/assets/rs.graphite.GraphiteEditor.desktop new file mode 100644 index 0000000000..50ee7686a6 --- /dev/null +++ b/desktop/assets/rs.graphite.GraphiteEditor.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Graphite +GenericName=Vector & Raster Graphics Editor +Comment=Open-source vector & raster graphics editor. Featuring node based procedural nondestructive editing workflow. +Exec=graphite-editor +Terminal=false +Type=Application +Icon=graphite-icon-color +Categories=Graphics;VectorGraphics;RasterGraphics; +Keywords=graphite;editor;vector;raster;procedural;design; +StartupWMClass=rs.graphite.GraphiteEditor diff --git a/desktop/embedded-resources/Cargo.toml b/desktop/embedded-resources/Cargo.toml new file mode 100644 index 0000000000..9b061b9cf3 --- /dev/null +++ b/desktop/embedded-resources/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "graphite-desktop-embedded-resources" +version = "0.1.0" +description = "Graphite Desktop Embedded Resources" +authors = ["Graphite Authors "] +license = "Apache-2.0" +repository = "" +edition = "2024" +rust-version = "1.87" + +[dependencies] +include_dir = { workspace = true } + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(embedded_resources)'] } diff --git a/desktop/embedded-resources/build.rs b/desktop/embedded-resources/build.rs new file mode 100644 index 0000000000..899780fcaa --- /dev/null +++ b/desktop/embedded-resources/build.rs @@ -0,0 +1,17 @@ +const RESOURCES: &str = "../../frontend/dist"; + +// Check if the directory `RESOURCES` exists and sets the embedded_resources cfg accordingly +// Absolute path of `RESOURCES` available via the `EMBEDDED_RESOURCES` environment variable +fn main() { + let crate_dir = std::path::PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); + + println!("cargo:rerun-if-changed={RESOURCES}"); + if let Ok(resources) = crate_dir.join(RESOURCES).canonicalize() + && resources.exists() + { + println!("cargo:rustc-cfg=embedded_resources"); + println!("cargo:rustc-env=EMBEDDED_RESOURCES={}", resources.to_string_lossy()); + } else { + println!("cargo:warning=Resource directory does not exist. Resources will not be embedded. Did you forget to build the frontend?"); + } +} diff --git a/desktop/embedded-resources/src/lib.rs b/desktop/embedded-resources/src/lib.rs new file mode 100644 index 0000000000..fb007d8138 --- /dev/null +++ b/desktop/embedded-resources/src/lib.rs @@ -0,0 +1,10 @@ +//! This crate provides `EMBEDDED_RESOURCES` that can be included in the desktop application binary. +//! It is intended to be used by the `embedded_resources` feature of the `graphite-desktop` crate. +//! The build script checks if the specified resources directory exists and sets the `embedded_resources` cfg flag accordingly. +//! If the resources directory does not exist, resources will not be embedded and a warning will be reported during compilation. + +#[cfg(embedded_resources)] +pub static EMBEDDED_RESOURCES: Option = Some(include_dir::include_dir!("$EMBEDDED_RESOURCES")); + +#[cfg(not(embedded_resources))] +pub static EMBEDDED_RESOURCES: Option = None; diff --git a/desktop/src/app.rs b/desktop/src/app.rs new file mode 100644 index 0000000000..ccae307dc8 --- /dev/null +++ b/desktop/src/app.rs @@ -0,0 +1,344 @@ +use crate::CustomEvent; +use crate::cef::WindowSize; +use crate::consts::{APP_NAME, CEF_MESSAGE_LOOP_MAX_ITERATIONS}; +use crate::render::GraphicsState; +use graphite_desktop_wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, Platform}; +use graphite_desktop_wrapper::{DesktopWrapper, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages}; + +use rfd::AsyncFileDialog; +use std::sync::Arc; +use std::sync::mpsc::Sender; +use std::sync::mpsc::SyncSender; +use std::thread; +use std::time::Duration; +use std::time::Instant; +use winit::application::ApplicationHandler; +use winit::dpi::PhysicalSize; +use winit::event::WindowEvent; +use winit::event_loop::ActiveEventLoop; +use winit::event_loop::ControlFlow; +use winit::event_loop::EventLoopProxy; +use winit::window::Window; +use winit::window::WindowId; + +use crate::cef; + +pub(crate) struct WinitApp { + cef_context: Box, + window: Option>, + cef_schedule: Option, + window_size_sender: Sender, + graphics_state: Option, + wgpu_context: WgpuContext, + event_loop_proxy: EventLoopProxy, + desktop_wrapper: DesktopWrapper, + last_ui_update: Instant, + avg_frame_time: f32, + start_render_sender: SyncSender<()>, + web_communication_initialized: bool, + web_communication_startup_buffer: Vec>, +} + +impl WinitApp { + pub(crate) fn new(cef_context: Box, window_size_sender: Sender, wgpu_context: WgpuContext, event_loop_proxy: EventLoopProxy) -> Self { + let rendering_loop_proxy = event_loop_proxy.clone(); + let (start_render_sender, start_render_receiver) = std::sync::mpsc::sync_channel(1); + std::thread::spawn(move || { + loop { + let result = futures::executor::block_on(DesktopWrapper::execute_node_graph()); + let _ = rendering_loop_proxy.send_event(CustomEvent::NodeGraphExecutionResult(result)); + let _ = start_render_receiver.recv(); + } + }); + + Self { + cef_context, + window: None, + cef_schedule: Some(Instant::now()), + graphics_state: None, + window_size_sender, + wgpu_context, + event_loop_proxy, + desktop_wrapper: DesktopWrapper::new(), + last_ui_update: Instant::now(), + avg_frame_time: 0., + start_render_sender, + web_communication_initialized: false, + web_communication_startup_buffer: Vec::new(), + } + } + + fn handle_desktop_frontend_message(&mut self, message: DesktopFrontendMessage) { + match message { + DesktopFrontendMessage::ToWeb(messages) => { + let Some(bytes) = serialize_frontend_messages(messages) else { + tracing::error!("Failed to serialize frontend messages"); + return; + }; + self.send_or_queue_web_message(bytes); + } + DesktopFrontendMessage::OpenFileDialog { title, filters, context } => { + let event_loop_proxy = self.event_loop_proxy.clone(); + let _ = thread::spawn(move || { + let mut dialog = AsyncFileDialog::new().set_title(title); + for filter in filters { + dialog = dialog.add_filter(filter.name, &filter.extensions); + } + + let show_dialog = async move { dialog.pick_file().await.map(|f| f.path().to_path_buf()) }; + + if let Some(path) = futures::executor::block_on(show_dialog) + && let Ok(content) = std::fs::read(&path) + { + let message = DesktopWrapperMessage::OpenFileDialogResult { path, content, context }; + let _ = event_loop_proxy.send_event(CustomEvent::DesktopWrapperMessage(message)); + } + }); + } + DesktopFrontendMessage::SaveFileDialog { + title, + default_filename, + default_folder, + filters, + context, + } => { + let event_loop_proxy = self.event_loop_proxy.clone(); + let _ = thread::spawn(move || { + let mut dialog = AsyncFileDialog::new().set_title(title).set_file_name(default_filename); + if let Some(folder) = default_folder { + dialog = dialog.set_directory(folder); + } + for filter in filters { + dialog = dialog.add_filter(filter.name, &filter.extensions); + } + + let show_dialog = async move { dialog.save_file().await.map(|f| f.path().to_path_buf()) }; + + if let Some(path) = futures::executor::block_on(show_dialog) { + let message = DesktopWrapperMessage::SaveFileDialogResult { path, context }; + let _ = event_loop_proxy.send_event(CustomEvent::DesktopWrapperMessage(message)); + } + }); + } + DesktopFrontendMessage::WriteFile { path, content } => { + if let Err(e) = std::fs::write(&path, content) { + tracing::error!("Failed to write file {}: {}", path.display(), e); + } + } + DesktopFrontendMessage::OpenUrl(url) => { + let _ = thread::spawn(move || { + if let Err(e) = open::that(&url) { + tracing::error!("Failed to open URL: {}: {}", url, e); + } + }); + } + DesktopFrontendMessage::UpdateViewportBounds { x, y, width, height } => { + if let Some(graphics_state) = &mut self.graphics_state + && let Some(window) = &self.window + { + let window_size = window.inner_size(); + + let viewport_offset_x = x / window_size.width as f32; + let viewport_offset_y = y / window_size.height as f32; + graphics_state.set_viewport_offset([viewport_offset_x, viewport_offset_y]); + + let viewport_scale_x = if width != 0.0 { window_size.width as f32 / width } else { 1.0 }; + let viewport_scale_y = if height != 0.0 { window_size.height as f32 / height } else { 1.0 }; + graphics_state.set_viewport_scale([viewport_scale_x, viewport_scale_y]); + } + } + DesktopFrontendMessage::UpdateOverlays(scene) => { + if let Some(graphics_state) = &mut self.graphics_state { + graphics_state.set_overlays_scene(scene); + } + } + DesktopFrontendMessage::UpdateWindowState { maximized, minimized } => { + if let Some(window) = &self.window { + window.set_maximized(maximized); + window.set_minimized(minimized); + } + } + DesktopFrontendMessage::CloseWindow => { + let _ = self.event_loop_proxy.send_event(CustomEvent::CloseWindow); + } + } + } + + fn handle_desktop_frontend_messages(&mut self, messages: Vec) { + for message in messages { + self.handle_desktop_frontend_message(message); + } + } + + fn dispatch_desktop_wrapper_message(&mut self, message: DesktopWrapperMessage) { + let responses = self.desktop_wrapper.dispatch(message); + self.handle_desktop_frontend_messages(responses); + } + + fn send_or_queue_web_message(&mut self, message: Vec) { + if self.web_communication_initialized { + self.cef_context.send_web_message(message); + } else { + self.web_communication_startup_buffer.push(message); + } + } +} + +impl ApplicationHandler for WinitApp { + fn about_to_wait(&mut self, event_loop: &ActiveEventLoop) { + // Set a timeout in case we miss any cef schedule requests + let timeout = Instant::now() + Duration::from_millis(10); + let wait_until = timeout.min(self.cef_schedule.unwrap_or(timeout)); + if let Some(schedule) = self.cef_schedule + && schedule < Instant::now() + { + self.cef_schedule = None; + // Poll cef message loop multiple times to avoid message loop starvation + for _ in 0..CEF_MESSAGE_LOOP_MAX_ITERATIONS { + self.cef_context.work(); + } + } + if let Some(window) = &self.window.as_ref() { + window.request_redraw(); + } + + event_loop.set_control_flow(ControlFlow::WaitUntil(wait_until)); + } + + fn resumed(&mut self, event_loop: &ActiveEventLoop) { + let mut window = Window::default_attributes() + .with_title(APP_NAME) + .with_min_inner_size(winit::dpi::LogicalSize::new(400, 300)) + .with_inner_size(winit::dpi::LogicalSize::new(1200, 800)); + + #[cfg(target_os = "linux")] + { + use crate::consts::APP_ID; + use winit::platform::wayland::ActiveEventLoopExtWayland; + + window = if event_loop.is_wayland() { + winit::platform::wayland::WindowAttributesExtWayland::with_name(window, APP_ID, "") + } else { + winit::platform::x11::WindowAttributesExtX11::with_name(window, APP_ID, APP_NAME) + } + } + + let window = Arc::new(event_loop.create_window(window).unwrap()); + let graphics_state = GraphicsState::new(window.clone(), self.wgpu_context.clone()); + + self.window = Some(window); + self.graphics_state = Some(graphics_state); + + tracing::info!("Winit window created and ready"); + + self.desktop_wrapper.init(self.wgpu_context.clone()); + + #[cfg(target_os = "windows")] + let platform = Platform::Windows; + #[cfg(target_os = "macos")] + let platform = Platform::Mac; + #[cfg(target_os = "linux")] + let platform = Platform::Linux; + self.dispatch_desktop_wrapper_message(DesktopWrapperMessage::UpdatePlatform(platform)); + } + + fn user_event(&mut self, event_loop: &ActiveEventLoop, event: CustomEvent) { + match event { + CustomEvent::WebCommunicationInitialized => { + self.web_communication_initialized = true; + for message in self.web_communication_startup_buffer.drain(..) { + self.cef_context.send_web_message(message); + } + } + CustomEvent::DesktopWrapperMessage(message) => self.dispatch_desktop_wrapper_message(message), + CustomEvent::NodeGraphExecutionResult(result) => match result { + NodeGraphExecutionResult::HasRun(texture) => { + self.dispatch_desktop_wrapper_message(DesktopWrapperMessage::PollNodeGraphEvaluation); + if let Some(texture) = texture + && let Some(graphics_state) = self.graphics_state.as_mut() + && let Some(window) = self.window.as_ref() + { + graphics_state.bind_viewport_texture(texture); + window.request_redraw(); + } + } + NodeGraphExecutionResult::NotRun => {} + }, + CustomEvent::UiUpdate(texture) => { + if let Some(graphics_state) = self.graphics_state.as_mut() { + graphics_state.resize(texture.width(), texture.height()); + graphics_state.bind_ui_texture(texture); + let elapsed = self.last_ui_update.elapsed().as_secs_f32(); + self.last_ui_update = Instant::now(); + if elapsed < 0.5 { + self.avg_frame_time = (self.avg_frame_time * 3. + elapsed) / 4.; + } + } + if let Some(window) = &self.window { + window.request_redraw(); + } + } + CustomEvent::ScheduleBrowserWork(instant) => { + if instant <= Instant::now() { + self.cef_context.work(); + } else { + self.cef_schedule = Some(instant); + } + } + CustomEvent::CloseWindow => { + // TODO: Implement graceful shutdown + + tracing::info!("Exiting main event loop"); + event_loop.exit(); + } + } + } + + fn window_event(&mut self, event_loop: &ActiveEventLoop, _window_id: WindowId, event: WindowEvent) { + self.cef_context.handle_window_event(&event); + + match event { + WindowEvent::CloseRequested => { + let _ = self.event_loop_proxy.send_event(CustomEvent::CloseWindow); + } + WindowEvent::Resized(PhysicalSize { width, height }) => { + let _ = self.window_size_sender.send(WindowSize::new(width as usize, height as usize)); + self.cef_context.notify_of_resize(); + } + WindowEvent::RedrawRequested => { + let Some(ref mut graphics_state) = self.graphics_state else { return }; + // Only rerender once we have a new ui texture to display + if let Some(window) = &self.window { + match graphics_state.render(window.as_ref()) { + Ok(_) => {} + Err(wgpu::SurfaceError::Lost) => { + tracing::warn!("lost surface"); + } + Err(wgpu::SurfaceError::OutOfMemory) => { + event_loop.exit(); + } + Err(e) => tracing::error!("{:?}", e), + } + let _ = self.start_render_sender.try_send(()); + } + } + // Currently not supported on wayland see https://github.com/rust-windowing/winit/issues/1881 + WindowEvent::DroppedFile(path) => { + match std::fs::read(&path) { + Ok(content) => { + let message = DesktopWrapperMessage::OpenFile { path, content }; + let _ = self.event_loop_proxy.send_event(CustomEvent::DesktopWrapperMessage(message)); + } + Err(e) => { + tracing::error!("Failed to read dropped file {}: {}", path.display(), e); + return; + } + }; + } + _ => {} + } + + // Notify cef of possible input events + self.cef_context.work(); + } +} diff --git a/desktop/src/cef.rs b/desktop/src/cef.rs new file mode 100644 index 0000000000..cbe60c2191 --- /dev/null +++ b/desktop/src/cef.rs @@ -0,0 +1,252 @@ +//! CEF (Chromium Embedded Framework) integration for Graphite Desktop +//! +//! This module provides CEF browser integration with hardware-accelerated texture sharing. +//! +//! # Hardware Acceleration +//! +//! The texture import system supports platform-specific hardware acceleration: +//! +//! - **Linux**: DMA-BUF via Vulkan external memory (`accelerated_paint_dmabuf` feature) +//! - **Windows**: D3D11 shared textures via either Vulkan or D3D12 interop (`accelerated_paint_d3d11` feature) +//! - **macOS**: IOSurface via Metal/Vulkan interop (`accelerated_paint_iosurface` feature) +//! +//! +//! The system gracefully falls back to CPU textures when hardware acceleration is unavailable. + +use crate::CustomEvent; +use crate::render::FrameBufferRef; +use graphite_desktop_wrapper::{WgpuContext, deserialize_editor_message}; +use std::fs::File; +use std::io::{Cursor, Read}; +use std::path::PathBuf; +use std::sync::mpsc::Receiver; +use std::sync::{Arc, Mutex}; +use std::time::Instant; + +mod consts; +mod context; +mod dirs; +mod input; +mod internal; +mod ipc; +mod platform; +mod utility; + +#[cfg(feature = "accelerated_paint")] +mod texture_import; +#[cfg(feature = "accelerated_paint")] +use texture_import::SharedTextureHandle; + +pub(crate) use context::{CefContext, CefContextBuilder, InitError}; +use winit::event_loop::EventLoopProxy; + +pub(crate) trait CefEventHandler: Clone + Send + Sync + 'static { + fn window_size(&self) -> WindowSize; + fn draw<'a>(&self, frame_buffer: FrameBufferRef<'a>); + #[cfg(feature = "accelerated_paint")] + fn draw_gpu(&self, shared_texture: SharedTextureHandle); + fn load_resource(&self, path: PathBuf) -> Option; + /// Scheudule the main event loop to run the cef event loop after the timeout + /// [`_cef_browser_process_handler_t::on_schedule_message_pump_work`] for more documentation. + fn schedule_cef_message_loop_work(&self, scheduled_time: Instant); + fn initialized_web_communication(&self); + fn receive_web_message(&self, message: &[u8]); +} + +#[derive(Clone, Copy)] +pub(crate) struct WindowSize { + pub(crate) width: usize, + pub(crate) height: usize, +} + +impl WindowSize { + pub(crate) fn new(width: usize, height: usize) -> Self { + Self { width, height } + } +} + +#[derive(Clone)] +pub(crate) struct Resource { + pub(crate) reader: ResourceReader, + pub(crate) mimetype: Option, +} + +#[expect(dead_code)] +#[derive(Clone)] +pub(crate) enum ResourceReader { + Embedded(Cursor<&'static [u8]>), + File(Arc), +} +impl Read for ResourceReader { + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + match self { + ResourceReader::Embedded(cursor) => cursor.read(buf), + ResourceReader::File(file) => file.as_ref().read(buf), + } + } +} + +#[derive(Clone)] +pub(crate) struct CefHandler { + window_size_receiver: Arc>, + event_loop_proxy: EventLoopProxy, + wgpu_context: WgpuContext, +} + +struct WindowSizeReceiver { + receiver: Receiver, + window_size: WindowSize, +} +impl WindowSizeReceiver { + fn new(window_size_receiver: Receiver) -> Self { + Self { + window_size: WindowSize { width: 1, height: 1 }, + receiver: window_size_receiver, + } + } +} +impl CefHandler { + pub(crate) fn new(window_size_receiver: Receiver, event_loop_proxy: EventLoopProxy, wgpu_context: WgpuContext) -> Self { + Self { + window_size_receiver: Arc::new(Mutex::new(WindowSizeReceiver::new(window_size_receiver))), + event_loop_proxy, + wgpu_context, + } + } +} + +impl CefEventHandler for CefHandler { + fn window_size(&self) -> WindowSize { + let Ok(mut guard) = self.window_size_receiver.lock() else { + tracing::error!("Failed to lock window_size_receiver"); + return WindowSize::new(1, 1); + }; + let WindowSizeReceiver { receiver, window_size } = &mut *guard; + for new_window_size in receiver.try_iter() { + *window_size = new_window_size; + } + *window_size + } + fn draw<'a>(&self, frame_buffer: FrameBufferRef<'a>) { + let width = frame_buffer.width() as u32; + let height = frame_buffer.height() as u32; + let texture = self.wgpu_context.device.create_texture(&wgpu::TextureDescriptor { + label: Some("CEF Texture"), + size: wgpu::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: wgpu::TextureFormat::Bgra8UnormSrgb, + usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], + }); + self.wgpu_context.queue.write_texture( + wgpu::TexelCopyTextureInfo { + texture: &texture, + mip_level: 0, + origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, + }, + frame_buffer.buffer(), + wgpu::TexelCopyBufferLayout { + offset: 0, + bytes_per_row: Some(4 * width), + rows_per_image: Some(height), + }, + wgpu::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + ); + + let _ = self.event_loop_proxy.send_event(CustomEvent::UiUpdate(texture)); + } + + #[cfg(feature = "accelerated_paint")] + fn draw_gpu(&self, shared_texture: SharedTextureHandle) { + match shared_texture.import_texture(&self.wgpu_context.device) { + Ok(texture) => { + let _ = self.event_loop_proxy.send_event(CustomEvent::UiUpdate(texture)); + } + Err(e) => { + tracing::error!("Failed to import shared texture: {}", e); + } + } + } + + fn load_resource(&self, path: PathBuf) -> Option { + let path = if path.as_os_str().is_empty() { PathBuf::from("index.html") } else { path }; + + let mimetype = match path.extension().and_then(|s| s.to_str()).unwrap_or("") { + "html" => Some("text/html".to_string()), + "css" => Some("text/css".to_string()), + "txt" => Some("text/plain".to_string()), + "wasm" => Some("application/wasm".to_string()), + "js" => Some("application/javascript".to_string()), + "png" => Some("image/png".to_string()), + "jpg" | "jpeg" => Some("image/jpeg".to_string()), + "svg" => Some("image/svg+xml".to_string()), + "xml" => Some("application/xml".to_string()), + "json" => Some("application/json".to_string()), + "ico" => Some("image/x-icon".to_string()), + "woff" => Some("font/woff".to_string()), + "woff2" => Some("font/woff2".to_string()), + "ttf" => Some("font/ttf".to_string()), + "otf" => Some("font/otf".to_string()), + "webmanifest" => Some("application/manifest+json".to_string()), + "graphite" => Some("application/graphite+json".to_string()), + _ => None, + }; + + #[cfg(feature = "embedded_resources")] + { + if let Some(resources) = &graphite_desktop_embedded_resources::EMBEDDED_RESOURCES + && let Some(file) = resources.get_file(&path) + { + return Some(Resource { + reader: ResourceReader::Embedded(Cursor::new(file.contents())), + mimetype, + }); + } + } + + #[cfg(not(feature = "embedded_resources"))] + { + use std::path::Path; + let asset_path_env = std::env::var("GRAPHITE_RESOURCES").ok()?; + let asset_path = Path::new(&asset_path_env); + let file_path = asset_path.join(path.strip_prefix("/").unwrap_or(&path)); + if file_path.exists() && file_path.is_file() { + if let Ok(file) = std::fs::File::open(file_path) { + return Some(Resource { + reader: ResourceReader::File(file.into()), + mimetype, + }); + } + } + } + + None + } + + fn schedule_cef_message_loop_work(&self, scheduled_time: std::time::Instant) { + let _ = self.event_loop_proxy.send_event(CustomEvent::ScheduleBrowserWork(scheduled_time)); + } + + fn initialized_web_communication(&self) { + let _ = self.event_loop_proxy.send_event(CustomEvent::WebCommunicationInitialized); + } + + fn receive_web_message(&self, message: &[u8]) { + let Some(desktop_wrapper_message) = deserialize_editor_message(message) else { + tracing::error!("Failed to deserialize web message"); + return; + }; + let _ = self.event_loop_proxy.send_event(CustomEvent::DesktopWrapperMessage(desktop_wrapper_message)); + } +} diff --git a/desktop/src/cef/consts.rs b/desktop/src/cef/consts.rs new file mode 100644 index 0000000000..99b269c744 --- /dev/null +++ b/desktop/src/cef/consts.rs @@ -0,0 +1,2 @@ +pub(crate) const RESOURCE_SCHEME: &str = "resources"; +pub(crate) const RESOURCE_DOMAIN: &str = "resources"; diff --git a/desktop/src/cef/context.rs b/desktop/src/cef/context.rs new file mode 100644 index 0000000000..2880663a10 --- /dev/null +++ b/desktop/src/cef/context.rs @@ -0,0 +1,15 @@ +mod multithreaded; +mod singlethreaded; + +mod builder; +pub(crate) use builder::{CefContextBuilder, InitError}; + +pub(crate) trait CefContext { + fn work(&mut self); + + fn handle_window_event(&mut self, event: &winit::event::WindowEvent); + + fn notify_of_resize(&self); + + fn send_web_message(&self, message: Vec); +} diff --git a/desktop/src/cef/context/builder.rs b/desktop/src/cef/context/builder.rs new file mode 100644 index 0000000000..c771c4aecf --- /dev/null +++ b/desktop/src/cef/context/builder.rs @@ -0,0 +1,176 @@ +use cef::args::Args; +use cef::sys::{CEF_API_VERSION_LAST, cef_resultcode_t}; +use cef::{ + App, BrowserSettings, CefString, Client, DictionaryValue, ImplCommandLine, RenderHandler, RequestContext, Settings, WindowInfo, api_hash, browser_host_create_browser_sync, execute_process, +}; + +use super::CefContext; +use super::singlethreaded::SingleThreadedCefContext; +use crate::cef::CefEventHandler; +use crate::cef::consts::{RESOURCE_DOMAIN, RESOURCE_SCHEME}; +use crate::cef::dirs::{cef_cache_dir, cef_data_dir}; +use crate::cef::input::InputState; +use crate::cef::internal::{BrowserProcessAppImpl, BrowserProcessClientImpl, RenderHandlerImpl, RenderProcessAppImpl}; + +pub(crate) struct CefContextBuilder { + pub(crate) args: Args, + pub(crate) is_sub_process: bool, + _marker: std::marker::PhantomData, +} + +unsafe impl Send for CefContextBuilder {} + +impl CefContextBuilder { + pub(crate) fn new() -> Self { + #[cfg(target_os = "macos")] + let _loader = { + let loader = library_loader::LibraryLoader::new(&std::env::current_exe().unwrap(), false); + assert!(loader.load()); + loader + }; + let _ = api_hash(CEF_API_VERSION_LAST, 0); + + let args = Args::new(); + let cmd = args.as_cmd_line().unwrap(); + let switch = CefString::from("type"); + let is_sub_process = cmd.has_switch(Some(&switch)) == 1; + + Self { + args, + is_sub_process, + _marker: std::marker::PhantomData, + } + } + + pub(crate) fn is_sub_process(&self) -> bool { + self.is_sub_process + } + + pub(crate) fn execute_sub_process(&self) -> SetupError { + let cmd = self.args.as_cmd_line().unwrap(); + let switch = CefString::from("type"); + let process_type = CefString::from(&cmd.switch_value(Some(&switch))); + let mut app = RenderProcessAppImpl::::app(); + let ret = execute_process(Some(self.args.as_main_args()), Some(&mut app), std::ptr::null_mut()); + if ret >= 0 { + SetupError::SubprocessFailed(process_type.to_string()) + } else { + SetupError::Subprocess + } + } + + #[cfg(target_os = "macos")] + pub(crate) fn initialize(self, event_handler: H) -> Result { + let settings = Settings { + windowless_rendering_enabled: 1, + multi_threaded_message_loop: 0, + external_message_pump: 1, + root_cache_path: cef_data_dir().to_str().map(CefString::from).unwrap(), + cache_path: cef_cache_dir().to_str().map(CefString::from).unwrap(), + ..Default::default() + }; + + self.initialize_inner(&event_handler, settings)?; + + create_browser(event_handler) + } + + #[cfg(not(target_os = "macos"))] + pub(crate) fn initialize(self, event_handler: H) -> Result { + let settings = Settings { + windowless_rendering_enabled: 1, + multi_threaded_message_loop: 1, + root_cache_path: cef_data_dir().to_str().map(CefString::from).unwrap(), + cache_path: cef_cache_dir().to_str().map(CefString::from).unwrap(), + ..Default::default() + }; + + self.initialize_inner(&event_handler, settings)?; + + super::multithreaded::run_on_ui_thread(move || match create_browser(event_handler) { + Ok(context) => { + super::multithreaded::CONTEXT.with(|b| { + *b.borrow_mut() = Some(context); + }); + } + Err(e) => { + tracing::error!("Failed to initialize CEF context: {:?}", e); + std::process::exit(1); + } + }); + + Ok(super::multithreaded::MultiThreadedCefContextProxy) + } + + fn initialize_inner(self, event_handler: &H, settings: Settings) -> Result<(), InitError> { + let mut cef_app = App::new(BrowserProcessAppImpl::new(event_handler.clone())); + let result = cef::initialize(Some(self.args.as_main_args()), Some(&settings), Some(&mut cef_app), std::ptr::null_mut()); + // Attention! Wrapping this in an extra App is necessary, otherwise the program still compiles but segfaults + + if result != 1 { + let cef_exit_code = cef::get_exit_code() as u32; + if cef_exit_code == cef_resultcode_t::CEF_RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED as u32 { + return Err(InitError::AlreadyRunning); + } + return Err(InitError::InitializationFailed(cef_exit_code)); + } + Ok(()) + } +} + +fn create_browser(event_handler: H) -> Result { + let render_handler = RenderHandler::new(RenderHandlerImpl::new(event_handler.clone())); + let mut client = Client::new(BrowserProcessClientImpl::new(render_handler, event_handler.clone())); + + let url = CefString::from(format!("{RESOURCE_SCHEME}://{RESOURCE_DOMAIN}/").as_str()); + + let window_info = WindowInfo { + windowless_rendering_enabled: 1, + #[cfg(feature = "accelerated_paint")] + shared_texture_enabled: if crate::cef::platform::should_enable_hardware_acceleration() { 1 } else { 0 }, + ..Default::default() + }; + + let settings = BrowserSettings { + windowless_frame_rate: crate::consts::CEF_WINDOWLESS_FRAME_RATE, + background_color: 0x0, + ..Default::default() + }; + + let browser = browser_host_create_browser_sync( + Some(&window_info), + Some(&mut client), + Some(&url), + Some(&settings), + Option::<&mut DictionaryValue>::None, + Option::<&mut RequestContext>::None, + ); + + if let Some(browser) = browser { + Ok(SingleThreadedCefContext { + browser, + input_state: InputState::default(), + }) + } else { + tracing::error!("Failed to create browser"); + Err(InitError::BrowserCreationFailed) + } +} + +#[derive(thiserror::Error, Debug)] +pub(crate) enum SetupError { + #[error("This is the sub process should exit immediately")] + Subprocess, + #[error("Subprocess returned non zero exit code")] + SubprocessFailed(String), +} + +#[derive(thiserror::Error, Debug)] +pub(crate) enum InitError { + #[error("Initialization failed")] + InitializationFailed(u32), + #[error("Browser creation failed")] + BrowserCreationFailed, + #[error("Another instance is already running")] + AlreadyRunning, +} diff --git a/desktop/src/cef/context/multithreaded.rs b/desktop/src/cef/context/multithreaded.rs new file mode 100644 index 0000000000..9434a99d86 --- /dev/null +++ b/desktop/src/cef/context/multithreaded.rs @@ -0,0 +1,67 @@ +use cef::sys::cef_thread_id_t; +use cef::{Task, ThreadId, post_task}; +use std::cell::RefCell; +use winit::event::WindowEvent; + +use crate::cef::internal::task::ClosureTask; + +use super::CefContext; +use super::singlethreaded::SingleThreadedCefContext; + +thread_local! { + pub(super) static CONTEXT: RefCell> = const { RefCell::new(None) }; +} + +pub(super) struct MultiThreadedCefContextProxy; + +impl CefContext for MultiThreadedCefContextProxy { + fn work(&mut self) { + // CEF handles its own message loop in multi-threaded mode + } + + fn handle_window_event(&mut self, event: &WindowEvent) { + let event_clone = event.clone(); + run_on_ui_thread(move || { + CONTEXT.with(|b| { + if let Some(context) = b.borrow_mut().as_mut() { + context.handle_window_event(&event_clone); + } + }); + }); + } + + fn notify_of_resize(&self) { + run_on_ui_thread(move || { + CONTEXT.with(|b| { + if let Some(context) = b.borrow_mut().as_mut() { + context.notify_of_resize(); + } + }); + }); + } + + fn send_web_message(&self, message: Vec) { + run_on_ui_thread(move || { + CONTEXT.with(|b| { + if let Some(context) = b.borrow_mut().as_mut() { + context.send_web_message(message); + } + }); + }); + } +} + +impl Drop for MultiThreadedCefContextProxy { + fn drop(&mut self) { + cef::shutdown(); + } +} + +pub(super) fn run_on_ui_thread(closure: F) +where + F: FnOnce() + Send + 'static, +{ + let closure_task = ClosureTask::new(closure); + let mut task = Task::new(closure_task); + post_task(ThreadId::from(cef_thread_id_t::TID_UI), Some(&mut task)); +} diff --git a/desktop/src/cef/context/singlethreaded.rs b/desktop/src/cef/context/singlethreaded.rs new file mode 100644 index 0000000000..2222c85215 --- /dev/null +++ b/desktop/src/cef/context/singlethreaded.rs @@ -0,0 +1,48 @@ +use cef::{Browser, ImplBrowser, ImplBrowserHost}; +use winit::event::WindowEvent; + +use crate::cef::input; +use crate::cef::input::InputState; +use crate::cef::ipc::{MessageType, SendMessage}; + +use super::CefContext; + +pub(super) struct SingleThreadedCefContext { + pub(super) browser: Browser, + pub(super) input_state: InputState, +} + +impl CefContext for SingleThreadedCefContext { + fn work(&mut self) { + cef::do_message_loop_work(); + } + + fn handle_window_event(&mut self, event: &WindowEvent) { + input::handle_window_event(&self.browser, &mut self.input_state, event) + } + + fn notify_of_resize(&self) { + self.browser.host().unwrap().was_resized(); + } + + fn send_web_message(&self, message: Vec) { + self.send_message(MessageType::SendToJS, &message); + } +} + +impl Drop for SingleThreadedCefContext { + fn drop(&mut self) { + cef::shutdown(); + } +} + +impl SendMessage for SingleThreadedCefContext { + fn send_message(&self, message_type: MessageType, message: &[u8]) { + let Some(frame) = self.browser.main_frame() else { + tracing::error!("Main frame is not available, cannot send message"); + return; + }; + + frame.send_message(message_type, message); + } +} diff --git a/desktop/src/cef/dirs.rs b/desktop/src/cef/dirs.rs new file mode 100644 index 0000000000..0d4ce6fbc2 --- /dev/null +++ b/desktop/src/cef/dirs.rs @@ -0,0 +1,17 @@ +use std::path::PathBuf; + +use crate::dirs::{ensure_dir_exists, graphite_data_dir}; + +static CEF_DIR_NAME: &str = "browser"; + +pub(crate) fn cef_data_dir() -> PathBuf { + let path = graphite_data_dir().join(CEF_DIR_NAME); + ensure_dir_exists(&path); + path +} + +pub(crate) fn cef_cache_dir() -> PathBuf { + let path = cef_data_dir().join("cache"); + ensure_dir_exists(&path); + path +} diff --git a/desktop/src/cef/input.rs b/desktop/src/cef/input.rs new file mode 100644 index 0000000000..8b4e39ecdf --- /dev/null +++ b/desktop/src/cef/input.rs @@ -0,0 +1,275 @@ +use cef::sys::{cef_event_flags_t, cef_key_event_type_t, cef_mouse_button_type_t}; +use cef::{Browser, ImplBrowser, ImplBrowserHost, KeyEvent, KeyEventType, MouseEvent}; +use winit::dpi::PhysicalPosition; +use winit::event::{ElementState, MouseButton, MouseScrollDelta, WindowEvent}; + +mod keymap; +use keymap::{ToDomBits, ToVKBits}; + +pub(crate) fn handle_window_event(browser: &Browser, input_state: &mut InputState, event: &WindowEvent) { + match event { + WindowEvent::CursorMoved { position, .. } => { + if let Some(host) = browser.host() { + host.set_focus(1); + } + + input_state.update_mouse_position(position); + let mouse_event: MouseEvent = (input_state).into(); + browser.host().unwrap().send_mouse_move_event(Some(&mouse_event), 0); + } + WindowEvent::MouseInput { state, button, .. } => { + if let Some(host) = browser.host() { + host.set_focus(1); + + let mouse_up = match state { + ElementState::Pressed => 0, + ElementState::Released => 1, + }; + + let cef_button = match button { + MouseButton::Left => Some(cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_LEFT)), + MouseButton::Right => Some(cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_RIGHT)), + MouseButton::Middle => Some(cef::MouseButtonType::from(cef_mouse_button_type_t::MBT_MIDDLE)), + MouseButton::Forward => None, //TODO: Handle Forward button + MouseButton::Back => None, //TODO: Handle Back button + _ => None, + }; + + let mut mouse_state = input_state.mouse_state.clone(); + match button { + MouseButton::Left => { + mouse_state.left = match state { + ElementState::Pressed => true, + ElementState::Released => false, + } + } + MouseButton::Right => { + mouse_state.right = match state { + ElementState::Pressed => true, + ElementState::Released => false, + } + } + MouseButton::Middle => { + mouse_state.middle = match state { + ElementState::Pressed => true, + ElementState::Released => false, + } + } + _ => {} + }; + input_state.update_mouse_state(mouse_state); + + let mouse_event: MouseEvent = input_state.into(); + + if let Some(button) = cef_button { + host.send_mouse_click_event( + Some(&mouse_event), + button, + mouse_up, + 1, // click count + ); + } + } + } + WindowEvent::MouseWheel { delta, phase: _, device_id: _, .. } => { + if let Some(host) = browser.host() { + let mouse_event = input_state.into(); + let line_width = 40; //feels about right, TODO: replace with correct value + let line_height = 30; //feels about right, TODO: replace with correct value + let (delta_x, delta_y) = match delta { + MouseScrollDelta::LineDelta(x, y) => (x * line_width as f32, y * line_height as f32), + MouseScrollDelta::PixelDelta(physical_position) => (physical_position.x as f32, physical_position.y as f32), + }; + host.send_mouse_wheel_event(Some(&mouse_event), delta_x as i32, delta_y as i32); + } + } + WindowEvent::ModifiersChanged(modifiers) => { + input_state.update_modifiers(&modifiers.state()); + } + WindowEvent::KeyboardInput { device_id: _, event, is_synthetic: _ } => { + if let Some(host) = browser.host() { + host.set_focus(1); + + let (named_key, character) = match &event.logical_key { + winit::keyboard::Key::Named(named_key) => ( + Some(named_key), + match named_key { + winit::keyboard::NamedKey::Space => Some(' '), + winit::keyboard::NamedKey::Enter => Some('\u{000d}'), + _ => None, + }, + ), + winit::keyboard::Key::Character(str) => { + let char = str.chars().next().unwrap_or('\0'); + (None, Some(char)) + } + _ => return, + }; + + let mut key_event = KeyEvent { + size: size_of::(), + focus_on_editable_field: 1, + modifiers: input_state.cef_modifiers(&event.location, event.repeat).raw(), + is_system_key: 0, + ..Default::default() + }; + + if let Some(named_key) = named_key { + key_event.native_key_code = named_key.to_dom_bits(); + key_event.windows_key_code = named_key.to_vk_bits(); + } else if let Some(char) = character { + key_event.native_key_code = char.to_dom_bits(); + key_event.windows_key_code = char.to_vk_bits(); + } + + match event.state { + ElementState::Pressed => { + key_event.type_ = KeyEventType::from(cef_key_event_type_t::KEYEVENT_RAWKEYDOWN); + host.send_key_event(Some(&key_event)); + + if let Some(char) = character { + let mut buf = [0; 2]; + char.encode_utf16(&mut buf); + key_event.character = buf[0]; + let mut buf = [0; 2]; + char.to_lowercase().next().unwrap().encode_utf16(&mut buf); + key_event.unmodified_character = buf[0]; + + key_event.type_ = KeyEventType::from(cef_key_event_type_t::KEYEVENT_CHAR); + host.send_key_event(Some(&key_event)); + } + } + ElementState::Released => { + key_event.type_ = KeyEventType::from(cef_key_event_type_t::KEYEVENT_KEYUP); + host.send_key_event(Some(&key_event)); + } + }; + } + } + _ => {} + } +} + +#[derive(Default, Clone)] +pub(crate) struct MouseState { + left: bool, + right: bool, + middle: bool, +} + +#[derive(Default, Clone, Debug)] +pub(crate) struct MousePosition { + x: usize, + y: usize, +} + +impl From<&PhysicalPosition> for MousePosition { + fn from(position: &PhysicalPosition) -> Self { + Self { + x: position.x as usize, + y: position.y as usize, + } + } +} + +#[derive(Default, Clone)] +pub(crate) struct InputState { + modifiers: winit::keyboard::ModifiersState, + mouse_position: MousePosition, + mouse_state: MouseState, +} + +impl InputState { + fn update_modifiers(&mut self, modifiers: &winit::keyboard::ModifiersState) { + self.modifiers = *modifiers; + } + + fn update_mouse_position(&mut self, position: &PhysicalPosition) { + self.mouse_position = position.into(); + } + + fn update_mouse_state(&mut self, state: MouseState) { + self.mouse_state = state; + } + + fn cef_modifiers(&self, location: &winit::keyboard::KeyLocation, is_repeat: bool) -> CefModifiers { + CefModifiers::new(self, location, is_repeat) + } + + fn cef_modifiers_mouse_event(&self) -> CefModifiers { + self.cef_modifiers(&winit::keyboard::KeyLocation::Standard, false) + } +} + +impl From for CefModifiers { + fn from(val: InputState) -> Self { + CefModifiers::new(&val, &winit::keyboard::KeyLocation::Standard, false) + } +} + +impl From<&InputState> for MouseEvent { + fn from(val: &InputState) -> Self { + MouseEvent { + x: val.mouse_position.x as i32, + y: val.mouse_position.y as i32, + modifiers: val.cef_modifiers_mouse_event().raw(), + } + } +} +impl From<&mut InputState> for MouseEvent { + fn from(val: &mut InputState) -> Self { + MouseEvent { + x: val.mouse_position.x as i32, + y: val.mouse_position.y as i32, + modifiers: val.cef_modifiers_mouse_event().raw(), + } + } +} + +struct CefModifiers(u32); + +impl CefModifiers { + fn new(input_state: &InputState, location: &winit::keyboard::KeyLocation, is_repeat: bool) -> Self { + let mut inner = 0; + + if input_state.modifiers.shift_key() { + inner |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN as u32; + } + if input_state.modifiers.control_key() { + inner |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN as u32; + } + if input_state.modifiers.alt_key() { + inner |= cef_event_flags_t::EVENTFLAG_ALT_DOWN as u32; + } + if input_state.modifiers.super_key() { + inner |= cef_event_flags_t::EVENTFLAG_COMMAND_DOWN as u32; + } + + if input_state.mouse_state.left { + inner |= cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON as u32; + } + if input_state.mouse_state.right { + inner |= cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON as u32; + } + if input_state.mouse_state.middle { + inner |= cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON as u32; + } + + if is_repeat { + inner |= cef_event_flags_t::EVENTFLAG_IS_REPEAT as u32; + } + + inner |= match location { + winit::keyboard::KeyLocation::Left => cef_event_flags_t::EVENTFLAG_IS_LEFT as u32, + winit::keyboard::KeyLocation::Right => cef_event_flags_t::EVENTFLAG_IS_RIGHT as u32, + winit::keyboard::KeyLocation::Numpad => cef_event_flags_t::EVENTFLAG_IS_KEY_PAD as u32, + winit::keyboard::KeyLocation::Standard => 0, + }; + + Self(inner) + } + + fn raw(&self) -> u32 { + self.0 + } +} diff --git a/desktop/src/cef/input/keymap.rs b/desktop/src/cef/input/keymap.rs new file mode 100644 index 0000000000..e37821a35e --- /dev/null +++ b/desktop/src/cef/input/keymap.rs @@ -0,0 +1,448 @@ +macro_rules! map_enum { + ($target:expr, $enum:ident, $( ($code:expr, $variant:ident), )+ ) => { + match $target { + $( + $enum::$variant => $code, + )+ + _ => 0, + } + }; +} + +macro_rules! map { + ($target:expr, $( ($code:expr, $variant:literal), )+ ) => { + match $target { + $( + $variant => $code, + )+ + _ => 0, + } + }; +} + +// Windows Virtual keyboard binary representation +pub(crate) trait ToVKBits { + fn to_vk_bits(&self) -> i32; +} + +impl ToVKBits for winit::keyboard::NamedKey { + fn to_vk_bits(&self) -> i32 { + use winit::keyboard::NamedKey; + map_enum!( + self, + NamedKey, + (0x12, Alt), + (0xA5, AltGraph), + (0x14, CapsLock), + (0x11, Control), + (0x90, NumLock), + (0x91, ScrollLock), + (0x10, Shift), + (0x5B, Meta), + (0x5C, Super), + (0x0D, Enter), + (0x09, Tab), + (0x20, Space), + (0x28, ArrowDown), + (0x25, ArrowLeft), + (0x27, ArrowRight), + (0x26, ArrowUp), + (0x23, End), + (0x24, Home), + (0x22, PageDown), + (0x21, PageUp), + (0x08, Backspace), + (0x0C, Clear), + (0xF7, CrSel), + (0x2E, Delete), + (0xF9, EraseEof), + (0xF8, ExSel), + (0x2D, Insert), + (0x1E, Accept), + (0xF6, Attn), + (0x03, Cancel), + (0x5D, ContextMenu), + (0x1B, Escape), + (0x2B, Execute), + (0x2F, Help), + (0x13, Pause), + (0xFA, Play), + (0x5D, Props), + (0x29, Select), + (0xFB, ZoomIn), + (0xFB, ZoomOut), + (0x2C, PrintScreen), + (0x5F, Standby), + (0x1C, Convert), + (0x18, FinalMode), + (0x1F, ModeChange), + (0x1D, NonConvert), + (0xE5, Process), + (0x15, HangulMode), + (0x19, HanjaMode), + (0x17, JunjaMode), + (0x15, KanaMode), + (0x19, KanjiMode), + (0xB0, MediaFastForward), + (0xB3, MediaPause), + (0xB3, MediaPlay), + (0xB3, MediaPlayPause), + (0xB1, MediaRewind), + (0xB2, MediaStop), + (0xB0, MediaTrackNext), + (0xB1, MediaTrackPrevious), + (0x2A, Print), + (0xAE, AudioVolumeDown), + (0xAF, AudioVolumeUp), + (0xAD, AudioVolumeMute), + (0xB6, LaunchApplication1), + (0xB7, LaunchApplication2), + (0xB4, LaunchMail), + (0xB5, LaunchMediaPlayer), + (0xB5, LaunchMusicPlayer), + (0xA6, BrowserBack), + (0xAB, BrowserFavorites), + (0xA7, BrowserForward), + (0xAC, BrowserHome), + (0xA8, BrowserRefresh), + (0xAA, BrowserSearch), + (0xA9, BrowserStop), + (0xFB, ZoomToggle), + (0x70, F1), + (0x71, F2), + (0x72, F3), + (0x73, F4), + (0x74, F5), + (0x75, F6), + (0x76, F7), + (0x77, F8), + (0x78, F9), + (0x79, F10), + (0x7A, F11), + (0x7B, F12), + (0x7C, F13), + (0x7D, F14), + (0x7E, F15), + (0x7F, F16), + (0x80, F17), + (0x81, F18), + (0x82, F19), + (0x83, F20), + (0x84, F21), + (0x85, F22), + (0x86, F23), + (0x87, F24), + ) + } +} + +impl ToVKBits for char { + fn to_vk_bits(&self) -> i32 { + map!( + self, + (0x41, 'a'), + (0x42, 'b'), + (0x43, 'c'), + (0x44, 'd'), + (0x45, 'e'), + (0x46, 'f'), + (0x47, 'g'), + (0x48, 'h'), + (0x49, 'i'), + (0x4a, 'j'), + (0x4b, 'k'), + (0x4c, 'l'), + (0x4d, 'm'), + (0x4e, 'n'), + (0x4f, 'o'), + (0x50, 'p'), + (0x51, 'q'), + (0x52, 'r'), + (0x53, 's'), + (0x54, 't'), + (0x55, 'u'), + (0x56, 'v'), + (0x57, 'w'), + (0x58, 'x'), + (0x59, 'y'), + (0x5a, 'z'), + (0x41, 'A'), + (0x42, 'B'), + (0x43, 'C'), + (0x44, 'D'), + (0x45, 'E'), + (0x46, 'F'), + (0x47, 'G'), + (0x48, 'H'), + (0x49, 'I'), + (0x4a, 'J'), + (0x4b, 'K'), + (0x4c, 'L'), + (0x4d, 'M'), + (0x4e, 'N'), + (0x4f, 'O'), + (0x50, 'P'), + (0x51, 'Q'), + (0x52, 'R'), + (0x53, 'S'), + (0x54, 'T'), + (0x55, 'U'), + (0x56, 'V'), + (0x57, 'W'), + (0x58, 'X'), + (0x59, 'Y'), + (0x5a, 'Z'), + (0x31, '1'), + (0x32, '2'), + (0x33, '3'), + (0x34, '4'), + (0x35, '5'), + (0x36, '6'), + (0x37, '7'), + (0x38, '8'), + (0x39, '9'), + (0x30, '0'), + (0x31, '!'), + (0x32, '@'), + (0x33, '#'), + (0x34, '$'), + (0x35, '%'), + (0x36, '^'), + (0x37, '&'), + (0x38, '*'), + (0x39, '('), + (0x30, ')'), + (0xC0, '`'), + (0xC0, '~'), + (0xBD, '-'), + (0xBD, '_'), + (0xBB, '='), + (0xBB, '+'), + (0xDB, '['), + (0xDB, '{'), + (0xDD, ']'), + (0xDD, '}'), + (0xDC, '\\'), + (0xDC, '|'), + (0xBA, ';'), + (0xBA, ':'), + (0xBC, ','), + (0xBC, '<'), + (0xBE, '.'), + (0xBE, '>'), + (0xDE, '\''), + (0xDE, '"'), + (0xBF, '/'), + (0xBF, '?'), + ) + } +} + +// Chromium dom key binary representation +pub(crate) trait ToDomBits { + fn to_dom_bits(&self) -> i32; +} + +impl ToDomBits for winit::keyboard::NamedKey { + fn to_dom_bits(&self) -> i32 { + use winit::keyboard::NamedKey; + map_enum!( + self, + NamedKey, + (0x00, Hyper), + (0x85, Super), + (0x25, Control), + (0x32, Shift), + (0x40, Alt), + (0x00, Fn), + (0x00, FnLock), + (0x24, Enter), + (0x09, Escape), + (0x16, Backspace), + (0x17, Tab), + (0x41, Space), + (0x42, CapsLock), + (0x43, F1), + (0x44, F2), + (0x45, F3), + (0x46, F4), + (0x47, F5), + (0x48, F6), + (0x49, F7), + (0x4a, F8), + (0x4b, F9), + (0x4c, F10), + (0x5f, F11), + (0x60, F12), + (0x6b, PrintScreen), + (0x4e, ScrollLock), + (0x7f, Pause), + (0x76, Insert), + (0x6e, Home), + (0x70, PageUp), + (0x77, Delete), + (0x73, End), + (0x75, PageDown), + (0x72, ArrowRight), + (0x71, ArrowLeft), + (0x74, ArrowDown), + (0x6f, ArrowUp), + (0x4d, NumLock), + (0x87, ContextMenu), + (0x7c, Power), + (0xbf, F13), + (0xc0, F14), + (0xc1, F15), + (0xc2, F16), + (0xc3, F17), + (0xc4, F18), + (0xc5, F19), + (0xc6, F20), + (0xc7, F21), + (0xc8, F22), + (0xc9, F23), + (0xca, F24), + (0x8e, Open), + (0x92, Help), + (0x8c, Select), + (0x89, Again), + (0x8b, Undo), + (0x91, Cut), + (0x8d, Copy), + (0x8f, Paste), + (0x90, Find), + (0x79, AudioVolumeMute), + (0x7b, AudioVolumeUp), + (0x7a, AudioVolumeDown), + (0x65, KanaMode), + (0x64, Convert), + (0x66, NonConvert), + (0x00, Props), + (0xe9, BrightnessUp), + (0xe8, BrightnessDown), + (0xd7, MediaPlay), + (0xd1, MediaPause), + (0xaf, MediaRecord), + (0xd8, MediaFastForward), + (0xb0, MediaRewind), + (0xab, MediaTrackNext), + (0xad, MediaTrackPrevious), + (0xae, MediaStop), + (0xa9, Eject), + (0xac, MediaPlayPause), + (0xa3, LaunchMail), + (0xe1, BrowserSearch), + (0xb4, BrowserHome), + (0xa6, BrowserBack), + (0xa7, BrowserForward), + (0x88, BrowserStop), + (0xb5, BrowserRefresh), + (0xa4, BrowserFavorites), + (0xf0, MailReply), + (0xf1, MailForward), + (0xef, MailSend), + ) + } +} + +impl ToDomBits for char { + fn to_dom_bits(&self) -> i32 { + map!( + self, + (0x26, 'a'), + (0x38, 'b'), + (0x36, 'c'), + (0x28, 'd'), + (0x1a, 'e'), + (0x29, 'f'), + (0x2a, 'g'), + (0x2b, 'h'), + (0x1f, 'i'), + (0x2c, 'j'), + (0x2d, 'k'), + (0x2e, 'l'), + (0x3a, 'm'), + (0x39, 'n'), + (0x20, 'o'), + (0x21, 'p'), + (0x18, 'q'), + (0x1b, 'r'), + (0x27, 's'), + (0x1c, 't'), + (0x1e, 'u'), + (0x37, 'v'), + (0x19, 'w'), + (0x35, 'x'), + (0x1d, 'y'), + (0x34, 'z'), + (0x26, 'A'), + (0x38, 'B'), + (0x36, 'C'), + (0x28, 'D'), + (0x1a, 'E'), + (0x29, 'F'), + (0x2a, 'G'), + (0x2b, 'H'), + (0x1f, 'I'), + (0x2c, 'J'), + (0x2d, 'K'), + (0x2e, 'L'), + (0x3a, 'M'), + (0x39, 'N'), + (0x20, 'O'), + (0x21, 'P'), + (0x18, 'Q'), + (0x1b, 'R'), + (0x27, 'S'), + (0x1c, 'T'), + (0x1e, 'U'), + (0x37, 'V'), + (0x19, 'W'), + (0x35, 'X'), + (0x1d, 'Y'), + (0x34, 'Z'), + (0x0a, '1'), + (0x0b, '2'), + (0x0c, '3'), + (0x0d, '4'), + (0x0e, '5'), + (0x0f, '6'), + (0x10, '7'), + (0x11, '8'), + (0x12, '9'), + (0x13, '0'), + (0x0a, '!'), + (0x0b, '@'), + (0x0c, '#'), + (0x0d, '$'), + (0x0e, '%'), + (0x0f, '^'), + (0x10, '&'), + (0x11, '*'), + (0x12, '('), + (0x13, ')'), + (0x31, '`'), + (0x31, '~'), + (0x14, '-'), + (0x14, '_'), + (0x15, '='), + (0x15, '+'), + (0x22, '['), + (0x22, '{'), + (0x23, ']'), + (0x23, '}'), + (0x33, '\\'), + (0x33, '|'), + (0x2f, ';'), + (0x2f, ':'), + (0x3b, ','), + (0x3b, '<'), + (0x3c, '.'), + (0x3c, '>'), + (0x30, '\''), + (0x30, '"'), + (0x3d, '/'), + (0x3d, '?'), + ) + } +} diff --git a/desktop/src/cef/internal.rs b/desktop/src/cef/internal.rs new file mode 100644 index 0000000000..2e48c6df2c --- /dev/null +++ b/desktop/src/cef/internal.rs @@ -0,0 +1,19 @@ +mod browser_process_app; +mod browser_process_client; +mod browser_process_handler; +mod browser_process_life_span_handler; + +mod render_process_app; +mod render_process_handler; +mod render_process_v8_handler; + +mod resource_handler; +mod scheme_handler_factory; + +pub(super) mod render_handler; +pub(super) mod task; + +pub(super) use browser_process_app::BrowserProcessAppImpl; +pub(super) use browser_process_client::BrowserProcessClientImpl; +pub(super) use render_handler::RenderHandlerImpl; +pub(super) use render_process_app::RenderProcessAppImpl; diff --git a/desktop/src/cef/internal/browser_process_app.rs b/desktop/src/cef/internal/browser_process_app.rs new file mode 100644 index 0000000000..7a0ec0feb1 --- /dev/null +++ b/desktop/src/cef/internal/browser_process_app.rs @@ -0,0 +1,101 @@ +#[cfg(target_os = "linux")] +use std::env; + +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_app_t, cef_base_ref_counted_t}; +use cef::{BrowserProcessHandler, CefString, ImplApp, ImplCommandLine, SchemeRegistrar, WrapApp}; + +use super::browser_process_handler::BrowserProcessHandlerImpl; +use super::scheme_handler_factory::SchemeHandlerFactoryImpl; +use crate::cef::CefEventHandler; + +pub(crate) struct BrowserProcessAppImpl { + object: *mut RcImpl<_cef_app_t, Self>, + event_handler: H, +} +impl BrowserProcessAppImpl { + pub(crate) fn new(event_handler: H) -> Self { + Self { + object: std::ptr::null_mut(), + event_handler, + } + } +} + +impl ImplApp for BrowserProcessAppImpl { + fn browser_process_handler(&self) -> Option { + Some(BrowserProcessHandler::new(BrowserProcessHandlerImpl::new(self.event_handler.clone()))) + } + + fn on_register_custom_schemes(&self, registrar: Option<&mut SchemeRegistrar>) { + SchemeHandlerFactoryImpl::::register_schemes(registrar); + } + + fn on_before_command_line_processing(&self, _process_type: Option<&cef::CefString>, command_line: Option<&mut cef::CommandLine>) { + if let Some(cmd) = command_line { + #[cfg(not(feature = "accelerated_paint"))] + { + // Disable GPU acceleration when accelerated_paint feature is not enabled + cmd.append_switch(Some(&CefString::from("disable-gpu"))); + cmd.append_switch(Some(&CefString::from("disable-gpu-compositing"))); + } + + #[cfg(feature = "accelerated_paint")] + { + // Enable GPU acceleration switches for better performance + cmd.append_switch(Some(&CefString::from("enable-gpu-rasterization"))); + cmd.append_switch(Some(&CefString::from("enable-accelerated-2d-canvas"))); + } + + #[cfg(all(feature = "accelerated_paint", target_os = "linux"))] + { + // Use Vulkan for accelerated painting + cmd.append_switch_with_value(Some(&CefString::from("use-angle")), Some(&CefString::from("vulkan"))); + } + + // Tell CEF to use Wayland if available + #[cfg(target_os = "linux")] + { + let use_wayland = env::var("WAYLAND_DISPLAY") + .ok() + .filter(|var| !var.is_empty()) + .or_else(|| env::var("WAYLAND_SOCKET").ok()) + .filter(|var| !var.is_empty()) + .is_some(); + if use_wayland { + cmd.append_switch_with_value(Some(&CefString::from("ozone-platform")), Some(&CefString::from("wayland"))); + } + } + } + } + + fn get_raw(&self) -> *mut _cef_app_t { + self.object.cast() + } +} + +impl Clone for BrowserProcessAppImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + event_handler: self.event_handler.clone(), + } + } +} +impl Rc for BrowserProcessAppImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapApp for BrowserProcessAppImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_app_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/browser_process_client.rs b/desktop/src/cef/internal/browser_process_client.rs new file mode 100644 index 0000000000..1ed5eeb129 --- /dev/null +++ b/desktop/src/cef/internal/browser_process_client.rs @@ -0,0 +1,90 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_client_t, cef_base_ref_counted_t}; +use cef::{ImplClient, LifeSpanHandler, RenderHandler, WrapClient}; + +use crate::cef::CefEventHandler; +use crate::cef::ipc::{MessageType, UnpackMessage, UnpackedMessage}; + +use super::browser_process_life_span_handler::BrowserProcessLifeSpanHandlerImpl; + +pub(crate) struct BrowserProcessClientImpl { + object: *mut RcImpl<_cef_client_t, Self>, + render_handler: RenderHandler, + event_handler: H, +} +impl BrowserProcessClientImpl { + pub(crate) fn new(render_handler: RenderHandler, event_handler: H) -> Self { + Self { + object: std::ptr::null_mut(), + render_handler, + event_handler, + } + } +} + +impl ImplClient for BrowserProcessClientImpl { + fn on_process_message_received( + &self, + _browser: Option<&mut cef::Browser>, + _frame: Option<&mut cef::Frame>, + _source_process: cef::ProcessId, + message: Option<&mut cef::ProcessMessage>, + ) -> ::std::os::raw::c_int { + let unpacked_message = unsafe { message.and_then(|m| m.unpack()) }; + match unpacked_message { + Some(UnpackedMessage { + message_type: MessageType::Initialized, + data: _, + }) => self.event_handler.initialized_web_communication(), + Some(UnpackedMessage { + message_type: MessageType::SendToNative, + data, + }) => self.event_handler.receive_web_message(data), + + _ => { + tracing::error!("Unexpected message type received in browser process"); + return 0; + } + } + 1 + } + + fn render_handler(&self) -> Option { + Some(self.render_handler.clone()) + } + + fn life_span_handler(&self) -> Option { + Some(LifeSpanHandler::new(BrowserProcessLifeSpanHandlerImpl::new())) + } + + fn get_raw(&self) -> *mut _cef_client_t { + self.object.cast() + } +} + +impl Clone for BrowserProcessClientImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + render_handler: self.render_handler.clone(), + event_handler: self.event_handler.clone(), + } + } +} +impl Rc for BrowserProcessClientImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapClient for BrowserProcessClientImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_client_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/browser_process_handler.rs b/desktop/src/cef/internal/browser_process_handler.rs new file mode 100644 index 0000000000..780218a604 --- /dev/null +++ b/desktop/src/cef/internal/browser_process_handler.rs @@ -0,0 +1,70 @@ +use std::time::{Duration, Instant}; + +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_browser_process_handler_t, cef_base_ref_counted_t, cef_browser_process_handler_t}; +use cef::{CefString, ImplBrowserProcessHandler, SchemeHandlerFactory, WrapBrowserProcessHandler}; + +use super::scheme_handler_factory::SchemeHandlerFactoryImpl; +use crate::cef::CefEventHandler; +use crate::cef::consts::RESOURCE_SCHEME; + +pub(crate) struct BrowserProcessHandlerImpl { + object: *mut RcImpl, + event_handler: H, +} +impl BrowserProcessHandlerImpl { + pub(crate) fn new(event_handler: H) -> Self { + Self { + object: std::ptr::null_mut(), + event_handler, + } + } +} + +impl ImplBrowserProcessHandler for BrowserProcessHandlerImpl { + fn on_context_initialized(&self) { + cef::register_scheme_handler_factory( + Some(&CefString::from(RESOURCE_SCHEME)), + None, + Some(&mut SchemeHandlerFactory::new(SchemeHandlerFactoryImpl::new(self.event_handler.clone()))), + ); + } + + fn on_schedule_message_pump_work(&self, delay_ms: i64) { + self.event_handler.schedule_cef_message_loop_work(Instant::now() + Duration::from_millis(delay_ms as u64)); + } + + fn on_already_running_app_relaunch(&self, _command_line: Option<&mut cef::CommandLine>, _current_directory: Option<&CefString>) -> ::std::os::raw::c_int { + 1 // Return 1 to prevent default behavior of opening a empty browser window + } + + fn get_raw(&self) -> *mut _cef_browser_process_handler_t { + self.object.cast() + } +} + +impl Clone for BrowserProcessHandlerImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + event_handler: self.event_handler.clone(), + } + } +} +impl Rc for BrowserProcessHandlerImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapBrowserProcessHandler for BrowserProcessHandlerImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_browser_process_handler_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/browser_process_life_span_handler.rs b/desktop/src/cef/internal/browser_process_life_span_handler.rs new file mode 100644 index 0000000000..9d47074325 --- /dev/null +++ b/desktop/src/cef/internal/browser_process_life_span_handler.rs @@ -0,0 +1,64 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_life_span_handler_t, cef_base_ref_counted_t}; +use cef::{ImplLifeSpanHandler, WrapLifeSpanHandler}; + +pub(crate) struct BrowserProcessLifeSpanHandlerImpl { + object: *mut RcImpl<_cef_life_span_handler_t, Self>, +} +impl BrowserProcessLifeSpanHandlerImpl { + pub(crate) fn new() -> Self { + Self { object: std::ptr::null_mut() } + } +} + +impl ImplLifeSpanHandler for BrowserProcessLifeSpanHandlerImpl { + fn on_before_popup( + &self, + _browser: Option<&mut cef::Browser>, + _frame: Option<&mut cef::Frame>, + _popup_id: ::std::os::raw::c_int, + target_url: Option<&cef::CefString>, + _target_frame_name: Option<&cef::CefString>, + _target_disposition: cef::WindowOpenDisposition, + _user_gesture: ::std::os::raw::c_int, + _popup_features: Option<&cef::PopupFeatures>, + _window_info: Option<&mut cef::WindowInfo>, + _client: Option<&mut Option>, + _settings: Option<&mut cef::BrowserSettings>, + _extra_info: Option<&mut Option>, + _no_javascript_access: Option<&mut ::std::os::raw::c_int>, + ) -> ::std::os::raw::c_int { + let target = target_url.map(|url| url.to_string()).unwrap_or("unknown".to_string()); + tracing::error!("Browser tried to open a popup at URL: {}", target); + + // Deny any popup by returning 1 + 1 + } + + fn get_raw(&self) -> *mut _cef_life_span_handler_t { + self.object.cast() + } +} + +impl Clone for BrowserProcessLifeSpanHandlerImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { object: self.object } + } +} +impl Rc for BrowserProcessLifeSpanHandlerImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapLifeSpanHandler for BrowserProcessLifeSpanHandlerImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_life_span_handler_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/render_handler.rs b/desktop/src/cef/internal/render_handler.rs new file mode 100644 index 0000000000..dd725a01b9 --- /dev/null +++ b/desktop/src/cef/internal/render_handler.rs @@ -0,0 +1,97 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_render_handler_t, cef_base_ref_counted_t}; +use cef::{Browser, ImplRenderHandler, PaintElementType, Rect, WrapRenderHandler}; + +use crate::cef::CefEventHandler; +use crate::render::FrameBufferRef; + +pub(crate) struct RenderHandlerImpl { + object: *mut RcImpl<_cef_render_handler_t, Self>, + event_handler: H, +} +impl RenderHandlerImpl { + pub(crate) fn new(event_handler: H) -> Self { + Self { + object: std::ptr::null_mut(), + event_handler, + } + } +} + +impl ImplRenderHandler for RenderHandlerImpl { + fn view_rect(&self, _browser: Option<&mut Browser>, rect: Option<&mut Rect>) { + if let Some(rect) = rect { + let view = self.event_handler.window_size(); + *rect = Rect { + x: 0, + y: 0, + width: view.width as i32, + height: view.height as i32, + }; + } + } + + fn on_paint( + &self, + _browser: Option<&mut Browser>, + _type_: PaintElementType, + _dirty_rect_count: usize, + _dirty_rects: Option<&Rect>, + buffer: *const u8, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ) { + let buffer_size = (width * height * 4) as usize; + let buffer_slice = unsafe { std::slice::from_raw_parts(buffer, buffer_size) }; + let frame_buffer = FrameBufferRef::new(buffer_slice, width as usize, height as usize).expect("Failed to create frame buffer"); + + self.event_handler.draw(frame_buffer) + } + + #[cfg(feature = "accelerated_paint")] + fn on_accelerated_paint(&self, _browser: Option<&mut Browser>, type_: PaintElementType, _dirty_rect_count: usize, _dirty_rects: Option<&Rect>, info: Option<&cef::AcceleratedPaintInfo>) { + use crate::cef::texture_import::shared_texture_handle::SharedTextureHandle; + + if type_ != PaintElementType::default() { + return; + } + + let shared_handle = SharedTextureHandle::new(info.unwrap()); + if let SharedTextureHandle::Unsupported = shared_handle { + tracing::error!("Platform does not support accelerated painting"); + return; + } + + self.event_handler.draw_gpu(shared_handle); + } + + fn get_raw(&self) -> *mut _cef_render_handler_t { + self.object.cast() + } +} + +impl Clone for RenderHandlerImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + event_handler: self.event_handler.clone(), + } + } +} +impl Rc for RenderHandlerImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapRenderHandler for RenderHandlerImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_render_handler_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/render_process_app.rs b/desktop/src/cef/internal/render_process_app.rs new file mode 100644 index 0000000000..300690d771 --- /dev/null +++ b/desktop/src/cef/internal/render_process_app.rs @@ -0,0 +1,60 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_app_t, cef_base_ref_counted_t}; +use cef::{App, ImplApp, RenderProcessHandler, SchemeRegistrar, WrapApp}; + +use super::render_process_handler::RenderProcessHandlerImpl; +use super::scheme_handler_factory::SchemeHandlerFactoryImpl; +use crate::cef::CefEventHandler; + +pub(crate) struct RenderProcessAppImpl { + object: *mut RcImpl<_cef_app_t, Self>, + render_process_handler: RenderProcessHandler, +} +impl RenderProcessAppImpl { + pub(crate) fn app() -> App { + App::new(Self { + object: std::ptr::null_mut(), + render_process_handler: RenderProcessHandler::new(RenderProcessHandlerImpl::new()), + }) + } +} + +impl ImplApp for RenderProcessAppImpl { + fn on_register_custom_schemes(&self, registrar: Option<&mut SchemeRegistrar>) { + SchemeHandlerFactoryImpl::::register_schemes(registrar); + } + + fn render_process_handler(&self) -> Option { + Some(self.render_process_handler.clone()) + } + + fn get_raw(&self) -> *mut _cef_app_t { + self.object.cast() + } +} + +impl Clone for RenderProcessAppImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + render_process_handler: self.render_process_handler.clone(), + } + } +} +impl Rc for RenderProcessAppImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapApp for RenderProcessAppImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_app_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/render_process_handler.rs b/desktop/src/cef/internal/render_process_handler.rs new file mode 100644 index 0000000000..78feadc197 --- /dev/null +++ b/desktop/src/cef/internal/render_process_handler.rs @@ -0,0 +1,131 @@ +use cef::rc::{ConvertReturnValue, Rc, RcImpl}; +use cef::sys::{_cef_render_process_handler_t, cef_base_ref_counted_t, cef_render_process_handler_t, cef_v8_propertyattribute_t, cef_v8_value_create_array_buffer_with_copy}; +use cef::{CefString, ImplFrame, ImplRenderProcessHandler, ImplV8Context, ImplV8Value, V8Handler, V8Propertyattribute, V8Value, WrapRenderProcessHandler, v8_value_create_function}; + +use crate::cef::ipc::{MessageType, UnpackMessage, UnpackedMessage}; + +use super::render_process_v8_handler::BrowserProcessV8HandlerImpl; + +pub(crate) struct RenderProcessHandlerImpl { + object: *mut RcImpl, +} +impl RenderProcessHandlerImpl { + pub(crate) fn new() -> Self { + Self { object: std::ptr::null_mut() } + } +} + +impl ImplRenderProcessHandler for RenderProcessHandlerImpl { + fn on_process_message_received( + &self, + _browser: Option<&mut cef::Browser>, + frame: Option<&mut cef::Frame>, + _source_process: cef::ProcessId, + message: Option<&mut cef::ProcessMessage>, + ) -> ::std::os::raw::c_int { + let unpacked_message = unsafe { message.and_then(|m| m.unpack()) }; + match unpacked_message { + Some(UnpackedMessage { + message_type: MessageType::SendToJS, + data, + }) => { + let Some(frame) = frame else { + tracing::error!("Frame is not available"); + return 0; + }; + let Some(context) = frame.v8_context() else { + tracing::error!("V8 context is not available"); + return 0; + }; + if context.enter() == 0 { + tracing::error!("Failed to enter V8 context"); + return 0; + } + let mut value: V8Value = unsafe { cef_v8_value_create_array_buffer_with_copy(data.as_ptr() as *mut std::ffi::c_void, data.len()) }.wrap_result(); + let Some(global) = context.global() else { + tracing::error!("Global object is not available in V8 context"); + return 0; + }; + + let function_name = "receiveNativeMessage"; + let property_name = "receiveNativeMessageData"; + + let function_call = format!("window.{function_name}(window.{property_name})"); + + global.set_value_bykey( + Some(&CefString::from(property_name)), + Some(&mut value), + cef_v8_propertyattribute_t::V8_PROPERTY_ATTRIBUTE_READONLY.wrap_result(), + ); + + if global.value_bykey(Some(&CefString::from(function_name))).is_some() { + frame.execute_java_script(Some(&CefString::from(function_call.as_str())), None, 0); + } + + if context.exit() == 0 { + tracing::error!("Failed to exit V8 context"); + return 0; + } + } + _ => { + tracing::error!("Unexpected message type received in render process"); + return 0; + } + } + 1 + } + + fn on_context_created(&self, _browser: Option<&mut cef::Browser>, _frame: Option<&mut cef::Frame>, context: Option<&mut cef::V8Context>) { + let register_js_function = |context: &mut cef::V8Context, name: &'static str| { + let mut v8_handler = V8Handler::new(BrowserProcessV8HandlerImpl::new()); + let Some(mut function) = v8_value_create_function(Some(&CefString::from(name)), Some(&mut v8_handler)) else { + tracing::error!("Failed to create V8 function {name}"); + return; + }; + + let Some(global) = context.global() else { + tracing::error!("Global object is not available in V8 context"); + return; + }; + global.set_value_bykey(Some(&CefString::from(name)), Some(&mut function), V8Propertyattribute::default()); + }; + + let Some(context) = context else { + tracing::error!("V8 context is not available"); + return; + }; + + let initialized_function_name = "initializeNativeCommunication"; + let send_function_name = "sendNativeMessage"; + + register_js_function(context, initialized_function_name); + register_js_function(context, send_function_name); + } + + fn get_raw(&self) -> *mut _cef_render_process_handler_t { + self.object.cast() + } +} + +impl Clone for RenderProcessHandlerImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { object: self.object } + } +} +impl Rc for RenderProcessHandlerImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapRenderProcessHandler for RenderProcessHandlerImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_render_process_handler_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/render_process_v8_handler.rs b/desktop/src/cef/internal/render_process_v8_handler.rs new file mode 100644 index 0000000000..0ea935a1b2 --- /dev/null +++ b/desktop/src/cef/internal/render_process_v8_handler.rs @@ -0,0 +1,86 @@ +use cef::{ImplV8Handler, ImplV8Value, V8Value, WrapV8Handler, rc::Rc, v8_context_get_current_context}; + +use crate::cef::ipc::{MessageType, SendMessage}; + +pub struct BrowserProcessV8HandlerImpl { + object: *mut cef::rc::RcImpl, +} +impl BrowserProcessV8HandlerImpl { + pub(crate) fn new() -> Self { + Self { object: std::ptr::null_mut() } + } +} + +impl ImplV8Handler for BrowserProcessV8HandlerImpl { + fn execute( + &self, + name: Option<&cef::CefString>, + _object: Option<&mut V8Value>, + arguments: Option<&[Option]>, + _retval: Option<&mut Option>, + _exception: Option<&mut cef::CefString>, + ) -> ::std::os::raw::c_int { + match name.map(|s| s.to_string()).unwrap_or_default().as_str() { + "initializeNativeCommunication" => { + v8_context_get_current_context().send_message(MessageType::Initialized, vec![0u8].as_slice()); + } + "sendNativeMessage" => { + let Some(args) = arguments else { + tracing::error!("No arguments provided to sendNativeMessage"); + return 0; + }; + let Some(arg1) = args.first() else { + tracing::error!("No arguments provided to sendNativeMessage"); + return 0; + }; + let Some(arg1) = arg1.as_ref() else { + tracing::error!("First argument to sendNativeMessage is not an ArrayBuffer"); + return 0; + }; + if arg1.is_array_buffer() == 0 { + tracing::error!("First argument to sendNativeMessage is not an ArrayBuffer"); + return 0; + } + + let size = arg1.array_buffer_byte_length(); + let ptr = arg1.array_buffer_data(); + let data = unsafe { std::slice::from_raw_parts_mut(ptr as *mut u8, size) }; + + v8_context_get_current_context().send_message(MessageType::SendToNative, data); + + return 1; + } + name => { + tracing::error!("Unknown V8 function called: {}", name); + } + } + 1 + } + + fn get_raw(&self) -> *mut cef::sys::_cef_v8_handler_t { + self.object.cast() + } +} + +impl Clone for BrowserProcessV8HandlerImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { object: self.object } + } +} +impl Rc for BrowserProcessV8HandlerImpl { + fn as_base(&self) -> &cef::sys::cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapV8Handler for BrowserProcessV8HandlerImpl { + fn wrap_rc(&mut self, object: *mut cef::rc::RcImpl) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/resource_handler.rs b/desktop/src/cef/internal/resource_handler.rs new file mode 100644 index 0000000000..8c21b2cfb5 --- /dev/null +++ b/desktop/src/cef/internal/resource_handler.rs @@ -0,0 +1,108 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_resource_handler_t, cef_base_ref_counted_t}; +use cef::{Callback, CefString, ImplResourceHandler, ImplResponse, Request, ResourceReadCallback, Response, WrapResourceHandler}; +use std::cell::RefCell; +use std::ffi::c_int; +use std::io::Read; + +use crate::cef::{Resource, ResourceReader}; + +pub(crate) struct ResourceHandlerImpl { + object: *mut RcImpl<_cef_resource_handler_t, Self>, + reader: Option>, + mimetype: Option, +} + +impl ResourceHandlerImpl { + pub fn new(resource: Option) -> Self { + if let Some(resource) = resource { + Self { + object: std::ptr::null_mut(), + reader: Some(resource.reader.into()), + mimetype: resource.mimetype, + } + } else { + Self { + object: std::ptr::null_mut(), + reader: None, + mimetype: None, + } + } + } +} + +impl ImplResourceHandler for ResourceHandlerImpl { + fn open(&self, _request: Option<&mut Request>, handle_request: Option<&mut c_int>, _callback: Option<&mut Callback>) -> c_int { + if let Some(handle_request) = handle_request { + *handle_request = 1; + } + 1 + } + + fn response_headers(&self, response: Option<&mut Response>, response_length: Option<&mut i64>, _redirect_url: Option<&mut CefString>) { + if let Some(response_length) = response_length { + *response_length = -1; // Indicating that the length is unknown + } + if let Some(response) = response { + if self.reader.is_some() { + if let Some(mimetype) = &self.mimetype { + let cef_mime = CefString::from(mimetype.as_str()); + response.set_mime_type(Some(&cef_mime)); + } else { + response.set_mime_type(None); + } + response.set_status(200); + } else { + response.set_status(404); + response.set_mime_type(Some(&CefString::from("text/plain"))); + } + } + } + + fn read(&self, data_out: *mut u8, bytes_to_read: c_int, bytes_read: Option<&mut c_int>, _callback: Option<&mut ResourceReadCallback>) -> c_int { + let Some(bytes_read) = bytes_read else { unreachable!() }; + let out = unsafe { std::slice::from_raw_parts_mut(data_out, bytes_to_read as usize) }; + if let Some(reader) = &self.reader { + if let Ok(read) = reader.borrow_mut().read(out) { + *bytes_read = read as i32; + if read > 0 { + return 1; // Indicating that data was read + } + } else { + *bytes_read = -2; // Indicating ERR_FAILED + } + } + 0 // Indicating no data was read + } + + fn get_raw(&self) -> *mut _cef_resource_handler_t { + self.object.cast() + } +} + +impl Clone for ResourceHandlerImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + reader: self.reader.clone(), + mimetype: self.mimetype.clone(), + } + } +} +impl Rc for ResourceHandlerImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapResourceHandler for ResourceHandlerImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_resource_handler_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/scheme_handler_factory.rs b/desktop/src/cef/internal/scheme_handler_factory.rs new file mode 100644 index 0000000000..83c006c7a6 --- /dev/null +++ b/desktop/src/cef/internal/scheme_handler_factory.rs @@ -0,0 +1,86 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_scheme_handler_factory_t, cef_base_ref_counted_t, cef_scheme_options_t}; +use cef::{Browser, CefString, Frame, ImplRequest, ImplSchemeHandlerFactory, ImplSchemeRegistrar, Request, ResourceHandler, SchemeRegistrar, WrapSchemeHandlerFactory}; + +use super::resource_handler::ResourceHandlerImpl; +use crate::cef::CefEventHandler; +use crate::cef::consts::{RESOURCE_DOMAIN, RESOURCE_SCHEME}; + +pub(crate) struct SchemeHandlerFactoryImpl { + object: *mut RcImpl<_cef_scheme_handler_factory_t, Self>, + event_handler: H, +} +impl SchemeHandlerFactoryImpl { + pub(crate) fn new(event_handler: H) -> Self { + Self { + object: std::ptr::null_mut(), + event_handler, + } + } + + pub(crate) fn register_schemes(registrar: Option<&mut SchemeRegistrar>) { + if let Some(registrar) = registrar { + let mut scheme_options = 0; + scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_STANDARD as i32; + scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_FETCH_ENABLED as i32; + scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_SECURE as i32; + scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_CORS_ENABLED as i32; + registrar.add_custom_scheme(Some(&CefString::from(RESOURCE_SCHEME)), scheme_options); + } + } +} + +impl ImplSchemeHandlerFactory for SchemeHandlerFactoryImpl { + fn create(&self, _browser: Option<&mut Browser>, _frame: Option<&mut Frame>, scheme_name: Option<&CefString>, request: Option<&mut Request>) -> Option { + if let Some(scheme_name) = scheme_name { + if scheme_name.to_string() != RESOURCE_SCHEME { + return None; + } + if let Some(request) = request { + let url = CefString::from(&request.url()).to_string(); + let path = url.strip_prefix(&format!("{RESOURCE_SCHEME}://")).unwrap(); + let domain = path.split('/').next().unwrap_or(""); + let path = path.strip_prefix(domain).unwrap_or(""); + let path = path.trim_start_matches('/'); + return match domain { + RESOURCE_DOMAIN => { + let resource = self.event_handler.load_resource(path.to_string().into()); + Some(ResourceHandler::new(ResourceHandlerImpl::new(resource))) + } + _ => None, + }; + } + return None; + } + None + } + fn get_raw(&self) -> *mut _cef_scheme_handler_factory_t { + self.object.cast() + } +} + +impl Clone for SchemeHandlerFactoryImpl { + fn clone(&self) -> Self { + unsafe { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + Self { + object: self.object, + event_handler: self.event_handler.clone(), + } + } +} +impl Rc for SchemeHandlerFactoryImpl { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} +impl WrapSchemeHandlerFactory for SchemeHandlerFactoryImpl { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_scheme_handler_factory_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/internal/task.rs b/desktop/src/cef/internal/task.rs new file mode 100644 index 0000000000..fe29e3de90 --- /dev/null +++ b/desktop/src/cef/internal/task.rs @@ -0,0 +1,61 @@ +use cef::rc::{Rc, RcImpl}; +use cef::sys::{_cef_task_t, cef_base_ref_counted_t}; +use cef::{ImplTask, WrapTask}; +use std::cell::RefCell; + +// Closure-based task wrapper following CEF patterns +pub struct ClosureTask { + pub(crate) object: *mut RcImpl<_cef_task_t, Self>, + pub(crate) closure: RefCell>, +} + +impl ClosureTask { + pub fn new(closure: F) -> Self { + Self { + object: std::ptr::null_mut(), + closure: RefCell::new(Some(closure)), + } + } +} + +impl ImplTask for ClosureTask { + fn execute(&self) { + if let Some(closure) = self.closure.borrow_mut().take() { + closure(); + } + } + + fn get_raw(&self) -> *mut _cef_task_t { + self.object.cast() + } +} + +impl Clone for ClosureTask { + fn clone(&self) -> Self { + unsafe { + if !self.object.is_null() { + let rc_impl = &mut *self.object; + rc_impl.interface.add_ref(); + } + } + Self { + object: self.object, + closure: RefCell::new(None), // Closure can only be executed once + } + } +} + +impl Rc for ClosureTask { + fn as_base(&self) -> &cef_base_ref_counted_t { + unsafe { + let base = &*self.object; + std::mem::transmute(&base.cef_object) + } + } +} + +impl WrapTask for ClosureTask { + fn wrap_rc(&mut self, object: *mut RcImpl<_cef_task_t, Self>) { + self.object = object; + } +} diff --git a/desktop/src/cef/ipc.rs b/desktop/src/cef/ipc.rs new file mode 100644 index 0000000000..b1a27741b1 --- /dev/null +++ b/desktop/src/cef/ipc.rs @@ -0,0 +1,112 @@ +use cef::{CefString, Frame, ImplBinaryValue, ImplFrame, ImplListValue, ImplProcessMessage, ImplV8Context, ProcessId, V8Context, sys::cef_process_id_t}; + +pub(crate) enum MessageType { + Initialized, + SendToJS, + SendToNative, +} +impl From for MessageInfo { + fn from(val: MessageType) -> Self { + match val { + MessageType::Initialized => MessageInfo { + name: "initialized".to_string(), + target: cef_process_id_t::PID_BROWSER.into(), + }, + MessageType::SendToJS => MessageInfo { + name: "send_to_js".to_string(), + target: cef_process_id_t::PID_RENDERER.into(), + }, + MessageType::SendToNative => MessageInfo { + name: "send_to_native".to_string(), + target: cef_process_id_t::PID_BROWSER.into(), + }, + } + } +} +impl TryFrom for MessageType { + type Error = (); + fn try_from(value: String) -> Result { + match value.as_str() { + "initialized" => Ok(MessageType::Initialized), + "send_to_js" => Ok(MessageType::SendToJS), + "send_to_native" => Ok(MessageType::SendToNative), + _ => Err(()), + } + } +} + +pub(crate) struct MessageInfo { + name: String, + target: ProcessId, +} + +pub(crate) trait SendMessage { + fn send_message(&self, message_type: MessageType, message: &[u8]); +} +impl SendMessage for Option { + fn send_message(&self, message_type: MessageType, message: &[u8]) { + let Some(context) = self else { + tracing::error!("Current V8 context is not available, cannot send message"); + return; + }; + + context.send_message(message_type, message); + } +} +impl SendMessage for V8Context { + fn send_message(&self, message_type: MessageType, message: &[u8]) { + let Some(frame) = self.frame() else { + tracing::error!("Current V8 context does not have a frame, cannot send message"); + return; + }; + + frame.send_message(message_type, message); + } +} +impl SendMessage for Frame { + fn send_message(&self, message_type: MessageType, message: &[u8]) { + let MessageInfo { name, target } = message_type.into(); + + let Some(mut process_message) = cef::process_message_create(Some(&CefString::from(name.as_str()))) else { + tracing::error!("Failed to create process message: {}", name); + return; + }; + let Some(arg_list) = process_message.argument_list() else { return }; + let mut value = ::cef::binary_value_create(Some(message)); + arg_list.set_binary(0, value.as_mut()); + + self.send_process_message(target, Some(&mut process_message)); + } +} + +pub(crate) struct UnpackedMessage<'a> { + pub(crate) message_type: MessageType, + pub(crate) data: &'a [u8], +} + +trait Sealed {} +impl Sealed for cef::ProcessMessage {} +#[allow(private_bounds)] +pub(crate) trait UnpackMessage: Sealed { + /// # Safety + /// + /// The caller must ensure that the message is valid. + /// Message should come from cef. + unsafe fn unpack(&self) -> Option>; +} +impl UnpackMessage for cef::ProcessMessage { + unsafe fn unpack(&self) -> Option> { + let pointer: *mut cef::sys::_cef_string_utf16_t = self.name().into(); + let message = unsafe { super::utility::pointer_to_string(pointer) }; + let Ok(message_type) = message.try_into() else { + tracing::error!("Failed to get message type from process message"); + return None; + }; + let arglist = self.argument_list()?; + let binary = arglist.binary(0)?; + let size = binary.size(); + let ptr = binary.raw_data(); + let buffer = unsafe { std::slice::from_raw_parts(ptr as *const u8, size) }; + Some(UnpackedMessage { message_type, data: buffer }) + } +} diff --git a/desktop/src/cef/platform.rs b/desktop/src/cef/platform.rs new file mode 100644 index 0000000000..7df5d5f982 --- /dev/null +++ b/desktop/src/cef/platform.rs @@ -0,0 +1,59 @@ +#[cfg(feature = "accelerated_paint")] +pub fn should_enable_hardware_acceleration() -> bool { + #[cfg(target_os = "linux")] + { + // Check if running on Wayland or X11 + let has_wayland = std::env::var("WAYLAND_DISPLAY") + .ok() + .filter(|var| !var.is_empty()) + .or_else(|| std::env::var("WAYLAND_SOCKET").ok()) + .filter(|var| !var.is_empty()) + .is_some(); + + let has_x11 = std::env::var("DISPLAY").ok().filter(|var| !var.is_empty()).is_some(); + + if !has_wayland && !has_x11 { + tracing::warn!("No display server detected, disabling hardware acceleration"); + return false; + } + + // Check for NVIDIA proprietary driver (known to have issues) + if let Ok(driver_info) = std::fs::read_to_string("/proc/driver/nvidia/version") { + if driver_info.contains("NVIDIA") { + tracing::warn!("NVIDIA proprietary driver detected, hardware acceleration may be unstable"); + // Still return true but with warning + } + } + + // Check for basic GPU capabilities + if has_wayland { + tracing::info!("Wayland detected, enabling hardware acceleration"); + true + } else if has_x11 { + tracing::info!("X11 detected, enabling hardware acceleration"); + true + } else { + false + } + } + + #[cfg(target_os = "windows")] + { + // Windows generally has good D3D11 support + tracing::info!("Windows detected, enabling hardware acceleration"); + true + } + + #[cfg(target_os = "macos")] + { + // macOS has good Metal/IOSurface support + tracing::info!("macOS detected, enabling hardware acceleration"); + true + } + + #[cfg(not(any(target_os = "linux", target_os = "windows", target_os = "macos")))] + { + tracing::warn!("Unsupported platform for hardware acceleration"); + false + } +} diff --git a/desktop/src/cef/texture_import/common.rs b/desktop/src/cef/texture_import/common.rs new file mode 100644 index 0000000000..ec5951f46d --- /dev/null +++ b/desktop/src/cef/texture_import/common.rs @@ -0,0 +1,99 @@ +//! Common utilities and traits for texture import across platforms + +use crate::cef::texture_import::*; +use ash::vk; +use cef::sys::cef_color_type_t; +use wgpu::Device; + +/// Common format conversion utilities +pub mod format { + use super::*; + + /// Convert CEF color type to wgpu texture format + pub fn cef_to_wgpu(format: cef_color_type_t) -> Result { + match format { + cef_color_type_t::CEF_COLOR_TYPE_BGRA_8888 => Ok(wgpu::TextureFormat::Bgra8UnormSrgb), + cef_color_type_t::CEF_COLOR_TYPE_RGBA_8888 => Ok(wgpu::TextureFormat::Rgba8UnormSrgb), + _ => Err(TextureImportError::UnsupportedFormat { format }), + } + } + + #[cfg(not(target_os = "macos"))] + /// Convert CEF color type to Vulkan format + pub fn cef_to_vulkan(format: cef_color_type_t) -> Result { + match format { + cef_color_type_t::CEF_COLOR_TYPE_BGRA_8888 => Ok(vk::Format::B8G8R8A8_UNORM), + cef_color_type_t::CEF_COLOR_TYPE_RGBA_8888 => Ok(vk::Format::R8G8B8A8_UNORM), + _ => Err(TextureImportError::UnsupportedFormat { format }), + } + } +} + +/// Common texture creation utilities +pub mod texture { + use super::*; + + /// Create a fallback CPU texture with the given dimensions and format + pub fn create_fallback(device: &Device, width: u32, height: u32, format: cef_color_type_t, label: &str) -> TextureImportResult { + let wgpu_format = format::cef_to_wgpu(format)?; + + let texture = device.create_texture(&wgpu::TextureDescriptor { + label: Some(label), + size: wgpu::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: wgpu_format, + usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], + }); + + tracing::warn!( + "Using fallback CPU texture for CEF rendering ({}x{}, {:?}) - hardware acceleration failed or unavailable. Consider checking GPU driver support.", + width, + height, + format + ); + Ok(texture) + } +} + +/// Common Vulkan utilities +pub mod vulkan { + use super::*; + + /// Find a suitable memory type index for Vulkan allocation + pub fn find_memory_type_index(type_filter: u32, properties: vk::MemoryPropertyFlags, mem_properties: &vk::PhysicalDeviceMemoryProperties) -> Option { + (0..mem_properties.memory_type_count).find(|&i| (type_filter & (1 << i)) != 0 && mem_properties.memory_types[i as usize].property_flags.contains(properties)) + } + + /// Check if the wgpu device is using Vulkan backend + #[cfg(not(target_os = "macos"))] + pub fn is_vulkan_backend(device: &Device) -> bool { + use wgpu::hal::api; + let mut is_vulkan = false; + unsafe { + device.as_hal::(|device| { + is_vulkan = device.is_some(); + }); + } + is_vulkan + } + + /// Check if the wgpu device is using D3D12 backend + #[cfg(target_os = "windows")] + pub fn is_d3d12_backend(device: &Device) -> bool { + use wgpu::hal::api; + let mut is_d3d12 = false; + unsafe { + device.as_hal::(|device| { + is_d3d12 = device.is_some(); + }); + } + is_d3d12 + } +} diff --git a/desktop/src/cef/texture_import/d3d11.rs b/desktop/src/cef/texture_import/d3d11.rs new file mode 100644 index 0000000000..f769d06b3b --- /dev/null +++ b/desktop/src/cef/texture_import/d3d11.rs @@ -0,0 +1,290 @@ +//! Windows D3D11 shared texture import implementation + +use super::common::{format, texture, vulkan}; +use super::{TextureImportError, TextureImportResult, TextureImporter}; +use ash::vk; +use cef::{AcceleratedPaintInfo, sys::cef_color_type_t}; +use std::os::raw::c_void; +use wgpu::hal::api; + +pub struct D3D11Importer { + pub handle: *mut c_void, + pub format: cef_color_type_t, + pub width: u32, + pub height: u32, +} + +impl TextureImporter for D3D11Importer { + fn new(info: &AcceleratedPaintInfo) -> Self { + Self { + handle: info.shared_texture_handle, + format: *info.format.as_ref(), + width: info.extra.coded_size.width as u32, + height: info.extra.coded_size.height as u32, + } + } + + fn import_to_wgpu(&self, device: &wgpu::Device) -> TextureImportResult { + // Try hardware acceleration first + if self.supports_hardware_acceleration(device) { + // Try D3D12 first (most efficient on Windows) + if vulkan::is_d3d12_backend(device) { + match self.import_via_d3d12(device) { + Ok(texture) => { + tracing::info!("Successfully imported D3D11 shared texture via D3D12"); + return Ok(texture); + } + Err(e) => { + tracing::warn!("Failed to import D3D11 via D3D12: {}, trying Vulkan fallback", e); + } + } + } + + // Try Vulkan as fallback + if vulkan::is_vulkan_backend(device) { + match self.import_via_vulkan(device) { + Ok(texture) => { + tracing::info!("Successfully imported D3D11 shared texture via Vulkan"); + return Ok(texture); + } + Err(e) => { + tracing::warn!("Failed to import D3D11 via Vulkan: {}, falling back to CPU texture", e); + } + } + } + } + + // Fallback to CPU texture + texture::create_fallback(device, self.width, self.height, self.format, "CEF D3D11 Texture (fallback)") + } + + fn supports_hardware_acceleration(&self, device: &wgpu::Device) -> bool { + // Check if handle is valid + if self.handle.is_null() { + return false; + } + + // Check if wgpu is using D3D12 or Vulkan backend + vulkan::is_d3d12_backend(device) || vulkan::is_vulkan_backend(device) + } +} + +impl D3D11Importer { + fn import_via_d3d12(&self, device: &wgpu::Device) -> TextureImportResult { + // Get wgpu's D3D12 device + use wgpu::hal::api; + let hal_texture = unsafe { + device.as_hal::(|device| { + let Some(device) = device else { + return Err(TextureImportError::HardwareUnavailable { + reason: "Device is not using D3D12 backend".to_string(), + }); + }; + + // Import D3D11 shared handle directly into D3D12 resource + let d3d12_resource = self.import_d3d11_handle_to_d3d12(device)?; + + // Wrap D3D12 resource in wgpu-hal texture + let hal_texture = ::Device::texture_from_raw( + d3d12_resource, + format::cef_to_wgpu(self.format)?, + wgpu::TextureDimension::D2, + wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + 1, // mip_level_count + 1, // sample_count + ); + + Ok(hal_texture) + }) + }?; + + // Import hal texture into wgpu + let texture = unsafe { + device.create_texture_from_hal::( + hal_texture, + &wgpu::TextureDescriptor { + label: Some("CEF D3D11โ†’D3D12 Shared Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }, + ) + }; + + Ok(texture) + } + + fn import_via_vulkan(&self, device: &wgpu::Device) -> TextureImportResult { + // Get wgpu's Vulkan instance and device + use wgpu::{TextureUses, wgc::api::Vulkan}; + let hal_texture = unsafe { + device.as_hal::(|device| { + let Some(device) = device else { + return Err(TextureImportError::HardwareUnavailable { + reason: "Device is not using Vulkan backend".to_string(), + }); + }; + + // Import D3D11 shared handle into Vulkan + let vk_image = self.import_d3d11_handle_to_vulkan(device)?; + + // Wrap VkImage in wgpu-hal texture + let hal_texture = ::Device::texture_from_raw( + vk_image, + &wgpu::hal::TextureDescriptor { + label: Some("CEF D3D11 Shared Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: TextureUses::COPY_DST | TextureUses::RESOURCE, + memory_flags: wgpu::hal::MemoryFlags::empty(), + view_formats: vec![], + }, + None, // drop_callback + ); + + Ok(hal_texture) + }) + }?; + + // Import hal texture into wgpu + let texture = unsafe { + device.create_texture_from_hal::( + hal_texture, + &wgpu::TextureDescriptor { + label: Some("CEF D3D11 Shared Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }, + ) + }; + + Ok(texture) + } + + fn import_d3d11_handle_to_vulkan(&self, hal_device: &::Device) -> Result { + // Get raw Vulkan handles + let device = hal_device.raw_device(); + let _instance = hal_device.shared_instance().raw_instance(); + + // Validate dimensions + if self.width == 0 || self.height == 0 { + return Err(TextureImportError::InvalidHandle("Invalid D3D11 texture dimensions".to_string())); + } + + // Create external memory image info + let mut external_memory_info = vk::ExternalMemoryImageCreateInfo::default().handle_types(vk::ExternalMemoryHandleTypeFlags::D3D11_TEXTURE); + + // Create image create info + let image_create_info = vk::ImageCreateInfo::default() + .image_type(vk::ImageType::TYPE_2D) + .format(format::cef_to_vulkan(self.format)?) + .extent(vk::Extent3D { + width: self.width, + height: self.height, + depth: 1, + }) + .mip_levels(1) + .array_layers(1) + .samples(vk::SampleCountFlags::TYPE_1) + .tiling(vk::ImageTiling::OPTIMAL) + .usage(vk::ImageUsageFlags::SAMPLED | vk::ImageUsageFlags::COLOR_ATTACHMENT) + .sharing_mode(vk::SharingMode::EXCLUSIVE) + .push_next(&mut external_memory_info); + + // Create the image + let image = unsafe { + device.create_image(&image_create_info, None).map_err(|e| TextureImportError::VulkanError { + operation: format!("Failed to create Vulkan image: {:?}", e), + })? + }; + + // Get memory requirements + let memory_requirements = unsafe { device.get_image_memory_requirements(image) }; + + // Import D3D11 handle + let mut import_memory_win32 = vk::ImportMemoryWin32HandleInfoKHR::default() + .handle_type(vk::ExternalMemoryHandleTypeFlags::D3D11_TEXTURE) + .handle(self.handle as isize); + + // Find a suitable memory type + let memory_properties = unsafe { hal_device.shared_instance().raw_instance().get_physical_device_memory_properties(hal_device.raw_physical_device()) }; + + let memory_type_index = + vulkan::find_memory_type_index(memory_requirements.memory_type_bits, vk::MemoryPropertyFlags::empty(), &memory_properties).ok_or_else(|| TextureImportError::VulkanError { + operation: "Failed to find suitable memory type for D3D11 texture".to_string(), + })?; + + let allocate_info = vk::MemoryAllocateInfo::default() + .allocation_size(memory_requirements.size) + .memory_type_index(memory_type_index) + .push_next(&mut import_memory_win32); + + let device_memory = unsafe { + device.allocate_memory(&allocate_info, None).map_err(|e| TextureImportError::VulkanError { + operation: format!("Failed to allocate memory for D3D11 texture: {:?}", e), + })? + }; + + // Bind memory to image + unsafe { + device.bind_image_memory(image, device_memory, 0).map_err(|e| TextureImportError::VulkanError { + operation: format!("Failed to bind memory to image: {:?}", e), + })?; + } + + Ok(image) + } + + fn import_d3d11_handle_to_d3d12(&self, hal_device: &::Device) -> Result { + use windows::Win32::Graphics::Direct3D12::*; + use windows::core::*; + + // Get D3D12 device from wgpu-hal + let d3d12_device = hal_device.raw_device(); + + // Validate dimensions + if self.width == 0 || self.height == 0 { + return Err(TextureImportError::InvalidHandle("Invalid D3D11 texture dimensions".to_string())); + } + + // Open D3D11 shared handle on D3D12 device + unsafe { + let mut shared_resource: Option = None; + d3d12_device + .OpenSharedHandle(windows::Win32::Foundation::HANDLE(self.handle), &mut shared_resource) + .map_err(|e| TextureImportError::PlatformError { + message: format!("Failed to open D3D11 shared handle on D3D12: {:?}", e), + })?; + + shared_resource.ok_or_else(|| TextureImportError::InvalidHandle("Failed to get D3D12 resource from shared handle".to_string())) + } + } +} diff --git a/desktop/src/cef/texture_import/dmabuf.rs b/desktop/src/cef/texture_import/dmabuf.rs new file mode 100644 index 0000000000..a72e07ccd4 --- /dev/null +++ b/desktop/src/cef/texture_import/dmabuf.rs @@ -0,0 +1,273 @@ +//! Linux DMA-BUF texture import implementation + +use super::common::{format, texture, vulkan}; +use super::{TextureImportError, TextureImportResult, TextureImporter}; +use ash::vk; +use cef::{AcceleratedPaintInfo, sys::cef_color_type_t}; +use wgpu::hal::api; + +pub(crate) struct DmaBufImporter { + fds: Vec, + format: cef_color_type_t, + modifier: u64, + width: u32, + height: u32, + strides: Vec, + offsets: Vec, +} + +impl TextureImporter for DmaBufImporter { + fn new(info: &AcceleratedPaintInfo) -> Self { + Self { + fds: extract_fds_from_info(info), + format: *info.format.as_ref(), + modifier: info.modifier, + width: info.extra.coded_size.width as u32, + height: info.extra.coded_size.height as u32, + strides: extract_strides_from_info(info), + offsets: extract_offsets_from_info(info), + } + } + + fn import_to_wgpu(&self, device: &wgpu::Device) -> TextureImportResult { + // Try hardware acceleration first + if self.supports_hardware_acceleration(device) { + match self.import_via_vulkan(device) { + Ok(texture) => { + tracing::info!("Successfully imported DMA-BUF texture via Vulkan"); + return Ok(texture); + } + Err(e) => { + tracing::warn!("Failed to import DMA-BUF via Vulkan: {}, falling back to CPU texture", e); + } + } + } + + // Fallback to CPU texture + texture::create_fallback(device, self.width, self.height, self.format, "CEF DMA-BUF Texture (fallback)") + } + + fn supports_hardware_acceleration(&self, device: &wgpu::Device) -> bool { + // Check if we have valid file descriptors + if self.fds.is_empty() { + return false; + } + + for &fd in &self.fds { + if fd < 0 { + return false; + } + // Check if file descriptor is valid + let flags = unsafe { libc::fcntl(fd, libc::F_GETFD) }; + if flags == -1 { + return false; + } + } + + // Check if wgpu is using Vulkan backend + vulkan::is_vulkan_backend(device) + } +} + +impl DmaBufImporter { + fn import_via_vulkan(&self, device: &wgpu::Device) -> TextureImportResult { + // Get wgpu's Vulkan instance and device + use wgpu::{TextureUses, wgc::api::Vulkan}; + let hal_texture = unsafe { + device.as_hal::(|device| { + let Some(device) = device else { + return Err(TextureImportError::HardwareUnavailable { + reason: "Device is not using Vulkan backend".to_string(), + }); + }; + + // Create VkImage from DMA-BUF using external memory + let vk_image = self.create_vulkan_image_from_dmabuf(device)?; + + // Wrap VkImage in wgpu-hal texture + let hal_texture = ::Device::texture_from_raw( + vk_image, + &wgpu::hal::TextureDescriptor { + label: Some("CEF DMA-BUF Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: TextureUses::COPY_DST | TextureUses::RESOURCE, + memory_flags: wgpu::hal::MemoryFlags::empty(), + view_formats: vec![], + }, + None, // drop_callback + ); + + Ok(hal_texture) + }) + }?; + + // Import hal texture into wgpu + let texture = unsafe { + device.create_texture_from_hal::( + hal_texture, + &wgpu::TextureDescriptor { + label: Some("CEF DMA-BUF Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }, + ) + }; + + Ok(texture) + } + + fn create_vulkan_image_from_dmabuf(&self, hal_device: &::Device) -> Result { + // Get raw Vulkan handles + let device = hal_device.raw_device(); + let _instance = hal_device.shared_instance().raw_instance(); + + // Validate dimensions + if self.width == 0 || self.height == 0 { + return Err(TextureImportError::InvalidHandle("Invalid DMA-BUF dimensions".to_string())); + } + + // Create external memory image + let image_create_info = vk::ImageCreateInfo::default() + .image_type(vk::ImageType::TYPE_2D) + .format(format::cef_to_vulkan(self.format)?) + .extent(vk::Extent3D { + width: self.width, + height: self.height, + depth: 1, + }) + .mip_levels(1) + .array_layers(1) + .samples(vk::SampleCountFlags::TYPE_1) + .tiling(vk::ImageTiling::DRM_FORMAT_MODIFIER_EXT) + .usage(vk::ImageUsageFlags::SAMPLED | vk::ImageUsageFlags::COLOR_ATTACHMENT) + .sharing_mode(vk::SharingMode::EXCLUSIVE); + + // Set up DRM format modifier + let plane_layouts = self.create_subresource_layouts()?; + let mut drm_format_modifier = vk::ImageDrmFormatModifierExplicitCreateInfoEXT::default() + .drm_format_modifier(self.modifier) + .plane_layouts(&plane_layouts); + + let image_create_info = image_create_info.push_next(&mut drm_format_modifier); + + // Create the image + let image = unsafe { + device.create_image(&image_create_info, None).map_err(|e| TextureImportError::VulkanError { + operation: format!("Failed to create Vulkan image: {e:?}"), + })? + }; + + // Import memory from DMA-BUF + let memory_requirements = unsafe { device.get_image_memory_requirements(image) }; + + // Duplicate the file descriptor to avoid ownership issues + let dup_fd = unsafe { libc::dup(self.fds[0]) }; + if dup_fd == -1 { + return Err(TextureImportError::PlatformError { + message: "Failed to duplicate DMA-BUF file descriptor".to_string(), + }); + } + + let mut import_memory_fd = vk::ImportMemoryFdInfoKHR::default().handle_type(vk::ExternalMemoryHandleTypeFlags::DMA_BUF_EXT).fd(dup_fd); + + // Find a suitable memory type + let memory_properties = unsafe { hal_device.shared_instance().raw_instance().get_physical_device_memory_properties(hal_device.raw_physical_device()) }; + + let memory_type_index = + vulkan::find_memory_type_index(memory_requirements.memory_type_bits, vk::MemoryPropertyFlags::empty(), &memory_properties).ok_or_else(|| TextureImportError::VulkanError { + operation: "Failed to find suitable memory type for DMA-BUF".to_string(), + })?; + + let allocate_info = vk::MemoryAllocateInfo::default() + .allocation_size(memory_requirements.size) + .memory_type_index(memory_type_index) + .push_next(&mut import_memory_fd); + + let device_memory = unsafe { + device.allocate_memory(&allocate_info, None).map_err(|e| TextureImportError::VulkanError { + operation: format!("Failed to allocate memory for DMA-BUF: {e:?}"), + })? + }; + + // Bind memory to image + unsafe { + device.bind_image_memory(image, device_memory, 0).map_err(|e| TextureImportError::VulkanError { + operation: format!("Failed to bind memory to image: {e:?}"), + })?; + } + + Ok(image) + } + + fn create_subresource_layouts(&self) -> Result, TextureImportError> { + let mut layouts = Vec::new(); + + for i in 0..self.fds.len() { + layouts.push(vk::SubresourceLayout { + offset: self.offsets.get(i).copied().unwrap_or(0) as u64, + size: 0, // Will be calculated by driver + row_pitch: self.strides.get(i).copied().unwrap_or(0) as u64, + array_pitch: 0, + depth_pitch: 0, + }); + } + + Ok(layouts) + } +} + +fn extract_fds_from_info(info: &cef::AcceleratedPaintInfo) -> Vec { + let plane_count = info.plane_count as usize; + let mut fds = Vec::with_capacity(plane_count); + + for i in 0..plane_count { + if let Some(plane) = info.planes.get(i) { + fds.push(plane.fd); + } + } + + fds +} + +fn extract_strides_from_info(info: &cef::AcceleratedPaintInfo) -> Vec { + let plane_count = info.plane_count as usize; + let mut strides = Vec::with_capacity(plane_count); + + for i in 0..plane_count { + if let Some(plane) = info.planes.get(i) { + strides.push(plane.stride); + } + } + + strides +} + +fn extract_offsets_from_info(info: &cef::AcceleratedPaintInfo) -> Vec { + let plane_count = info.plane_count as usize; + let mut offsets = Vec::with_capacity(plane_count); + + for i in 0..plane_count { + if let Some(plane) = info.planes.get(i) { + offsets.push(plane.offset as u32); + } + } + + offsets +} diff --git a/desktop/src/cef/texture_import/iosurface.rs b/desktop/src/cef/texture_import/iosurface.rs new file mode 100644 index 0000000000..65b4fdcc2a --- /dev/null +++ b/desktop/src/cef/texture_import/iosurface.rs @@ -0,0 +1,182 @@ +//! macOS IOSurface texture import implementation + +use super::common::{format, texture}; +use super::{TextureImportError, TextureImportResult, TextureImporter}; +use cef::{AcceleratedPaintInfo, sys::cef_color_type_t}; +use core_foundation::base::{CFType, TCFType}; +use objc2_io_surface::{IOSurface, IOSurfaceRef}; +use objc2_metal::{MTLDevice, MTLPixelFormat, MTLTexture, MTLTextureDescriptor, MTLTextureType, MTLTextureUsage}; +use std::os::raw::c_void; +use wgpu::hal::api; + +pub struct IOSurfaceImporter { + pub handle: *mut c_void, + pub format: cef_color_type_t, + pub width: u32, + pub height: u32, +} + +impl TextureImporter for IOSurfaceImporter { + fn new(info: &AcceleratedPaintInfo) -> Self { + Self { + handle: info.shared_texture_handle, + format: *info.format.as_ref(), + width: info.extra.coded_size.width as u32, + height: info.extra.coded_size.height as u32, + } + } + + fn import_to_wgpu(&self, device: &wgpu::Device) -> TextureImportResult { + // Try hardware acceleration first + if self.supports_hardware_acceleration(device) { + match self.import_via_metal(device) { + Ok(texture) => { + tracing::trace!("Successfully imported IOSurface texture via Metal"); + return Ok(texture); + } + Err(e) => { + tracing::warn!("Failed to import IOSurface via Metal: {}, falling back to CPU texture", e); + } + } + } + + // Fallback to CPU texture + texture::create_fallback(device, self.width, self.height, self.format, "CEF IOSurface Texture (fallback)") + } + + fn supports_hardware_acceleration(&self, device: &wgpu::Device) -> bool { + // Check if handle is valid + if self.handle.is_null() { + return false; + } + + // Check if wgpu is using Metal backend + self.is_metal_backend(device) + } +} + +impl IOSurfaceImporter { + fn import_via_metal(&self, device: &wgpu::Device) -> TextureImportResult { + // Get wgpu's Metal device + use wgpu::{hal::Api, wgc::api::Metal}; + let hal_texture = unsafe { + device.as_hal::(|device| { + let Some(device) = device else { + return Err(TextureImportError::HardwareUnavailable { + reason: "Device is not using Metal backend".to_string(), + }); + }; + + // Import IOSurface handle into Metal texture + let metal_texture = self.import_iosurface_to_metal(device)?; + + // Wrap Metal texture in wgpu-hal texture + let hal_texture = ::Device::texture_from_raw( + metal_texture, + &wgpu::hal::TextureDescriptor { + label: Some("CEF IOSurface Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: wgpu::hal::TextureUses::RESOURCE, + memory_flags: wgpu::hal::MemoryFlags::empty(), + view_formats: vec![], + }, + None, // drop_callback + ); + + Ok(hal_texture) + }) + }?; + + // Import hal texture into wgpu + let texture = unsafe { + device.create_texture_from_hal::( + hal_texture, + &wgpu::TextureDescriptor { + label: Some("CEF IOSurface Texture"), + size: wgpu::Extent3d { + width: self.width, + height: self.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: format::cef_to_wgpu(self.format)?, + usage: wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }, + ) + }; + + Ok(texture) + } + + fn import_iosurface_to_metal(&self, hal_device: &::Device) -> Result<::Texture, TextureImportError> { + // Validate dimensions + if self.width == 0 || self.height == 0 { + return Err(TextureImportError::InvalidHandle("Invalid IOSurface texture dimensions".to_string())); + } + + // Convert handle to IOSurface + let iosurface = unsafe { + let cf_type = CFType::wrap_under_get_rule(self.handle as IOSurfaceRef); + IOSurface::from(cf_type) + }; + + // Get the Metal device from wgpu-hal + let metal_device = hal_device.raw_device(); + + // Convert CEF format to Metal pixel format + let metal_format = self.cef_to_metal_format(self.format)?; + + // Create Metal texture descriptor + let texture_descriptor = MTLTextureDescriptor::new(); + texture_descriptor.setTextureType(MTLTextureType::Type2D); + texture_descriptor.setPixelFormat(metal_format); + texture_descriptor.setWidth(self.width as usize); + texture_descriptor.setHeight(self.height as usize); + texture_descriptor.setDepth(1); + texture_descriptor.setMipmapLevelCount(1); + texture_descriptor.setSampleCount(1); + texture_descriptor.setUsage(MTLTextureUsage::ShaderRead); + + // Create Metal texture from IOSurface + let metal_texture = unsafe { metal_device.newTextureWithDescriptor_iosurface_plane(&texture_descriptor, &iosurface, 0) }; + + let Some(metal_texture) = metal_texture else { + return Err(TextureImportError::PlatformError { + message: "Failed to create Metal texture from IOSurface".to_string(), + }); + }; + + tracing::trace!("Successfully created Metal texture from IOSurface"); + Ok(metal_texture) + } + + fn cef_to_metal_format(&self, format: cef_color_type_t) -> Result { + match format { + cef_color_type_t::CEF_COLOR_TYPE_BGRA_8888 => Ok(MTLPixelFormat::BGRA8Unorm_sRGB), + cef_color_type_t::CEF_COLOR_TYPE_RGBA_8888 => Ok(MTLPixelFormat::RGBA8Unorm_sRGB), + _ => Err(TextureImportError::UnsupportedFormat { format }), + } + } + + fn is_metal_backend(&self, device: &wgpu::Device) -> bool { + use wgpu::hal::api; + let mut is_metal = false; + unsafe { + device.as_hal::(|device| { + is_metal = device.is_some(); + }); + } + is_metal + } +} diff --git a/desktop/src/cef/texture_import/mod.rs b/desktop/src/cef/texture_import/mod.rs new file mode 100644 index 0000000000..485acf4d11 --- /dev/null +++ b/desktop/src/cef/texture_import/mod.rs @@ -0,0 +1,75 @@ +//! Unified texture import system for CEF hardware acceleration +//! +//! This module provides a platform-agnostic interface for importing shared textures +//! from CEF into wgpu, with automatic fallback to CPU textures when hardware +//! acceleration is not available. +//! +//! # Supported Platforms +//! +//! - **Linux**: DMA-BUF via Vulkan external memory +//! - **Windows**: D3D11 shared textures via Vulkan interop +//! - **macOS**: IOSurface via Metal native API +//! +//! # Usage +//! +//! ```no_run +//! // Import texture with automatic platform detection +//! let texture = shared_handle.import_texture(&device)?; +//! ``` +//! +//! # Features +//! +//! - `accelerated_paint` - Base feature for texture import +//! - `accelerated_paint_dmabuf` - Linux DMA-BUF support +//! - `accelerated_paint_d3d11` - Windows D3D11 support +//! - `accelerated_paint_iosurface` - macOS IOSurface support + +pub(crate) mod common; + +pub(crate) mod shared_texture_handle; +pub(crate) use shared_texture_handle::SharedTextureHandle; + +#[cfg(target_os = "linux")] +pub(crate) mod dmabuf; + +#[cfg(target_os = "windows")] +pub(crate) mod d3d11; + +#[cfg(target_os = "macos")] +pub(crate) mod iosurface; + +/// Result type for texture import operations +pub type TextureImportResult = Result; + +/// Errors that can occur during texture import +#[derive(Debug, thiserror::Error)] +pub enum TextureImportError { + #[error("Invalid texture handle: {0}")] + InvalidHandle(String), + + #[error("Unsupported texture format: {format:?}")] + UnsupportedFormat { format: cef::sys::cef_color_type_t }, + + #[error("Hardware acceleration not available: {reason}")] + HardwareUnavailable { reason: String }, + + #[error("Vulkan operation failed: {operation}")] + VulkanError { operation: String }, + + #[error("Platform-specific error: {message}")] + PlatformError { message: String }, + + #[error("Unsupported platform for texture import")] + UnsupportedPlatform, +} + +/// Trait for platform-specific texture importers +pub trait TextureImporter { + fn new(info: &cef::AcceleratedPaintInfo) -> Self; + + /// Import the texture into wgpu, with automatic fallback to CPU texture + fn import_to_wgpu(&self, device: &wgpu::Device) -> TextureImportResult; + + /// Check if hardware acceleration is available for this texture + fn supports_hardware_acceleration(&self, device: &wgpu::Device) -> bool; +} diff --git a/desktop/src/cef/texture_import/shared_texture_handle.rs b/desktop/src/cef/texture_import/shared_texture_handle.rs new file mode 100644 index 0000000000..b19ee7f6f8 --- /dev/null +++ b/desktop/src/cef/texture_import/shared_texture_handle.rs @@ -0,0 +1,45 @@ +use cef::AcceleratedPaintInfo; + +use super::{TextureImportError, TextureImportResult, TextureImporter}; + +pub(crate) enum SharedTextureHandle { + #[cfg(target_os = "linux")] + DmaBuf(super::dmabuf::DmaBufImporter), + #[cfg(target_os = "windows")] + D3D11(super::d3d11::D3D11Importer), + #[cfg(target_os = "macos")] + IOSurface(super::iosurface::IOSurfaceImporter), + Unsupported, +} + +impl SharedTextureHandle { + pub(crate) fn new(info: &AcceleratedPaintInfo) -> Self { + // Extract DMA-BUF information + #[cfg(target_os = "linux")] + return Self::DmaBuf(super::dmabuf::DmaBufImporter::new(info)); + + // Extract D3D11 shared handle with texture metadata + #[cfg(target_os = "windows")] + return Self::D3D11(super::d3d11::D3D11Importer::new(info)); + + // Extract IOSurface handle with texture metadata + #[cfg(target_os = "macos")] + return Self::IOSurface(super::iosurface::IOSurfaceImporter::new(info)); + + #[allow(unreachable_code)] + Self::Unsupported + } + + /// Import a texture using the appropriate platform-specific importer + pub(crate) fn import_texture(self, device: &wgpu::Device) -> TextureImportResult { + match self { + #[cfg(target_os = "linux")] + SharedTextureHandle::DmaBuf(importer) => importer.import_to_wgpu(device), + #[cfg(target_os = "windows")] + SharedTextureHandle::D3D11(importer) => importer.import_to_wgpu(device), + #[cfg(target_os = "macos")] + SharedTextureHandle::IOSurface(importer) => importer.import_to_wgpu(device), + SharedTextureHandle::Unsupported => Err(TextureImportError::UnsupportedPlatform), + } + } +} diff --git a/desktop/src/cef/utility.rs b/desktop/src/cef/utility.rs new file mode 100644 index 0000000000..d56593642f --- /dev/null +++ b/desktop/src/cef/utility.rs @@ -0,0 +1,6 @@ +pub unsafe fn pointer_to_string(pointer: *mut cef::sys::_cef_string_utf16_t) -> String { + let str = unsafe { (*pointer).str_ }; + let len = unsafe { (*pointer).length }; + let slice = unsafe { std::slice::from_raw_parts(str, len) }; + String::from_utf16(slice).unwrap() +} diff --git a/desktop/src/consts.rs b/desktop/src/consts.rs new file mode 100644 index 0000000000..3babf73019 --- /dev/null +++ b/desktop/src/consts.rs @@ -0,0 +1,7 @@ +pub(crate) static APP_NAME: &str = "Graphite"; +pub(crate) static APP_ID: &str = "rs.graphite.GraphiteEditor"; +pub(crate) static APP_DIRECTORY_NAME: &str = "graphite-editor"; + +// CEF configuration constants +pub(crate) const CEF_WINDOWLESS_FRAME_RATE: i32 = 60; +pub(crate) const CEF_MESSAGE_LOOP_MAX_ITERATIONS: usize = 10; diff --git a/desktop/src/dirs.rs b/desktop/src/dirs.rs new file mode 100644 index 0000000000..6a964e0173 --- /dev/null +++ b/desktop/src/dirs.rs @@ -0,0 +1,16 @@ +use std::fs::create_dir_all; +use std::path::PathBuf; + +use crate::consts::APP_DIRECTORY_NAME; + +pub(crate) fn ensure_dir_exists(path: &PathBuf) { + if !path.exists() { + create_dir_all(path).unwrap_or_else(|_| panic!("Failed to create directory at {path:?}")); + } +} + +pub(crate) fn graphite_data_dir() -> PathBuf { + let path = dirs::data_dir().expect("Failed to get data directory").join(APP_DIRECTORY_NAME); + ensure_dir_exists(&path); + path +} diff --git a/desktop/src/main.rs b/desktop/src/main.rs new file mode 100644 index 0000000000..080d05b692 --- /dev/null +++ b/desktop/src/main.rs @@ -0,0 +1,72 @@ +use std::process::exit; +use std::time::Instant; + +use cef::CefHandler; +use tracing_subscriber::EnvFilter; +use winit::event_loop::EventLoop; + +pub(crate) mod consts; + +mod cef; + +mod render; + +mod app; +use app::WinitApp; + +mod dirs; + +use graphite_desktop_wrapper::messages::DesktopWrapperMessage; +use graphite_desktop_wrapper::{NodeGraphExecutionResult, WgpuContext}; + +pub(crate) enum CustomEvent { + UiUpdate(wgpu::Texture), + ScheduleBrowserWork(Instant), + WebCommunicationInitialized, + DesktopWrapperMessage(DesktopWrapperMessage), + NodeGraphExecutionResult(NodeGraphExecutionResult), + CloseWindow, +} + +fn main() { + tracing_subscriber::fmt().with_env_filter(EnvFilter::from_default_env()).init(); + + let cef_context_builder = cef::CefContextBuilder::::new(); + + if cef_context_builder.is_sub_process() { + // We are in a CEF subprocess + // This will block until the CEF subprocess quits + let error = cef_context_builder.execute_sub_process(); + tracing::error!("Cef subprocess failed with error: {error}"); + return; + } + + let wgpu_context = futures::executor::block_on(WgpuContext::new()).unwrap(); + + let event_loop = EventLoop::::with_user_event().build().unwrap(); + + let (window_size_sender, window_size_receiver) = std::sync::mpsc::channel(); + + let cef_handler = cef::CefHandler::new(window_size_receiver, event_loop.create_proxy(), wgpu_context.clone()); + let cef_context = match cef_context_builder.initialize(cef_handler) { + Ok(c) => c, + Err(cef::InitError::AlreadyRunning) => { + tracing::error!("Another instance is already running, Exiting."); + exit(0); + } + Err(cef::InitError::InitializationFailed(code)) => { + tracing::error!("Cef initialization failed with code: {code}"); + exit(1); + } + Err(cef::InitError::BrowserCreationFailed) => { + tracing::error!("Failed to create CEF browser"); + exit(1); + } + }; + + tracing::info!("CEF initialized successfully"); + + let mut winit_app = WinitApp::new(Box::new(cef_context), window_size_sender, wgpu_context, event_loop.create_proxy()); + + event_loop.run_app(&mut winit_app).unwrap(); +} diff --git a/desktop/src/render.rs b/desktop/src/render.rs new file mode 100644 index 0000000000..df03381f08 --- /dev/null +++ b/desktop/src/render.rs @@ -0,0 +1,5 @@ +mod frame_buffer_ref; +pub(crate) use frame_buffer_ref::FrameBufferRef; + +mod graphics_state; +pub(crate) use graphics_state::GraphicsState; diff --git a/desktop/src/render/composite_shader.wgsl b/desktop/src/render/composite_shader.wgsl new file mode 100644 index 0000000000..27560612d6 --- /dev/null +++ b/desktop/src/render/composite_shader.wgsl @@ -0,0 +1,103 @@ +struct VertexOutput { + @builtin(position) clip_position: vec4, + @location(0) tex_coords: vec2, +} + +@vertex +fn vs_main(@builtin(vertex_index) vertex_index: u32) -> VertexOutput { + var out: VertexOutput; + + let pos = array( + // 1st triangle + vec2f( -1.0, -1.0), // center + vec2f( 1.0, -1.0), // right, center + vec2f( -1.0, 1.0), // center, top + + // 2nd triangle + vec2f( -1.0, 1.0), // center, top + vec2f( 1.0, -1.0), // right, center + vec2f( 1.0, 1.0), // right, top + ); + let xy = pos[vertex_index]; + out.clip_position = vec4f(xy , 0.0, 1.0); + let coords = (xy / 2. + 0.5); + out.tex_coords = vec2f(coords.x, 1. - coords.y); + return out; +} + + +struct Constants { + viewport_scale: vec2, + viewport_offset: vec2, +}; + +var constants: Constants; + +@group(0) @binding(0) +var t_viewport: texture_2d; +@group(0) @binding(1) +var t_overlays: texture_2d; +@group(0) @binding(2) +var t_ui: texture_2d; +@group(0) @binding(3) +var s_diffuse: sampler; + +@fragment +fn fs_main(in: VertexOutput) -> @location(0) vec4 { + let ui_linear = textureSample(t_ui, s_diffuse, in.tex_coords); + if (ui_linear.a >= 0.999) { + return ui_linear; + } + + let viewport_coordinate = (in.tex_coords - constants.viewport_offset) * constants.viewport_scale; + + let overlay_srgb = textureSample(t_overlays, s_diffuse, viewport_coordinate); + let viewport_srgb = textureSample(t_viewport, s_diffuse, viewport_coordinate); + + // UI texture is premultiplied, we need to unpremultiply before blending + let ui_srgb = linear_to_srgb(unpremultiply(ui_linear)); + + if (overlay_srgb.a < 0.001) { + if (ui_srgb.a < 0.001) { + return srgb_to_linear(viewport_srgb); + } else { + return srgb_to_linear(blend(ui_srgb, viewport_srgb)); + } + } + + let composite_linear = blend(srgb_to_linear(overlay_srgb), srgb_to_linear(viewport_srgb)); + + if (ui_srgb.a < 0.001) { + return composite_linear; + } + + return srgb_to_linear(blend(ui_srgb, linear_to_srgb(composite_linear))); +} + +fn blend(fg: vec4, bg: vec4) -> vec4 { + let a = fg.a + bg.a * (1.0 - fg.a); + let rgb = fg.rgb * fg.a + bg.rgb * bg.a * (1.0 - fg.a); + return vec4(rgb, a); +} + +fn linear_to_srgb(in: vec4) -> vec4 { + let cutoff = vec3(0.0031308); + let lo = in.rgb * 12.92; + let hi = 1.055 * pow(max(in.rgb, vec3(0.0)), vec3(1.0/2.4)) - 0.055; + return vec4(select(lo, hi, in.rgb > cutoff), in.a); +} + +fn srgb_to_linear(in: vec4) -> vec4 { + let cutoff = vec3(0.04045); + let lo = in.rgb / 12.92; + let hi = pow((in.rgb + 0.055) / 1.055, vec3(2.4)); + return vec4(select(lo, hi, in.rgb > cutoff), in.a); +} + +fn unpremultiply(in: vec4) -> vec4 { + if (in.a > 0.0) { + return vec4((in.rgb / in.a), in.a); + } else { + return vec4(0.0); + } +} diff --git a/desktop/src/render/frame_buffer_ref.rs b/desktop/src/render/frame_buffer_ref.rs new file mode 100644 index 0000000000..4135160b59 --- /dev/null +++ b/desktop/src/render/frame_buffer_ref.rs @@ -0,0 +1,53 @@ +use thiserror::Error; + +pub(crate) struct FrameBufferRef<'a> { + buffer: &'a [u8], + width: usize, + height: usize, +} +impl<'a> FrameBufferRef<'a> { + pub(crate) fn new(buffer: &'a [u8], width: usize, height: usize) -> Result { + let fb = Self { buffer, width, height }; + fb.validate_size()?; + Ok(fb) + } + pub(crate) fn buffer(&self) -> &[u8] { + self.buffer + } + + pub(crate) fn width(&self) -> usize { + self.width + } + + pub(crate) fn height(&self) -> usize { + self.height + } + + fn validate_size(&self) -> Result<(), FrameBufferError> { + if self.buffer.len() != self.width * self.height * 4 { + Err(FrameBufferError::InvalidSize { + buffer_size: self.buffer.len(), + expected_size: self.width * self.height * 4, + width: self.width, + height: self.height, + }) + } else { + Ok(()) + } + } +} +impl<'a> std::fmt::Debug for FrameBufferRef<'a> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("FrameBuffer") + .field("width", &self.width) + .field("height", &self.height) + .field("len", &self.buffer.len()) + .finish() + } +} + +#[derive(Error, Debug)] +pub(crate) enum FrameBufferError { + #[error("Invalid buffer size {buffer_size}, expected {expected_size} for width {width} multiplied with height {height} multiplied by 4 channels")] + InvalidSize { buffer_size: usize, expected_size: usize, width: usize, height: usize }, +} diff --git a/desktop/src/render/graphics_state.rs b/desktop/src/render/graphics_state.rs new file mode 100644 index 0000000000..fdec45a609 --- /dev/null +++ b/desktop/src/render/graphics_state.rs @@ -0,0 +1,321 @@ +use std::sync::Arc; +use winit::window::Window; + +use graphite_desktop_wrapper::{Color, WgpuContext, WgpuExecutor}; + +#[derive(derivative::Derivative)] +#[derivative(Debug)] +pub(crate) struct GraphicsState { + surface: wgpu::Surface<'static>, + context: WgpuContext, + executor: WgpuExecutor, + config: wgpu::SurfaceConfiguration, + render_pipeline: wgpu::RenderPipeline, + transparent_texture: wgpu::Texture, + sampler: wgpu::Sampler, + viewport_scale: [f32; 2], + viewport_offset: [f32; 2], + viewport_texture: Option, + overlays_texture: Option, + ui_texture: Option, + bind_group: Option, + #[derivative(Debug = "ignore")] + overlays_scene: Option, +} + +impl GraphicsState { + pub(crate) fn new(window: Arc, context: WgpuContext) -> Self { + let size = window.inner_size(); + + let surface = context.instance.create_surface(window).unwrap(); + + let surface_caps = surface.get_capabilities(&context.adapter); + let surface_format = surface_caps.formats.iter().find(|f| f.is_srgb()).copied().unwrap_or(surface_caps.formats[0]); + + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface_format, + width: size.width, + height: size.height, + present_mode: surface_caps.present_modes[0], + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![], + desired_maximum_frame_latency: 2, + }; + + surface.configure(&context.device, &config); + + let transparent_texture = context.device.create_texture(&wgpu::TextureDescriptor { + label: Some("Transparent Texture"), + size: wgpu::Extent3d { + width: 1, + height: 1, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: wgpu::TextureFormat::Bgra8UnormSrgb, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }); + + // Create shader module + let shader = context.device.create_shader_module(wgpu::include_wgsl!("composite_shader.wgsl")); + + // Create sampler + let sampler = context.device.create_sampler(&wgpu::SamplerDescriptor { + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + address_mode_w: wgpu::AddressMode::ClampToEdge, + mag_filter: wgpu::FilterMode::Linear, + min_filter: wgpu::FilterMode::Nearest, + mipmap_filter: wgpu::FilterMode::Nearest, + ..Default::default() + }); + + let texture_bind_group_layout = context.device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + entries: &[ + wgpu::BindGroupLayoutEntry { + binding: 0, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + multisampled: false, + view_dimension: wgpu::TextureViewDimension::D2, + sample_type: wgpu::TextureSampleType::Float { filterable: true }, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 1, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + multisampled: false, + view_dimension: wgpu::TextureViewDimension::D2, + sample_type: wgpu::TextureSampleType::Float { filterable: true }, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 2, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + multisampled: false, + view_dimension: wgpu::TextureViewDimension::D2, + sample_type: wgpu::TextureSampleType::Float { filterable: true }, + }, + count: None, + }, + wgpu::BindGroupLayoutEntry { + binding: 3, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), + count: None, + }, + ], + label: Some("texture_bind_group_layout"), + }); + + let render_pipeline_layout = context.device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("Render Pipeline Layout"), + bind_group_layouts: &[&texture_bind_group_layout], + push_constant_ranges: &[wgpu::PushConstantRange { + stages: wgpu::ShaderStages::FRAGMENT, + range: 0..size_of::() as u32, + }], + }); + + let render_pipeline = context.device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("Render Pipeline"), + layout: Some(&render_pipeline_layout), + vertex: wgpu::VertexState { + module: &shader, + entry_point: Some("vs_main"), + buffers: &[], + compilation_options: Default::default(), + }, + fragment: Some(wgpu::FragmentState { + module: &shader, + entry_point: Some("fs_main"), + targets: &[Some(wgpu::ColorTargetState { + format: config.format, + blend: Some(wgpu::BlendState::REPLACE), + write_mask: wgpu::ColorWrites::ALL, + })], + compilation_options: Default::default(), + }), + primitive: wgpu::PrimitiveState { + topology: wgpu::PrimitiveTopology::TriangleList, + strip_index_format: None, + front_face: wgpu::FrontFace::Ccw, + cull_mode: Some(wgpu::Face::Back), + polygon_mode: wgpu::PolygonMode::Fill, + unclipped_depth: false, + conservative: false, + }, + depth_stencil: None, + multisample: wgpu::MultisampleState { + count: 1, + mask: !0, + alpha_to_coverage_enabled: false, + }, + multiview: None, + cache: None, + }); + + let wgpu_executor = WgpuExecutor::with_context(context.clone()).expect("Failed to create WgpuExecutor"); + + Self { + surface, + context, + executor: wgpu_executor, + config, + render_pipeline, + transparent_texture, + sampler, + viewport_scale: [1.0, 1.0], + viewport_offset: [0.0, 0.0], + viewport_texture: None, + overlays_texture: None, + ui_texture: None, + bind_group: None, + overlays_scene: None, + } + } + + pub(crate) fn resize(&mut self, width: u32, height: u32) { + if width > 0 && height > 0 && (self.config.width != width || self.config.height != height) { + self.config.width = width; + self.config.height = height; + self.surface.configure(&self.context.device, &self.config); + } + } + + pub(crate) fn bind_viewport_texture(&mut self, viewport_texture: wgpu::Texture) { + self.viewport_texture = Some(viewport_texture); + self.update_bindgroup(); + } + + pub(crate) fn bind_overlays_texture(&mut self, overlays_texture: wgpu::Texture) { + self.overlays_texture = Some(overlays_texture); + self.update_bindgroup(); + } + + pub(crate) fn bind_ui_texture(&mut self, bind_ui_texture: wgpu::Texture) { + self.ui_texture = Some(bind_ui_texture); + self.update_bindgroup(); + } + + pub(crate) fn set_viewport_scale(&mut self, scale: [f32; 2]) { + self.viewport_scale = scale; + } + + pub(crate) fn set_viewport_offset(&mut self, offset: [f32; 2]) { + self.viewport_offset = offset; + } + + pub(crate) fn set_overlays_scene(&mut self, scene: vello::Scene) { + self.overlays_scene = Some(scene); + } + + fn render_overlays(&mut self, scene: vello::Scene) { + let Some(viewport_texture) = self.viewport_texture.as_ref() else { + tracing::warn!("No viewport texture bound, cannot render overlays"); + return; + }; + let size = glam::UVec2::new(viewport_texture.width(), viewport_texture.height()); + let texture = futures::executor::block_on(self.executor.render_vello_scene_to_texture(&scene, size, &Default::default(), Color::TRANSPARENT)); + let Ok(texture) = texture else { + tracing::error!("Error rendering overlays"); + return; + }; + self.bind_overlays_texture(texture); + } + + pub(crate) fn render(&mut self, window: &Window) -> Result<(), wgpu::SurfaceError> { + if let Some(scene) = self.overlays_scene.take() { + self.render_overlays(scene); + } + + let output = self.surface.get_current_texture()?; + let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default()); + + let mut encoder = self.context.device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some("Render Encoder") }); + + { + let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("Render Pass"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: &view, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color { r: 0.01, g: 0.01, b: 0.01, a: 1.0 }), + store: wgpu::StoreOp::Store, + }, + })], + depth_stencil_attachment: None, + occlusion_query_set: None, + timestamp_writes: None, + }); + + render_pass.set_pipeline(&self.render_pipeline); + render_pass.set_push_constants( + wgpu::ShaderStages::FRAGMENT, + 0, + bytemuck::bytes_of(&Constants { + viewport_scale: self.viewport_scale, + viewport_offset: self.viewport_offset, + }), + ); + if let Some(bind_group) = &self.bind_group { + render_pass.set_bind_group(0, bind_group, &[]); + render_pass.draw(0..6, 0..1); // Draw 3 vertices for fullscreen triangle + } else { + tracing::warn!("No bind group available - showing clear color only"); + } + } + self.context.queue.submit(std::iter::once(encoder.finish())); + window.pre_present_notify(); + output.present(); + + Ok(()) + } + + fn update_bindgroup(&mut self) { + let viewport_texture_view = self.viewport_texture.as_ref().unwrap_or(&self.transparent_texture).create_view(&wgpu::TextureViewDescriptor::default()); + let overlays_texture_view = self.overlays_texture.as_ref().unwrap_or(&self.transparent_texture).create_view(&wgpu::TextureViewDescriptor::default()); + let ui_texture_view = self.ui_texture.as_ref().unwrap_or(&self.transparent_texture).create_view(&wgpu::TextureViewDescriptor::default()); + + let bind_group = self.context.device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &self.render_pipeline.get_bind_group_layout(0), + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::TextureView(&viewport_texture_view), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::TextureView(&overlays_texture_view), + }, + wgpu::BindGroupEntry { + binding: 2, + resource: wgpu::BindingResource::TextureView(&ui_texture_view), + }, + wgpu::BindGroupEntry { + binding: 3, + resource: wgpu::BindingResource::Sampler(&self.sampler), + }, + ], + label: Some("texture_bind_group"), + }); + + self.bind_group = Some(bind_group); + } +} + +#[repr(C)] +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +struct Constants { + viewport_scale: [f32; 2], + viewport_offset: [f32; 2], +} diff --git a/desktop/wrapper/Cargo.toml b/desktop/wrapper/Cargo.toml new file mode 100644 index 0000000000..5e61337515 --- /dev/null +++ b/desktop/wrapper/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "graphite-desktop-wrapper" +version = "0.1.0" +description = "Graphite Desktop Wrapper" +authors = ["Graphite Authors "] +license = "Apache-2.0" +repository = "" +edition = "2024" +rust-version = "1.87" + +[features] +default = ["gpu"] +gpu = ["graphite-editor/gpu"] + +[dependencies] +# Local dependencies +graphite-editor = { path = "../../editor", features = [ + "gpu", + "vello", +] } +graphene-std = { workspace = true } +graph-craft = { workspace = true } +wgpu-executor = { workspace = true } + +wgpu = { workspace = true } +thiserror = { workspace = true } +futures = { workspace = true } +tracing = { workspace = true } +dirs = { workspace = true } +ron = { workspace = true} +vello = { workspace = true } +image = { workspace = true } diff --git a/desktop/wrapper/src/handle_desktop_wrapper_message.rs b/desktop/wrapper/src/handle_desktop_wrapper_message.rs new file mode 100644 index 0000000000..250c9201f3 --- /dev/null +++ b/desktop/wrapper/src/handle_desktop_wrapper_message.rs @@ -0,0 +1,122 @@ +use graphene_std::Color; +use graphene_std::raster::Image; +use graphite_editor::messages::app_window::app_window_message_handler::AppWindowPlatform; +use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, PortfolioMessage}; + +use crate::messages::Platform; + +use super::DesktopWrapperMessageDispatcher; +use super::messages::{DesktopFrontendMessage, DesktopWrapperMessage, EditorMessage, OpenFileDialogContext, SaveFileDialogContext}; + +pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMessageDispatcher, message: DesktopWrapperMessage) { + match message { + DesktopWrapperMessage::FromWeb(message) => { + dispatcher.queue_editor_message(*message); + } + DesktopWrapperMessage::OpenFileDialogResult { path, content, context } => match context { + OpenFileDialogContext::Document => { + dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::OpenDocument { path, content }); + } + OpenFileDialogContext::Import => { + dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::ImportFile { path, content }); + } + }, + DesktopWrapperMessage::SaveFileDialogResult { path, context } => match context { + SaveFileDialogContext::Document { document_id, content } => { + dispatcher.respond(DesktopFrontendMessage::WriteFile { path: path.clone(), content }); + dispatcher.queue_editor_message(EditorMessage::Portfolio(PortfolioMessage::DocumentPassMessage { + document_id, + message: DocumentMessage::SavedDocument { path: Some(path) }, + })); + } + SaveFileDialogContext::File { content } => { + dispatcher.respond(DesktopFrontendMessage::WriteFile { path, content }); + } + }, + DesktopWrapperMessage::OpenFile { path, content } => { + let extension = path.extension().and_then(|s| s.to_str()).unwrap_or_default().to_lowercase(); + match extension.as_str() { + "graphite" => { + dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::OpenDocument { path, content }); + } + _ => { + dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::ImportFile { path, content }); + } + } + } + DesktopWrapperMessage::OpenDocument { path, content } => { + let Ok(content) = String::from_utf8(content) else { + tracing::warn!("Document file is invalid: {}", path.display()); + return; + }; + + let message = PortfolioMessage::OpenDocumentFile { + document_name: None, + document_path: Some(path), + document_serialized_content: content, + }; + dispatcher.queue_editor_message(message.into()); + } + DesktopWrapperMessage::ImportFile { path, content } => { + let extension = path.extension().and_then(|s| s.to_str()).unwrap_or_default().to_lowercase(); + match extension.as_str() { + "svg" => { + dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::ImportSvg { path, content }); + } + _ => { + dispatcher.queue_desktop_wrapper_message(DesktopWrapperMessage::ImportImage { path, content }); + } + } + } + DesktopWrapperMessage::ImportSvg { path, content } => { + let Ok(content) = String::from_utf8(content) else { + tracing::warn!("Svg file is invalid: {}", path.display()); + return; + }; + + let message = PortfolioMessage::PasteSvg { + name: path.file_stem().map(|s| s.to_string_lossy().to_string()), + svg: content, + mouse: None, + parent_and_insert_index: None, + }; + dispatcher.queue_editor_message(message.into()); + } + DesktopWrapperMessage::ImportImage { path, content } => { + let name = path.file_stem().and_then(|s| s.to_str()).map(|s| s.to_string()); + let extension = path.extension().and_then(|s| s.to_str()).unwrap_or_default().to_lowercase(); + let Some(image_format) = image::ImageFormat::from_extension(&extension) else { + tracing::warn!("Unsupported file type: {}", path.display()); + return; + }; + let reader = image::ImageReader::with_format(std::io::Cursor::new(content), image_format); + let Ok(image) = reader.decode() else { + tracing::error!("Failed to decode image: {}", path.display()); + return; + }; + let width = image.width(); + let height = image.height(); + + // TODO: Handle Image formats with more than 8 bits per channel + let image_data = image.to_rgba8(); + let image = Image::::from_image_data(image_data.as_raw(), width, height); + let message = PortfolioMessage::PasteImage { + name, + image, + mouse: None, + parent_and_insert_index: None, + }; + dispatcher.queue_editor_message(message.into()); + } + DesktopWrapperMessage::PollNodeGraphEvaluation => dispatcher.poll_node_graph_evaluation(), + DesktopWrapperMessage::UpdatePlatform(platform) => { + let platform = match platform { + Platform::Windows => AppWindowPlatform::Windows, + Platform::Mac => AppWindowPlatform::Mac, + Platform::Linux => AppWindowPlatform::Linux, + }; + let message = AppWindowMessage::AppWindowUpdatePlatform { platform }; + dispatcher.queue_editor_message(message.into()); + } + } +} diff --git a/desktop/wrapper/src/intercept_editor_message.rs b/desktop/wrapper/src/intercept_editor_message.rs new file mode 100644 index 0000000000..4fc869f8c5 --- /dev/null +++ b/desktop/wrapper/src/intercept_editor_message.rs @@ -0,0 +1,23 @@ +use graphite_editor::messages::prelude::InputPreprocessorMessage; + +use super::DesktopWrapperMessageDispatcher; +use super::messages::{DesktopFrontendMessage, EditorMessage}; + +pub(super) fn intercept_editor_message(dispatcher: &mut DesktopWrapperMessageDispatcher, message: EditorMessage) -> Option { + match message { + EditorMessage::InputPreprocessor(message) => { + if let InputPreprocessorMessage::BoundsOfViewports { bounds_of_viewports } = &message { + let top_left = bounds_of_viewports[0].top_left; + let bottom_right = bounds_of_viewports[0].bottom_right; + dispatcher.respond(DesktopFrontendMessage::UpdateViewportBounds { + x: top_left.x as f32, + y: top_left.y as f32, + width: (bottom_right.x - top_left.x) as f32, + height: (bottom_right.y - top_left.y) as f32, + }); + } + Some(EditorMessage::InputPreprocessor(message)) + } + m => Some(m), + } +} diff --git a/desktop/wrapper/src/intercept_frontend_message.rs b/desktop/wrapper/src/intercept_frontend_message.rs new file mode 100644 index 0000000000..ed52205f09 --- /dev/null +++ b/desktop/wrapper/src/intercept_frontend_message.rs @@ -0,0 +1,79 @@ +use std::path::PathBuf; + +use graphite_editor::messages::prelude::FrontendMessage; + +use super::DesktopWrapperMessageDispatcher; +use super::messages::{DesktopFrontendMessage, FileFilter, OpenFileDialogContext, SaveFileDialogContext}; + +pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageDispatcher, message: FrontendMessage) -> Option { + match message { + FrontendMessage::RenderOverlays { context } => { + dispatcher.respond(DesktopFrontendMessage::UpdateOverlays(context.take_scene())); + } + FrontendMessage::TriggerOpenDocument => { + dispatcher.respond(DesktopFrontendMessage::OpenFileDialog { + title: "Open Document".to_string(), + filters: vec![FileFilter { + name: "Graphite".to_string(), + extensions: vec!["graphite".to_string()], + }], + context: OpenFileDialogContext::Document, + }); + } + FrontendMessage::TriggerImport => { + dispatcher.respond(DesktopFrontendMessage::OpenFileDialog { + title: "Import File".to_string(), + filters: vec![ + FileFilter { + name: "Svg".to_string(), + extensions: vec!["svg".to_string()], + }, + FileFilter { + name: "Image".to_string(), + extensions: vec!["png".to_string(), "jpg".to_string(), "jpeg".to_string(), "bmp".to_string()], + }, + ], + context: OpenFileDialogContext::Import, + }); + } + FrontendMessage::TriggerSaveDocument { document_id, name, path, content } => { + if let Some(path) = path { + dispatcher.respond(DesktopFrontendMessage::WriteFile { path, content }); + } else { + dispatcher.respond(DesktopFrontendMessage::SaveFileDialog { + title: "Save Document".to_string(), + default_filename: name, + default_folder: path.and_then(|p| p.parent().map(PathBuf::from)), + filters: vec![FileFilter { + name: "Graphite".to_string(), + extensions: vec!["graphite".to_string()], + }], + context: SaveFileDialogContext::Document { document_id, content }, + }); + } + } + FrontendMessage::TriggerSaveFile { name, content } => { + dispatcher.respond(DesktopFrontendMessage::SaveFileDialog { + title: "Save File".to_string(), + default_filename: name, + default_folder: None, + filters: Vec::new(), + context: SaveFileDialogContext::File { content }, + }); + } + FrontendMessage::TriggerVisitLink { url } => { + dispatcher.respond(DesktopFrontendMessage::OpenUrl(url)); + } + FrontendMessage::UpdateWindowState { maximized, minimized } => { + dispatcher.respond(DesktopFrontendMessage::UpdateWindowState { maximized, minimized }); + + // Forward this to update the ui + return Some(message); + } + FrontendMessage::CloseWindow => { + dispatcher.respond(DesktopFrontendMessage::CloseWindow); + } + m => return Some(m), + } + None +} diff --git a/desktop/wrapper/src/lib.rs b/desktop/wrapper/src/lib.rs new file mode 100644 index 0000000000..0410f153bb --- /dev/null +++ b/desktop/wrapper/src/lib.rs @@ -0,0 +1,79 @@ +use graph_craft::wasm_application_io::WasmApplicationIo; +use graphite_editor::application::Editor; +use graphite_editor::messages::prelude::{FrontendMessage, Message}; + +// TODO: Remove usage of this reexport in desktop create and remove this line +pub use graphene_std::Color; + +pub use wgpu_executor::Context as WgpuContext; +pub use wgpu_executor::WgpuExecutor; + +pub mod messages; +use messages::{DesktopFrontendMessage, DesktopWrapperMessage}; + +mod message_dispatcher; +use message_dispatcher::DesktopWrapperMessageDispatcher; + +mod handle_desktop_wrapper_message; +mod intercept_editor_message; +mod intercept_frontend_message; + +pub struct DesktopWrapper { + editor: Editor, +} + +impl DesktopWrapper { + pub fn new() -> Self { + Self { editor: Editor::new() } + } + + pub fn init(&self, wgpu_context: WgpuContext) { + let application_io = WasmApplicationIo::new_with_context(wgpu_context); + futures::executor::block_on(graphite_editor::node_graph_executor::replace_application_io(application_io)); + } + + pub fn dispatch(&mut self, message: DesktopWrapperMessage) -> Vec { + let mut executor = DesktopWrapperMessageDispatcher::new(&mut self.editor); + executor.queue_desktop_wrapper_message(message); + executor.execute() + } + + pub async fn execute_node_graph() -> NodeGraphExecutionResult { + let result = graphite_editor::node_graph_executor::run_node_graph().await; + match result { + (true, texture) => NodeGraphExecutionResult::HasRun(texture.map(|t| t.texture)), + (false, _) => NodeGraphExecutionResult::NotRun, + } + } +} + +impl Default for DesktopWrapper { + fn default() -> Self { + Self::new() + } +} + +pub enum NodeGraphExecutionResult { + HasRun(Option), + NotRun, +} + +pub fn deserialize_editor_message(data: &[u8]) -> Option { + if let Ok(string) = std::str::from_utf8(data) { + if let Ok(message) = ron::de::from_str::(string) { + Some(DesktopWrapperMessage::FromWeb(message.into())) + } else { + None + } + } else { + None + } +} + +pub fn serialize_frontend_messages(messages: Vec) -> Option> { + if let Ok(serialized) = ron::ser::to_string(&messages) { + Some(serialized.into_bytes()) + } else { + None + } +} diff --git a/desktop/wrapper/src/message_dispatcher.rs b/desktop/wrapper/src/message_dispatcher.rs new file mode 100644 index 0000000000..3c3852cf12 --- /dev/null +++ b/desktop/wrapper/src/message_dispatcher.rs @@ -0,0 +1,76 @@ +use graphite_editor::application::Editor; +use std::collections::VecDeque; + +use super::handle_desktop_wrapper_message::handle_desktop_wrapper_message; +use super::intercept_editor_message::intercept_editor_message; +use super::intercept_frontend_message::intercept_frontend_message; +use super::messages::{DesktopFrontendMessage, DesktopWrapperMessage, EditorMessage}; + +pub(crate) struct DesktopWrapperMessageDispatcher<'a> { + editor: &'a mut Editor, + desktop_wrapper_message_queue: VecDeque, + editor_message_queue: Vec, + responses: Vec, +} + +impl<'a> DesktopWrapperMessageDispatcher<'a> { + pub(crate) fn new(editor: &'a mut Editor) -> Self { + Self { + editor, + desktop_wrapper_message_queue: VecDeque::new(), + editor_message_queue: Vec::new(), + responses: Vec::new(), + } + } + + pub(crate) fn execute(mut self) -> Vec { + self.process_queue(); + self.responses + } + + pub(crate) fn queue_desktop_wrapper_message(&mut self, message: DesktopWrapperMessage) { + self.desktop_wrapper_message_queue.push_back(message); + } + + pub(super) fn queue_editor_message(&mut self, message: EditorMessage) { + if let Some(message) = intercept_editor_message(self, message) { + self.editor_message_queue.push(message); + } + } + + pub(super) fn respond(&mut self, response: DesktopFrontendMessage) { + self.responses.push(response); + } + + pub(super) fn poll_node_graph_evaluation(&mut self) { + let mut responses = VecDeque::new(); + if let Err(e) = self.editor.poll_node_graph_evaluation(&mut responses) { + if e != "No active document" { + tracing::error!("Error poling node graph: {}", e); + } + } + while let Some(message) = responses.pop_front() { + self.queue_editor_message(message); + } + } + + fn process_queue(&mut self) { + let mut frontend_messages = Vec::new(); + + while !self.desktop_wrapper_message_queue.is_empty() || !self.editor_message_queue.is_empty() { + while let Some(message) = self.desktop_wrapper_message_queue.pop_front() { + handle_desktop_wrapper_message(self, message); + } + let current_frontend_messages = self + .editor + .handle_message(EditorMessage::Batched { + messages: std::mem::take(&mut self.editor_message_queue).into_boxed_slice(), + }) + .into_iter() + .filter_map(|m| intercept_frontend_message(self, m)); + frontend_messages.extend(current_frontend_messages); + } + + self.respond(DesktopFrontendMessage::ToWeb(frontend_messages)); + } +} diff --git a/desktop/wrapper/src/messages.rs b/desktop/wrapper/src/messages.rs new file mode 100644 index 0000000000..dae7aaaa8e --- /dev/null +++ b/desktop/wrapper/src/messages.rs @@ -0,0 +1,72 @@ +use std::path::PathBuf; + +use graphite_editor::messages::prelude::{DocumentId, FrontendMessage}; + +pub(crate) use graphite_editor::messages::prelude::Message as EditorMessage; + +pub enum DesktopFrontendMessage { + ToWeb(Vec), + OpenFileDialog { + title: String, + filters: Vec, + context: OpenFileDialogContext, + }, + SaveFileDialog { + title: String, + default_filename: String, + default_folder: Option, + filters: Vec, + context: SaveFileDialogContext, + }, + WriteFile { + path: PathBuf, + content: Vec, + }, + OpenUrl(String), + UpdateViewportBounds { + x: f32, + y: f32, + width: f32, + height: f32, + }, + UpdateOverlays(vello::Scene), + UpdateWindowState { + maximized: bool, + minimized: bool, + }, + CloseWindow, +} + +pub struct FileFilter { + pub name: String, + pub extensions: Vec, +} + +pub enum DesktopWrapperMessage { + FromWeb(Box), + OpenFileDialogResult { path: PathBuf, content: Vec, context: OpenFileDialogContext }, + SaveFileDialogResult { path: PathBuf, context: SaveFileDialogContext }, + OpenDocument { path: PathBuf, content: Vec }, + OpenFile { path: PathBuf, content: Vec }, + ImportFile { path: PathBuf, content: Vec }, + ImportSvg { path: PathBuf, content: Vec }, + ImportImage { path: PathBuf, content: Vec }, + PollNodeGraphEvaluation, + UpdatePlatform(Platform), +} + +pub enum OpenFileDialogContext { + Document, + Import, +} + +pub enum SaveFileDialogContext { + Document { document_id: DocumentId, content: Vec }, + File { content: Vec }, +} + +pub enum Platform { + Windows, + Mac, + Linux, +} diff --git a/editor/Cargo.toml b/editor/Cargo.toml index a39aa5ef2e..ab21559791 100644 --- a/editor/Cargo.toml +++ b/editor/Cargo.toml @@ -12,20 +12,17 @@ license = "Apache-2.0" [features] default = ["wasm"] -wasm = ["wasm-bindgen", "graphene-std/wasm", "wasm-bindgen-futures"] +wasm = ["wasm-bindgen", "graphene-std/wasm"] gpu = ["interpreted-executor/gpu", "wgpu-executor"] -tauri = ["ron", "decouple-execution"] -decouple-execution = [] resvg = ["graphene-std/resvg"] vello = ["graphene-std/vello", "resvg"] -ron = ["dep:ron"] [dependencies] # Local dependencies graphite-proc-macros = { workspace = true } graph-craft = { workspace = true } interpreted-executor = { workspace = true } -graphene-std = { workspace = true } +graphene-std = { workspace = true } # NOTE: `graphene-core` should not be added here because `graphene-std` re-exports its contents preprocessor = { workspace = true } # Workspace dependencies @@ -35,7 +32,6 @@ bitflags = { workspace = true } thiserror = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } -bezier-rs = { workspace = true } kurbo = { workspace = true } futures = { workspace = true } glam = { workspace = true } @@ -46,17 +42,15 @@ num_enum = { workspace = true } usvg = { workspace = true } once_cell = { workspace = true } web-sys = { workspace = true } - -# Required dependencies -spin = "0.9.8" +vello = { workspace = true } +base64 = { workspace = true } +spin = { workspace = true } # Optional local dependencies wgpu-executor = { workspace = true, optional = true } # Optional workspace dependencies wasm-bindgen = { workspace = true, optional = true } -wasm-bindgen-futures = { workspace = true, optional = true } -ron = { workspace = true, optional = true } [dev-dependencies] # Workspace dependencies diff --git a/editor/src/consts.rs b/editor/src/consts.rs index 7c55c05a68..0fc75466f7 100644 --- a/editor/src/consts.rs +++ b/editor/src/consts.rs @@ -106,6 +106,7 @@ pub const HIDE_HANDLE_DISTANCE: f64 = 3.; pub const HANDLE_ROTATE_SNAP_ANGLE: f64 = 15.; pub const SEGMENT_INSERTION_DISTANCE: f64 = 5.; pub const SEGMENT_OVERLAY_SIZE: f64 = 10.; +pub const SEGMENT_SELECTED_THICKNESS: f64 = 3.; pub const HANDLE_LENGTH_FACTOR: f64 = 0.5; // PEN TOOL @@ -126,6 +127,9 @@ pub const POINT_RADIUS_HANDLE_SNAP_THRESHOLD: f64 = 8.; pub const POINT_RADIUS_HANDLE_SEGMENT_THRESHOLD: f64 = 7.9; pub const NUMBER_OF_POINTS_DIAL_SPOKE_EXTENSION: f64 = 1.2; pub const NUMBER_OF_POINTS_DIAL_SPOKE_LENGTH: f64 = 10.; +pub const ARC_SNAP_THRESHOLD: f64 = 5.; +pub const ARC_SWEEP_GIZMO_RADIUS: f64 = 14.; +pub const ARC_SWEEP_GIZMO_TEXT_HEIGHT: f64 = 12.; pub const GIZMO_HIDE_THRESHOLD: f64 = 20.; // SCROLLBARS @@ -146,10 +150,10 @@ pub const COLOR_OVERLAY_WHITE: &str = "#ffffff"; pub const COLOR_OVERLAY_BLACK_75: &str = "#000000bf"; // DOCUMENT +pub const FILE_EXTENSION: &str = "graphite"; pub const DEFAULT_DOCUMENT_NAME: &str = "Untitled Document"; -pub const FILE_SAVE_SUFFIX: &str = ".graphite"; pub const MAX_UNDO_HISTORY_LEN: usize = 100; // TODO: Add this to user preferences -pub const AUTO_SAVE_TIMEOUT_SECONDS: u64 = 15; +pub const AUTO_SAVE_TIMEOUT_SECONDS: u64 = 1; // INPUT pub const DOUBLE_CLICK_MILLISECONDS: u64 = 500; diff --git a/editor/src/dispatcher.rs b/editor/src/dispatcher.rs index ee098193c5..4601f4d386 100644 --- a/editor/src/dispatcher.rs +++ b/editor/src/dispatcher.rs @@ -1,11 +1,11 @@ use crate::messages::debug::utility_types::MessageLoggingVerbosity; +use crate::messages::defer::DeferMessageContext; use crate::messages::dialog::DialogMessageContext; use crate::messages::layout::layout_message_handler::LayoutMessageContext; use crate::messages::prelude::*; #[derive(Debug, Default)] pub struct Dispatcher { - buffered_queue: Option>>, message_queues: Vec>, pub responses: Vec, pub message_handlers: DispatcherMessageHandlers, @@ -14,8 +14,10 @@ pub struct Dispatcher { #[derive(Debug, Default)] pub struct DispatcherMessageHandlers { animation_message_handler: AnimationMessageHandler, + app_window_message_handler: AppWindowMessageHandler, broadcast_message_handler: BroadcastMessageHandler, debug_message_handler: DebugMessageHandler, + defer_message_handler: DeferMessageHandler, dialog_message_handler: DialogMessageHandler, globals_message_handler: GlobalsMessageHandler, input_preprocessor_message_handler: InputPreprocessorMessageHandler, @@ -24,7 +26,6 @@ pub struct DispatcherMessageHandlers { pub portfolio_message_handler: PortfolioMessageHandler, preferences_message_handler: PreferencesMessageHandler, tool_message_handler: ToolMessageHandler, - workspace_message_handler: WorkspaceMessageHandler, } impl DispatcherMessageHandlers { @@ -50,7 +51,10 @@ const SIDE_EFFECT_FREE_MESSAGES: &[MessageDiscriminant] = &[ MessageDiscriminant::Frontend(FrontendMessageDiscriminant::UpdateDocumentLayerStructure), MessageDiscriminant::Frontend(FrontendMessageDiscriminant::TriggerFontLoad), ]; -const DEBUG_MESSAGE_BLOCK_LIST: &[MessageDiscriminant] = &[MessageDiscriminant::Broadcast(BroadcastMessageDiscriminant::TriggerEvent(BroadcastEventDiscriminant::AnimationFrame))]; +const DEBUG_MESSAGE_BLOCK_LIST: &[MessageDiscriminant] = &[ + MessageDiscriminant::Broadcast(BroadcastMessageDiscriminant::TriggerEvent(EventMessageDiscriminant::AnimationFrame)), + MessageDiscriminant::Animation(AnimationMessageDiscriminant::IncrementFrameCounter), +]; // TODO: Find a way to combine these with the list above. We use strings for now since these are the standard variant names used by multiple messages. But having these also type-checked would be best. const DEBUG_MESSAGE_ENDING_BLOCK_LIST: &[&str] = &["PointerMove", "PointerOutsideViewport", "Overlays", "Draw", "CurrentTime", "Time"]; @@ -90,14 +94,6 @@ impl Dispatcher { pub fn handle_message>(&mut self, message: T, process_after_all_current: bool) { let message = message.into(); - // Add all additional messages to the buffer if it exists (except from the end buffer message) - if !matches!(message, Message::EndBuffer { .. }) { - if let Some(buffered_queue) = &mut self.buffered_queue { - Self::schedule_execution(buffered_queue, true, [message]); - - return; - } - } // If we are not maintaining the buffer, simply add to the current queue Self::schedule_execution(&mut self.message_queues, process_after_all_current, [message]); @@ -129,14 +125,24 @@ impl Dispatcher { Message::Animation(message) => { self.message_handlers.animation_message_handler.process_message(message, &mut queue, ()); } + Message::AppWindow(message) => { + self.message_handlers.app_window_message_handler.process_message(message, &mut queue, ()); + } Message::Broadcast(message) => self.message_handlers.broadcast_message_handler.process_message(message, &mut queue, ()), Message::Debug(message) => { self.message_handlers.debug_message_handler.process_message(message, &mut queue, ()); } + Message::Defer(message) => { + let context = DeferMessageContext { + portfolio: &self.message_handlers.portfolio_message_handler, + }; + self.message_handlers.defer_message_handler.process_message(message, &mut queue, context); + } Message::Dialog(message) => { let context = DialogMessageContext { portfolio: &self.message_handlers.portfolio_message_handler, preferences: &self.message_handlers.preferences_message_handler, + viewport_bounds: &self.message_handlers.input_preprocessor_message_handler.viewport_bounds, }; self.message_handlers.dialog_message_handler.process_message(message, &mut queue, context); } @@ -204,11 +210,14 @@ impl Dispatcher { self.message_handlers.preferences_message_handler.process_message(message, &mut queue, ()); } Message::Tool(message) => { - let document_id = self.message_handlers.portfolio_message_handler.active_document_id().unwrap(); - let Some(document) = self.message_handlers.portfolio_message_handler.documents.get_mut(&document_id) else { + let Some(document_id) = self.message_handlers.portfolio_message_handler.active_document_id() else { warn!("Called ToolMessage without an active document.\nGot {message:?}"); return; }; + let Some(document) = self.message_handlers.portfolio_message_handler.documents.get_mut(&document_id) else { + warn!("Called ToolMessage with an invalid active document.\nGot {message:?}"); + return; + }; let context = ToolMessageContext { document_id, @@ -221,44 +230,10 @@ impl Dispatcher { self.message_handlers.tool_message_handler.process_message(message, &mut queue, context); } - Message::Workspace(message) => { - self.message_handlers.workspace_message_handler.process_message(message, &mut queue, ()); - } Message::NoOp => {} Message::Batched { messages } => { messages.iter().for_each(|message| self.handle_message(message.to_owned(), false)); } - Message::StartBuffer => { - self.buffered_queue = Some(std::mem::take(&mut self.message_queues)); - } - Message::EndBuffer { render_metadata } => { - // Assign the message queue to the currently buffered queue - if let Some(buffered_queue) = self.buffered_queue.take() { - self.cleanup_queues(false); - assert!(self.message_queues.is_empty(), "message queues are always empty when ending a buffer"); - self.message_queues = buffered_queue; - }; - - let graphene_std::renderer::RenderMetadata { - upstream_footprints: footprints, - local_transforms, - first_instance_source_id, - click_targets, - clip_targets, - } = render_metadata; - - // Run these update state messages immediately - let messages = [ - DocumentMessage::UpdateUpstreamTransforms { - upstream_footprints: footprints, - local_transforms, - first_instance_source_id, - }, - DocumentMessage::UpdateClickTargets { click_targets }, - DocumentMessage::UpdateClipTargets { clip_targets }, - ]; - Self::schedule_execution(&mut self.message_queues, false, messages.map(Message::from)); - } } // If there are child messages, append the queue to the list of queues @@ -467,7 +442,7 @@ mod test { assert_eq!(layers_before_copy.len(), 3); assert_eq!(layers_after_copy.len(), 6); - println!("{:?} {:?}", layers_after_copy, layers_before_copy); + println!("{layers_after_copy:?} {layers_before_copy:?}"); assert_eq!(layers_after_copy[5], shape_id); } @@ -522,7 +497,8 @@ mod test { ); let responses = editor.editor.handle_message(PortfolioMessage::OpenDocumentFile { - document_name: document_name.into(), + document_name: Some(document_name.to_string()), + document_path: None, document_serialized_content, }); diff --git a/editor/src/messages/animation/animation_message.rs b/editor/src/messages/animation/animation_message.rs index 128cc70ea8..4b5aea386d 100644 --- a/editor/src/messages/animation/animation_message.rs +++ b/editor/src/messages/animation/animation_message.rs @@ -1,6 +1,5 @@ -use crate::messages::prelude::*; - use super::animation_message_handler::AnimationTimeMode; +use crate::messages::prelude::*; #[impl_message(Message, Animation)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] diff --git a/editor/src/messages/app_window/app_window_message.rs b/editor/src/messages/app_window/app_window_message.rs new file mode 100644 index 0000000000..d0631606cd --- /dev/null +++ b/editor/src/messages/app_window/app_window_message.rs @@ -0,0 +1,12 @@ +use crate::messages::prelude::*; + +use super::app_window_message_handler::AppWindowPlatform; + +#[impl_message(Message, AppWindow)] +#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] +pub enum AppWindowMessage { + AppWindowMinimize, + AppWindowMaximize, + AppWindowUpdatePlatform { platform: AppWindowPlatform }, + AppWindowClose, +} diff --git a/editor/src/messages/app_window/app_window_message_handler.rs b/editor/src/messages/app_window/app_window_message_handler.rs new file mode 100644 index 0000000000..db4036b506 --- /dev/null +++ b/editor/src/messages/app_window/app_window_message_handler.rs @@ -0,0 +1,52 @@ +use crate::messages::app_window::AppWindowMessage; +use crate::messages::prelude::*; +use graphite_proc_macros::{ExtractField, message_handler_data}; + +#[derive(Debug, Clone, Default, ExtractField)] +pub struct AppWindowMessageHandler { + platform: AppWindowPlatform, + maximized: bool, + minimized: bool, +} + +#[message_handler_data] +impl MessageHandler for AppWindowMessageHandler { + fn process_message(&mut self, message: AppWindowMessage, responses: &mut std::collections::VecDeque, _: ()) { + match message { + AppWindowMessage::AppWindowMaximize => { + self.maximized = !self.maximized; + responses.add(FrontendMessage::UpdateWindowState { + maximized: self.maximized, + minimized: self.minimized, + }); + } + AppWindowMessage::AppWindowMinimize => { + self.minimized = !self.minimized; + responses.add(FrontendMessage::UpdateWindowState { + maximized: self.maximized, + minimized: self.minimized, + }); + } + AppWindowMessage::AppWindowUpdatePlatform { platform } => { + self.platform = platform; + responses.add(FrontendMessage::UpdatePlatform { platform: self.platform }); + } + AppWindowMessage::AppWindowClose => { + responses.add(FrontendMessage::CloseWindow); + } + } + } + + fn actions(&self) -> ActionList { + actions!(AppWindowMessageDiscriminant;) + } +} + +#[derive(PartialEq, Eq, Clone, Copy, Default, Debug, serde::Serialize, serde::Deserialize, specta::Type)] +pub enum AppWindowPlatform { + #[default] + Web, + Windows, + Mac, + Linux, +} diff --git a/editor/src/messages/app_window/mod.rs b/editor/src/messages/app_window/mod.rs new file mode 100644 index 0000000000..414a6d903e --- /dev/null +++ b/editor/src/messages/app_window/mod.rs @@ -0,0 +1,7 @@ +mod app_window_message; +pub mod app_window_message_handler; + +#[doc(inline)] +pub use app_window_message::{AppWindowMessage, AppWindowMessageDiscriminant}; +#[doc(inline)] +pub use app_window_message_handler::AppWindowMessageHandler; diff --git a/editor/src/messages/broadcast/broadcast_message.rs b/editor/src/messages/broadcast/broadcast_message.rs index 984d4e56a0..35e49981ab 100644 --- a/editor/src/messages/broadcast/broadcast_message.rs +++ b/editor/src/messages/broadcast/broadcast_message.rs @@ -5,15 +5,15 @@ use crate::messages::prelude::*; pub enum BroadcastMessage { // Sub-messages #[child] - TriggerEvent(BroadcastEvent), + TriggerEvent(EventMessage), // Messages SubscribeEvent { - on: BroadcastEvent, + on: EventMessage, send: Box, }, UnsubscribeEvent { - on: BroadcastEvent, - message: Box, + on: EventMessage, + send: Box, }, } diff --git a/editor/src/messages/broadcast/broadcast_message_handler.rs b/editor/src/messages/broadcast/broadcast_message_handler.rs index 29d75f5cb6..2d6bbb0063 100644 --- a/editor/src/messages/broadcast/broadcast_message_handler.rs +++ b/editor/src/messages/broadcast/broadcast_message_handler.rs @@ -2,7 +2,8 @@ use crate::messages::prelude::*; #[derive(Debug, Clone, Default, ExtractField)] pub struct BroadcastMessageHandler { - listeners: HashMap>, + event: EventMessageHandler, + listeners: HashMap>, } #[message_handler_data] @@ -10,19 +11,15 @@ impl MessageHandler for BroadcastMessageHandler { fn process_message(&mut self, message: BroadcastMessage, responses: &mut VecDeque, _: ()) { match message { // Sub-messages - BroadcastMessage::TriggerEvent(event) => { - for message in self.listeners.entry(event).or_default() { - responses.add_front(message.clone()) - } - } + BroadcastMessage::TriggerEvent(message) => self.event.process_message(message, responses, EventMessageContext { listeners: &mut self.listeners }), // Messages BroadcastMessage::SubscribeEvent { on, send } => self.listeners.entry(on).or_default().push(*send), - BroadcastMessage::UnsubscribeEvent { on, message } => self.listeners.entry(on).or_default().retain(|msg| *msg != *message), + BroadcastMessage::UnsubscribeEvent { on, send } => self.listeners.entry(on).or_default().retain(|msg| *msg != *send), } } fn actions(&self) -> ActionList { - actions!(BroadcastEventDiscriminant;) + actions!(EventMessageDiscriminant;) } } diff --git a/editor/src/messages/broadcast/broadcast_event.rs b/editor/src/messages/broadcast/event/event_message.rs similarity index 92% rename from editor/src/messages/broadcast/broadcast_event.rs rename to editor/src/messages/broadcast/event/event_message.rs index ebe2318aae..b2c77111d3 100644 --- a/editor/src/messages/broadcast/broadcast_event.rs +++ b/editor/src/messages/broadcast/event/event_message.rs @@ -1,8 +1,8 @@ use crate::messages::prelude::*; -#[derive(PartialEq, Eq, Clone, Debug, serde::Serialize, serde::Deserialize, Hash)] #[impl_message(Message, BroadcastMessage, TriggerEvent)] -pub enum BroadcastEvent { +#[derive(PartialEq, Eq, Clone, Debug, serde::Serialize, serde::Deserialize, Hash)] +pub enum EventMessage { /// Triggered by requestAnimationFrame in JS AnimationFrame, CanvasTransformed, diff --git a/editor/src/messages/broadcast/event/event_message_handler.rs b/editor/src/messages/broadcast/event/event_message_handler.rs new file mode 100644 index 0000000000..c8d0170d06 --- /dev/null +++ b/editor/src/messages/broadcast/event/event_message_handler.rs @@ -0,0 +1,22 @@ +use crate::messages::prelude::*; + +#[derive(ExtractField)] +pub struct EventMessageContext<'a> { + pub listeners: &'a mut HashMap>, +} + +#[derive(Debug, Clone, Default, ExtractField)] +pub struct EventMessageHandler {} + +#[message_handler_data] +impl MessageHandler> for EventMessageHandler { + fn process_message(&mut self, message: EventMessage, responses: &mut VecDeque, context: EventMessageContext) { + for message in context.listeners.entry(message).or_default() { + responses.add_front(message.clone()) + } + } + + fn actions(&self) -> ActionList { + actions!(EventMessageDiscriminant;) + } +} diff --git a/editor/src/messages/broadcast/event/mod.rs b/editor/src/messages/broadcast/event/mod.rs new file mode 100644 index 0000000000..36913e5ad6 --- /dev/null +++ b/editor/src/messages/broadcast/event/mod.rs @@ -0,0 +1,7 @@ +mod event_message; +mod event_message_handler; + +#[doc(inline)] +pub use event_message::{EventMessage, EventMessageDiscriminant}; +#[doc(inline)] +pub use event_message_handler::{EventMessageContext, EventMessageHandler}; diff --git a/editor/src/messages/broadcast/mod.rs b/editor/src/messages/broadcast/mod.rs index a6ecb88979..e95de4a79b 100644 --- a/editor/src/messages/broadcast/mod.rs +++ b/editor/src/messages/broadcast/mod.rs @@ -1,7 +1,7 @@ mod broadcast_message; mod broadcast_message_handler; -pub mod broadcast_event; +pub mod event; #[doc(inline)] pub use broadcast_message::{BroadcastMessage, BroadcastMessageDiscriminant}; diff --git a/editor/src/messages/defer/defer_message.rs b/editor/src/messages/defer/defer_message.rs new file mode 100644 index 0000000000..c1b699a70a --- /dev/null +++ b/editor/src/messages/defer/defer_message.rs @@ -0,0 +1,11 @@ +use crate::messages::prelude::*; + +#[impl_message(Message, Defer)] +#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] +pub enum DeferMessage { + SetGraphSubmissionIndex { execution_id: u64 }, + TriggerGraphRun { execution_id: u64, document_id: DocumentId }, + AfterGraphRun { messages: Vec }, + TriggerNavigationReady, + AfterNavigationReady { messages: Vec }, +} diff --git a/editor/src/messages/defer/defer_message_handler.rs b/editor/src/messages/defer/defer_message_handler.rs new file mode 100644 index 0000000000..a1c4907ecd --- /dev/null +++ b/editor/src/messages/defer/defer_message_handler.rs @@ -0,0 +1,57 @@ +use crate::messages::prelude::*; + +#[derive(ExtractField)] +pub struct DeferMessageContext<'a> { + pub portfolio: &'a PortfolioMessageHandler, +} + +#[derive(Debug, Default, ExtractField)] +pub struct DeferMessageHandler { + after_graph_run: HashMap>, + after_viewport_resize: Vec, + current_graph_submission_id: u64, +} + +#[message_handler_data] +impl MessageHandler> for DeferMessageHandler { + fn process_message(&mut self, message: DeferMessage, responses: &mut VecDeque, context: DeferMessageContext) { + match message { + DeferMessage::AfterGraphRun { mut messages } => { + let after_graph_run = self.after_graph_run.entry(context.portfolio.active_document_id.unwrap_or(DocumentId(0))).or_default(); + after_graph_run.extend(messages.drain(..).map(|m| (self.current_graph_submission_id, m))); + responses.add(NodeGraphMessage::RunDocumentGraph); + } + DeferMessage::AfterNavigationReady { messages } => { + self.after_viewport_resize.extend_from_slice(&messages); + } + DeferMessage::SetGraphSubmissionIndex { execution_id } => { + self.current_graph_submission_id = execution_id + 1; + } + DeferMessage::TriggerGraphRun { execution_id, document_id } => { + let after_graph_run = self.after_graph_run.entry(document_id).or_default(); + if after_graph_run.is_empty() { + return; + } + // Find the index of the last message we can process + let split = after_graph_run.partition_point(|&(id, _)| id <= execution_id); + let elements = after_graph_run.drain(..split); + for (_, message) in elements.rev() { + responses.add_front(message); + } + for (&document_id, messages) in self.after_graph_run.iter() { + if !messages.is_empty() { + responses.add(PortfolioMessage::SubmitGraphRender { document_id, ignore_hash: false }); + } + } + } + DeferMessage::TriggerNavigationReady => { + for message in self.after_viewport_resize.drain(..).rev() { + responses.add_front(message); + } + } + } + } + + advertise_actions!(DeferMessageDiscriminant; + ); +} diff --git a/editor/src/messages/defer/mod.rs b/editor/src/messages/defer/mod.rs new file mode 100644 index 0000000000..3a7b0b3f74 --- /dev/null +++ b/editor/src/messages/defer/mod.rs @@ -0,0 +1,7 @@ +mod defer_message; +mod defer_message_handler; + +#[doc(inline)] +pub use defer_message::{DeferMessage, DeferMessageDiscriminant}; +#[doc(inline)] +pub use defer_message_handler::{DeferMessageContext, DeferMessageHandler}; diff --git a/editor/src/messages/dialog/dialog_message.rs b/editor/src/messages/dialog/dialog_message.rs index baee1e6582..435b83d819 100644 --- a/editor/src/messages/dialog/dialog_message.rs +++ b/editor/src/messages/dialog/dialog_message.rs @@ -33,6 +33,9 @@ pub enum DialogMessage { RequestLicensesDialogWithLocalizedCommitDate { localized_commit_year: String, }, + RequestLicensesThirdPartyDialogWithLicenseText { + license_text: String, + }, RequestNewDocumentDialog, RequestPreferencesDialog, } diff --git a/editor/src/messages/dialog/dialog_message_handler.rs b/editor/src/messages/dialog/dialog_message_handler.rs index 0853abc045..42f17a22e2 100644 --- a/editor/src/messages/dialog/dialog_message_handler.rs +++ b/editor/src/messages/dialog/dialog_message_handler.rs @@ -1,10 +1,14 @@ +use super::new_document_dialog::NewDocumentDialogMessageContext; use super::simple_dialogs::{self, AboutGraphiteDialog, ComingSoonDialog, DemoArtworkDialog, LicensesDialog}; +use crate::messages::dialog::simple_dialogs::LicensesThirdPartyDialog; +use crate::messages::input_mapper::utility_types::input_mouse::ViewportBounds; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::prelude::*; #[derive(ExtractField)] pub struct DialogMessageContext<'a> { pub portfolio: &'a PortfolioMessageHandler, + pub viewport_bounds: &'a ViewportBounds, pub preferences: &'a PreferencesMessageHandler, } @@ -19,11 +23,15 @@ pub struct DialogMessageHandler { #[message_handler_data] impl MessageHandler> for DialogMessageHandler { fn process_message(&mut self, message: DialogMessage, responses: &mut VecDeque, context: DialogMessageContext) { - let DialogMessageContext { portfolio, preferences } = context; + let DialogMessageContext { + portfolio, + preferences, + viewport_bounds, + } = context; match message { DialogMessage::ExportDialog(message) => self.export_dialog.process_message(message, responses, ExportDialogMessageContext { portfolio }), - DialogMessage::NewDocumentDialog(message) => self.new_document_dialog.process_message(message, responses, ()), + DialogMessage::NewDocumentDialog(message) => self.new_document_dialog.process_message(message, responses, NewDocumentDialogMessageContext { viewport_bounds }), DialogMessage::PreferencesDialog(message) => self.preferences_dialog.process_message(message, responses, PreferencesDialogMessageContext { preferences }), DialogMessage::CloseAllDocumentsWithConfirmation => { @@ -96,6 +104,10 @@ impl MessageHandler> for DialogMessageHa dialog.send_dialog_to_frontend(responses); } + DialogMessage::RequestLicensesThirdPartyDialogWithLicenseText { license_text } => { + let dialog = LicensesThirdPartyDialog { license_text }; + dialog.send_dialog_to_frontend(responses); + } DialogMessage::RequestNewDocumentDialog => { self.new_document_dialog = NewDocumentDialogMessageHandler { name: portfolio.generate_new_document_name(), diff --git a/editor/src/messages/dialog/export_dialog/export_dialog_message.rs b/editor/src/messages/dialog/export_dialog/export_dialog_message.rs index 20b0f8486a..c33d94f368 100644 --- a/editor/src/messages/dialog/export_dialog/export_dialog_message.rs +++ b/editor/src/messages/dialog/export_dialog/export_dialog_message.rs @@ -4,10 +4,10 @@ use crate::messages::prelude::*; #[impl_message(Message, DialogMessage, ExportDialog)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] pub enum ExportDialogMessage { - FileType(FileType), - ScaleFactor(f64), - TransparentBackground(bool), - ExportBounds(ExportBounds), + FileType { file_type: FileType }, + ScaleFactor { factor: f64 }, + TransparentBackground { transparent: bool }, + ExportBounds { bounds: ExportBounds }, Submit, } diff --git a/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs b/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs index 980f3e3e25..7f549999a4 100644 --- a/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs +++ b/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs @@ -38,13 +38,13 @@ impl MessageHandler> for Exp let ExportDialogMessageContext { portfolio } = context; match message { - ExportDialogMessage::FileType(export_type) => self.file_type = export_type, - ExportDialogMessage::ScaleFactor(factor) => self.scale_factor = factor, - ExportDialogMessage::TransparentBackground(transparent_background) => self.transparent_background = transparent_background, - ExportDialogMessage::ExportBounds(export_area) => self.bounds = export_area, + ExportDialogMessage::FileType { file_type } => self.file_type = file_type, + ExportDialogMessage::ScaleFactor { factor } => self.scale_factor = factor, + ExportDialogMessage::TransparentBackground { transparent } => self.transparent_background = transparent, + ExportDialogMessage::ExportBounds { bounds } => self.bounds = bounds, ExportDialogMessage::Submit => responses.add_front(PortfolioMessage::SubmitDocumentExport { - file_name: portfolio.active_document().map(|document| document.name.clone()).unwrap_or_default(), + name: portfolio.active_document().map(|document| document.name.clone()).unwrap_or_default(), file_type: self.file_type, scale_factor: self.scale_factor, bounds: self.bounds, @@ -84,24 +84,28 @@ impl LayoutHolder for ExportDialogMessageHandler { fn layout(&self) -> Layout { let entries = [(FileType::Png, "PNG"), (FileType::Jpg, "JPG"), (FileType::Svg, "SVG")] .into_iter() - .map(|(val, name)| RadioEntryData::new(format!("{val:?}")).label(name).on_update(move |_| ExportDialogMessage::FileType(val).into())) + .map(|(file_type, name)| { + RadioEntryData::new(format!("{file_type:?}")) + .label(name) + .on_update(move |_| ExportDialogMessage::FileType { file_type }.into()) + }) .collect(); let export_type = vec![ - TextLabel::new("File Type").table_align(true).min_width(100).widget_holder(), + TextLabel::new("File Type").table_align(true).min_width("100px").widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), RadioInput::new(entries).selected_index(Some(self.file_type as u32)).widget_holder(), ]; let resolution = vec![ - TextLabel::new("Scale Factor").table_align(true).min_width(100).widget_holder(), + TextLabel::new("Scale Factor").table_align(true).min_width("100px").widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), NumberInput::new(Some(self.scale_factor)) .unit("") .min(0.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) .disabled(self.file_type == FileType::Svg) - .on_update(|number_input: &NumberInput| ExportDialogMessage::ScaleFactor(number_input.value.unwrap()).into()) + .on_update(|number_input: &NumberInput| ExportDialogMessage::ScaleFactor { factor: number_input.value.unwrap() }.into()) .min_width(200) .widget_holder(), ]; @@ -111,24 +115,24 @@ impl LayoutHolder for ExportDialogMessageHandler { (ExportBounds::Selection, "Selection".to_string(), !self.has_selection), ]; let artboards = self.artboards.iter().map(|(&layer, name)| (ExportBounds::Artboard(layer), name.to_string(), false)).collect(); - let groups = [standard_bounds, artboards]; + let choices = [standard_bounds, artboards]; let current_bounds = if !self.has_selection && self.bounds == ExportBounds::Selection { ExportBounds::AllArtwork } else { self.bounds }; - let index = groups.iter().flatten().position(|(bounds, _, _)| *bounds == current_bounds).unwrap(); + let index = choices.iter().flatten().position(|(bounds, _, _)| *bounds == current_bounds).unwrap(); - let mut entries = groups + let mut entries = choices .into_iter() - .map(|group| { - group + .map(|choice| { + choice .into_iter() - .map(|(val, name, disabled)| { - MenuListEntry::new(format!("{val:?}")) + .map(|(bounds, name, disabled)| { + MenuListEntry::new(format!("{bounds:?}")) .label(name) - .on_commit(move |_| ExportDialogMessage::ExportBounds(val).into()) + .on_commit(move |_| ExportDialogMessage::ExportBounds { bounds }.into()) .disabled(disabled) }) .collect::>() @@ -140,19 +144,19 @@ impl LayoutHolder for ExportDialogMessageHandler { } let export_area = vec![ - TextLabel::new("Bounds").table_align(true).min_width(100).widget_holder(), + TextLabel::new("Bounds").table_align(true).min_width("100px").widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), DropdownInput::new(entries).selected_index(Some(index as u32)).widget_holder(), ]; - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); let transparent_background = vec![ - TextLabel::new("Transparency").table_align(true).min_width(100).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Transparency").table_align(true).min_width("100px").for_checkbox(checkbox_id).widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), CheckboxInput::new(self.transparent_background) .disabled(self.file_type == FileType::Jpg) - .on_update(move |value: &CheckboxInput| ExportDialogMessage::TransparentBackground(value.checked).into()) - .for_label(checkbox_id.clone()) + .on_update(move |value: &CheckboxInput| ExportDialogMessage::TransparentBackground { transparent: value.checked }.into()) + .for_label(checkbox_id) .widget_holder(), ]; diff --git a/editor/src/messages/dialog/new_document_dialog/mod.rs b/editor/src/messages/dialog/new_document_dialog/mod.rs index c179de74d1..cf9f7455da 100644 --- a/editor/src/messages/dialog/new_document_dialog/mod.rs +++ b/editor/src/messages/dialog/new_document_dialog/mod.rs @@ -4,4 +4,4 @@ mod new_document_dialog_message_handler; #[doc(inline)] pub use new_document_dialog_message::{NewDocumentDialogMessage, NewDocumentDialogMessageDiscriminant}; #[doc(inline)] -pub use new_document_dialog_message_handler::NewDocumentDialogMessageHandler; +pub use new_document_dialog_message_handler::{NewDocumentDialogMessageContext, NewDocumentDialogMessageHandler}; diff --git a/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message.rs b/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message.rs index 26502196c5..21774de336 100644 --- a/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message.rs +++ b/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message.rs @@ -3,10 +3,10 @@ use crate::messages::prelude::*; #[impl_message(Message, DialogMessage, NewDocumentDialog)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] pub enum NewDocumentDialogMessage { - Name(String), - Infinite(bool), - DimensionsX(f64), - DimensionsY(f64), + Name { name: String }, + Infinite { infinite: bool }, + DimensionsX { width: f64 }, + DimensionsY { height: f64 }, Submit, } diff --git a/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message_handler.rs b/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message_handler.rs index 6121424de3..5d3ae881f5 100644 --- a/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message_handler.rs +++ b/editor/src/messages/dialog/new_document_dialog/new_document_dialog_message_handler.rs @@ -1,8 +1,13 @@ -use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::prelude::*; +use crate::messages::{input_mapper::utility_types::input_mouse::ViewportBounds, layout::utility_types::widget_prelude::*}; use glam::{IVec2, UVec2}; use graph_craft::document::NodeId; +#[derive(ExtractField)] +pub struct NewDocumentDialogMessageContext<'a> { + pub viewport_bounds: &'a ViewportBounds, +} + /// A dialog to allow users to set some initial options about a new document. #[derive(Debug, Clone, Default, ExtractField)] pub struct NewDocumentDialogMessageHandler { @@ -12,30 +17,34 @@ pub struct NewDocumentDialogMessageHandler { } #[message_handler_data] -impl MessageHandler for NewDocumentDialogMessageHandler { - fn process_message(&mut self, message: NewDocumentDialogMessage, responses: &mut VecDeque, _: ()) { +impl<'a> MessageHandler> for NewDocumentDialogMessageHandler { + fn process_message(&mut self, message: NewDocumentDialogMessage, responses: &mut VecDeque, context: NewDocumentDialogMessageContext<'a>) { match message { - NewDocumentDialogMessage::Name(name) => self.name = name, - NewDocumentDialogMessage::Infinite(infinite) => self.infinite = infinite, - NewDocumentDialogMessage::DimensionsX(x) => self.dimensions.x = x as u32, - NewDocumentDialogMessage::DimensionsY(y) => self.dimensions.y = y as u32, + NewDocumentDialogMessage::Name { name } => self.name = name, + NewDocumentDialogMessage::Infinite { infinite } => self.infinite = infinite, + NewDocumentDialogMessage::DimensionsX { width } => self.dimensions.x = width as u32, + NewDocumentDialogMessage::DimensionsY { height } => self.dimensions.y = height as u32, NewDocumentDialogMessage::Submit => { responses.add(PortfolioMessage::NewDocumentWithName { name: self.name.clone() }); let create_artboard = !self.infinite && self.dimensions.x > 0 && self.dimensions.y > 0; if create_artboard { - responses.add(Message::StartBuffer); responses.add(GraphOperationMessage::NewArtboard { id: NodeId::new(), artboard: graphene_std::Artboard::new(IVec2::ZERO, self.dimensions.as_ivec2()), }); + responses.add(NavigationMessage::CanvasPan { delta: self.dimensions.as_dvec2() }); + responses.add(NodeGraphMessage::RunDocumentGraph); + // If we already have bounds, we won't receive a viewport bounds update so we just fabricate one ourselves + if *context.viewport_bounds != ViewportBounds::default() { + responses.add(InputPreprocessorMessage::BoundsOfViewports { + bounds_of_viewports: vec![context.viewport_bounds.clone()], + }); + } + responses.add(DeferMessage::AfterNavigationReady { + messages: vec![DocumentMessage::ZoomCanvasToFitAll.into(), DocumentMessage::DeselectAllLayers.into()], + }); } - - // TODO: Figure out how to get StartBuffer to work here so we can delete this and use `DocumentMessage::ZoomCanvasToFitAll` instead - // Currently, it is necessary to use `FrontendMessage::TriggerDelayedZoomCanvasToFitAll` rather than `DocumentMessage::ZoomCanvasToFitAll` because the size of the viewport is not yet populated - responses.add(Message::StartBuffer); - responses.add(FrontendMessage::TriggerDelayedZoomCanvasToFitAll); - responses.add(DocumentMessage::DeselectAllLayers); } } @@ -70,26 +79,26 @@ impl DialogLayoutHolder for NewDocumentDialogMessageHandler { impl LayoutHolder for NewDocumentDialogMessageHandler { fn layout(&self) -> Layout { let name = vec![ - TextLabel::new("Name").table_align(true).min_width(90).widget_holder(), + TextLabel::new("Name").table_align(true).min_width("90px").widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), TextInput::new(&self.name) - .on_update(|text_input: &TextInput| NewDocumentDialogMessage::Name(text_input.value.clone()).into()) + .on_update(|text_input: &TextInput| NewDocumentDialogMessage::Name { name: text_input.value.clone() }.into()) .min_width(204) // Matches the 100px of both NumberInputs below + the 4px of the Unrelated-type separator .widget_holder(), ]; - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); let infinite = vec![ - TextLabel::new("Infinite Canvas").table_align(true).min_width(90).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Infinite Canvas").table_align(true).min_width("90px").for_checkbox(checkbox_id).widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), CheckboxInput::new(self.infinite) - .on_update(|checkbox_input: &CheckboxInput| NewDocumentDialogMessage::Infinite(checkbox_input.checked).into()) - .for_label(checkbox_id.clone()) + .on_update(|checkbox_input: &CheckboxInput| NewDocumentDialogMessage::Infinite { infinite: checkbox_input.checked }.into()) + .for_label(checkbox_id) .widget_holder(), ]; let scale = vec![ - TextLabel::new("Dimensions").table_align(true).min_width(90).widget_holder(), + TextLabel::new("Dimensions").table_align(true).min_width("90px").widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), NumberInput::new(Some(self.dimensions.x as f64)) .label("W") @@ -99,7 +108,7 @@ impl LayoutHolder for NewDocumentDialogMessageHandler { .is_integer(true) .disabled(self.infinite) .min_width(100) - .on_update(|number_input: &NumberInput| NewDocumentDialogMessage::DimensionsX(number_input.value.unwrap()).into()) + .on_update(|number_input: &NumberInput| NewDocumentDialogMessage::DimensionsX { width: number_input.value.unwrap() }.into()) .widget_holder(), Separator::new(SeparatorType::Related).widget_holder(), NumberInput::new(Some(self.dimensions.y as f64)) @@ -110,7 +119,7 @@ impl LayoutHolder for NewDocumentDialogMessageHandler { .is_integer(true) .disabled(self.infinite) .min_width(100) - .on_update(|number_input: &NumberInput| NewDocumentDialogMessage::DimensionsY(number_input.value.unwrap()).into()) + .on_update(|number_input: &NumberInput| NewDocumentDialogMessage::DimensionsY { height: number_input.value.unwrap() }.into()) .widget_holder(), ]; diff --git a/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs b/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs index 66173d8898..26bbd4c2b8 100644 --- a/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs +++ b/editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs @@ -68,7 +68,7 @@ impl PreferencesDialogMessageHandler { .widget_holder(), ]; - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); let zoom_with_scroll_tooltip = "Use the scroll wheel for zooming instead of vertically panning (not recommended for trackpads)"; let zoom_with_scroll = vec![ Separator::new(SeparatorType::Unrelated).widget_holder(), @@ -81,12 +81,12 @@ impl PreferencesDialogMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), TextLabel::new("Zoom with Scroll") .table_align(true) .tooltip(zoom_with_scroll_tooltip) - .for_checkbox(&mut checkbox_id) + .for_checkbox(checkbox_id) .widget_holder(), ]; @@ -169,7 +169,7 @@ impl PreferencesDialogMessageHandler { graph_wire_style, ]; - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); let vello_tooltip = "Use the experimental Vello renderer (your browser must support WebGPU)"; let use_vello = vec![ Separator::new(SeparatorType::Unrelated).widget_holder(), @@ -178,17 +178,17 @@ impl PreferencesDialogMessageHandler { .tooltip(vello_tooltip) .disabled(!preferences.supports_wgpu()) .on_update(|checkbox_input: &CheckboxInput| PreferencesMessage::UseVello { use_vello: checkbox_input.checked }.into()) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), TextLabel::new("Vello Renderer") .table_align(true) .tooltip(vello_tooltip) .disabled(!preferences.supports_wgpu()) - .for_checkbox(&mut checkbox_id) + .for_checkbox(checkbox_id) .widget_holder(), ]; - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); let vector_mesh_tooltip = "Allow tools to produce vector meshes, where more than two segments can connect to an anchor point.\n\nCurrently this does not properly handle stroke joins and fills."; let vector_meshes = vec![ @@ -197,13 +197,9 @@ impl PreferencesDialogMessageHandler { CheckboxInput::new(preferences.vector_meshes) .tooltip(vector_mesh_tooltip) .on_update(|checkbox_input: &CheckboxInput| PreferencesMessage::VectorMeshes { enabled: checkbox_input.checked }.into()) - .for_label(checkbox_id.clone()) - .widget_holder(), - TextLabel::new("Vector Meshes") - .table_align(true) - .tooltip(vector_mesh_tooltip) - .for_checkbox(&mut checkbox_id) + .for_label(checkbox_id) .widget_holder(), + TextLabel::new("Vector Meshes").table_align(true).tooltip(vector_mesh_tooltip).for_checkbox(checkbox_id).widget_holder(), ]; Layout::WidgetLayout(WidgetLayout::new(vec![ diff --git a/editor/src/messages/dialog/simple_dialogs/close_document_dialog.rs b/editor/src/messages/dialog/simple_dialogs/close_document_dialog.rs index d370b2fde8..90c43bf9e7 100644 --- a/editor/src/messages/dialog/simple_dialogs/close_document_dialog.rs +++ b/editor/src/messages/dialog/simple_dialogs/close_document_dialog.rs @@ -1,4 +1,4 @@ -use crate::messages::broadcast::broadcast_event::BroadcastEvent; +use crate::messages::broadcast::event::EventMessage; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::prelude::*; @@ -27,7 +27,7 @@ impl DialogLayoutHolder for CloseDocumentDialog { TextButton::new("Discard") .on_update(move |_| { DialogMessage::CloseDialogAndThen { - followups: vec![BroadcastEvent::ToolAbort.into(), PortfolioMessage::CloseDocument { document_id }.into()], + followups: vec![EventMessage::ToolAbort.into(), PortfolioMessage::CloseDocument { document_id }.into()], } .into() }) diff --git a/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs b/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs index 694a9986d5..cebb43e9f3 100644 --- a/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs +++ b/editor/src/messages/dialog/simple_dialogs/licenses_dialog.rs @@ -16,22 +16,31 @@ impl DialogLayoutHolder for LicensesDialog { } fn layout_column_2(&self) -> Layout { - let icons_license_link = "https://raw.githubusercontent.com/GraphiteEditor/Graphite/master/frontend/assets/LICENSE.md"; - let links = [ - ("GraphiteLogo", "Graphite Logo", "https://graphite.rs/logo/"), - ("IconsGrid", "Graphite Icons", icons_license_link), - ("License", "Graphite License", "https://graphite.rs/license/"), - ("License", "Other Licenses", "/third-party-licenses.txt"), + #[allow(clippy::type_complexity)] + let button_definitions: &[(&str, &str, fn() -> Message)] = &[ + ("GraphiteLogo", "Graphite Logo", || { + FrontendMessage::TriggerVisitLink { + url: "https://graphite.rs/logo/".into(), + } + .into() + }), + ("IconsGrid", "Graphite Icons", || { + FrontendMessage::TriggerVisitLink { + url: "https://raw.githubusercontent.com/GraphiteEditor/Graphite/master/frontend/assets/LICENSE.md".into(), + } + .into() + }), + ("License", "Graphite License", || { + FrontendMessage::TriggerVisitLink { + url: "https://graphite.rs/license/".into(), + } + .into() + }), + ("License", "Other Licenses", || FrontendMessage::TriggerDisplayThirdPartyLicensesDialog.into()), ]; - let widgets = links - .into_iter() - .map(|(icon, label, url)| { - TextButton::new(label) - .icon(Some(icon.into())) - .flush(true) - .on_update(|_| FrontendMessage::TriggerVisitLink { url: url.into() }.into()) - .widget_holder() - }) + let widgets = button_definitions + .iter() + .map(|&(icon, label, message_factory)| TextButton::new(label).icon(Some((icon).into())).flush(true).on_update(move |_| message_factory()).widget_holder()) .collect(); Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Column { widgets }])) diff --git a/editor/src/messages/dialog/simple_dialogs/licenses_third_party_dialog.rs b/editor/src/messages/dialog/simple_dialogs/licenses_third_party_dialog.rs new file mode 100644 index 0000000000..4078f7a5cb --- /dev/null +++ b/editor/src/messages/dialog/simple_dialogs/licenses_third_party_dialog.rs @@ -0,0 +1,44 @@ +use crate::messages::layout::utility_types::widget_prelude::*; +use crate::messages::prelude::*; + +pub struct LicensesThirdPartyDialog { + pub license_text: String, +} + +impl DialogLayoutHolder for LicensesThirdPartyDialog { + const ICON: &'static str = "License12px"; + const TITLE: &'static str = "Third-Party Software License Notices"; + + fn layout_buttons(&self) -> Layout { + let widgets = vec![TextButton::new("OK").emphasized(true).on_update(|_| FrontendMessage::DisplayDialogDismiss.into()).widget_holder()]; + + Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Row { widgets }])) + } +} + +impl LayoutHolder for LicensesThirdPartyDialog { + fn layout(&self) -> Layout { + // Remove the header and begin with the line containing the first license section (we otherwise keep the title for standalone viewing of the licenses text file) + let license_text = if let Some(first_underscore_line) = self.license_text.lines().position(|line| line.contains('_')) { + // Find the byte position where the line with underscore starts + let char_position = self.license_text.split('\n').take(first_underscore_line).map(|line| line.len() + '\n'.len_utf8()).sum(); + self.license_text[char_position..].to_string() + } else { + // This shouldn't be encountered, but if no underscore line is found, we use the full text as a safety fallback + self.license_text.clone() + }; + + // Two characters (one before, one after) the sequence of underscore characters, plus one additional column to provide a space between the text and the scrollbar + let non_wrapping_column_width = license_text.split('\n').map(|line| line.chars().filter(|&c| c == '_').count()).max().unwrap_or(0) + 2 + 1; + + Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Row { + widgets: vec![ + TextLabel::new(license_text) + .monospace(true) + .multiline(true) + .min_width(format!("{non_wrapping_column_width}ch")) + .widget_holder(), + ], + }])) + } +} diff --git a/editor/src/messages/dialog/simple_dialogs/mod.rs b/editor/src/messages/dialog/simple_dialogs/mod.rs index a330efac20..181b3bf1b3 100644 --- a/editor/src/messages/dialog/simple_dialogs/mod.rs +++ b/editor/src/messages/dialog/simple_dialogs/mod.rs @@ -5,6 +5,7 @@ mod coming_soon_dialog; mod demo_artwork_dialog; mod error_dialog; mod licenses_dialog; +mod licenses_third_party_dialog; pub use about_graphite_dialog::AboutGraphiteDialog; pub use close_all_documents_dialog::CloseAllDocumentsDialog; @@ -14,3 +15,4 @@ pub use demo_artwork_dialog::ARTWORK; pub use demo_artwork_dialog::DemoArtworkDialog; pub use error_dialog::ErrorDialog; pub use licenses_dialog::LicensesDialog; +pub use licenses_third_party_dialog::LicensesThirdPartyDialog; diff --git a/editor/src/messages/frontend/frontend_message.rs b/editor/src/messages/frontend/frontend_message.rs index c24ebc405c..4a63e1a859 100644 --- a/editor/src/messages/frontend/frontend_message.rs +++ b/editor/src/messages/frontend/frontend_message.rs @@ -1,4 +1,5 @@ use super::utility_types::{FrontendDocumentDetails, MouseCursorIcon}; +use crate::messages::app_window::app_window_message_handler::AppWindowPlatform; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::node_graph::utility_types::{ BoxSelection, ContextMenuInformation, FrontendClickTargets, FrontendGraphInput, FrontendGraphOutput, FrontendNode, FrontendNodeType, Transform, @@ -7,12 +8,19 @@ use crate::messages::portfolio::document::utility_types::nodes::{JsRawBuffer, La use crate::messages::portfolio::document::utility_types::wires::{WirePath, WirePathUpdate}; use crate::messages::prelude::*; use crate::messages::tool::utility_types::HintData; +use glam::IVec2; use graph_craft::document::NodeId; +use graphene_std::raster::Image; use graphene_std::raster::color::Color; -use graphene_std::text::Font; +use graphene_std::text::{Font, TextAlign}; +use std::path::PathBuf; + +#[cfg(not(target_family = "wasm"))] +use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; #[impl_message(Message, Frontend)] -#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] +#[derive(derivative::Derivative, Clone, serde::Serialize, serde::Deserialize, specta::Type)] +#[derivative(Debug, PartialEq)] pub enum FrontendMessage { // Display prefix: make the frontend show something, like a dialog DisplayDialog { @@ -37,6 +45,7 @@ pub enum FrontendMessage { max_width: Option, #[serde(rename = "maxHeight")] max_height: Option, + align: TextAlign, }, DisplayEditableTextboxTransform { transform: [f64; 6], @@ -56,17 +65,23 @@ pub enum FrontendMessage { #[serde(rename = "commitDate")] commit_date: String, }, - TriggerDelayedZoomCanvasToFitAll, - TriggerDownloadImage { + TriggerDisplayThirdPartyLicensesDialog, + TriggerSaveDocument { + document_id: DocumentId, + name: String, + path: Option, + content: Vec, + }, + TriggerSaveFile { + name: String, + content: Vec, + }, + TriggerExportImage { svg: String, name: String, mime: String, size: (f64, f64), }, - TriggerDownloadTextFile { - document: String, - name: String, - }, TriggerFetchAndOpenDocument { name: String, filename: String, @@ -110,12 +125,19 @@ pub enum FrontendMessage { document_id: DocumentId, }, UpdateImportsExports { - imports: Vec<(FrontendGraphOutput, i32, i32)>, - exports: Vec<(FrontendGraphInput, i32, i32)>, - #[serde(rename = "addImport")] - add_import: Option<(i32, i32)>, - #[serde(rename = "addExport")] - add_export: Option<(i32, i32)>, + /// If the primary import is not visible, then it is None. + imports: Vec>, + /// If the primary export is not visible, then it is None. + exports: Vec>, + /// The primary import location. + #[serde(rename = "importPosition")] + import_position: IVec2, + /// The primary export location. + #[serde(rename = "exportPosition")] + export_position: IVec2, + /// The document network does not have an add import or export button. + #[serde(rename = "addImportExport")] + add_import_export: bool, }, UpdateInSelectedNetwork { #[serde(rename = "inSelectedNetwork")] @@ -136,11 +158,16 @@ pub enum FrontendMessage { UpdateGraphViewOverlay { open: bool, }, - UpdateSpreadsheetState { + UpdateDataPanelState { open: bool, - node: Option, }, - UpdateSpreadsheetLayout { + UpdatePropertiesPanelState { + open: bool, + }, + UpdateLayersPanelState { + open: bool, + }, + UpdateDataPanelLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, @@ -179,6 +206,9 @@ pub enum FrontendMessage { UpdateDocumentArtwork { svg: String, }, + UpdateImageData { + image_data: Vec<(u64, Image)>, + }, UpdateDocumentBarLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, @@ -280,7 +310,7 @@ pub enum FrontendMessage { #[serde(rename = "openDocuments")] open_documents: Vec, }, - UpdatePropertyPanelSectionsLayout { + UpdatePropertiesPanelLayout { #[serde(rename = "layoutTarget")] layout_target: LayoutTarget, diff: Vec, @@ -304,4 +334,21 @@ pub enum FrontendMessage { layout_target: LayoutTarget, diff: Vec, }, + UpdatePlatform { + platform: AppWindowPlatform, + }, + UpdateWindowState { + maximized: bool, + minimized: bool, + }, + CloseWindow, + UpdateViewportHolePunch { + active: bool, + }, + #[cfg(not(target_family = "wasm"))] + RenderOverlays { + #[serde(skip, default = "OverlayContext::default")] + #[derivative(Debug = "ignore", PartialEq = "ignore")] + context: OverlayContext, + }, } diff --git a/editor/src/messages/input_mapper/input_mappings.rs b/editor/src/messages/input_mapper/input_mappings.rs index 71fb27a01c..8284de4faf 100644 --- a/editor/src/messages/input_mapper/input_mappings.rs +++ b/editor/src/messages/input_mapper/input_mappings.rs @@ -96,7 +96,7 @@ pub fn input_mappings() -> Mapping { entry!(PointerMove; refresh_keys=[Control, Shift], action_dispatch=TransformLayerMessage::PointerMove { slow_key: Shift, increments_key: Control }), // // SelectToolMessage - entry!(PointerMove; refresh_keys=[Control, Alt, Shift], action_dispatch=SelectToolMessage::PointerMove(SelectToolPointerKeys { axis_align: Shift, snap_angle: Shift, center: Alt, duplicate: Alt })), + entry!(PointerMove; refresh_keys=[Control, Alt, Shift], action_dispatch=SelectToolMessage::PointerMove { modifier_keys: SelectToolPointerKeys { axis_align: Shift, snap_angle: Shift, center: Alt, duplicate: Alt } }), entry!(KeyDown(MouseLeft); action_dispatch=SelectToolMessage::DragStart { extend_selection: Shift, remove_from_selection: Alt, select_deepest: Accel, lasso_select: Control, skew: Control }), entry!(KeyUp(MouseLeft); action_dispatch=SelectToolMessage::DragStop { remove_from_selection: Alt }), entry!(KeyDown(Enter); action_dispatch=SelectToolMessage::Enter), @@ -178,7 +178,7 @@ pub fn input_mappings() -> Mapping { entry!(KeyDown(Escape); action_dispatch=ShapeToolMessage::Abort), entry!(KeyDown(BracketLeft); action_dispatch=ShapeToolMessage::DecreaseSides), entry!(KeyDown(BracketRight); action_dispatch=ShapeToolMessage::IncreaseSides), - entry!(PointerMove; refresh_keys=[Alt, Shift, Control], action_dispatch=ShapeToolMessage::PointerMove([Alt, Shift, Control, Shift])), + entry!(PointerMove; refresh_keys=[Alt, Shift, Control], action_dispatch=ShapeToolMessage::PointerMove { modifier: [Alt, Shift, Control] }), entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowLeft], action_dispatch=ShapeToolMessage::NudgeSelectedLayers { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, resize: Alt, resize_opposite_corner: Control }), entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowRight], action_dispatch=ShapeToolMessage::NudgeSelectedLayers { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, resize: Alt, resize_opposite_corner: Control }), entry!(KeyDown(ArrowUp); modifiers=[Shift], action_dispatch=ShapeToolMessage::NudgeSelectedLayers { delta_x: 0., delta_y: -BIG_NUDGE_AMOUNT, resize: Alt, resize_opposite_corner: Control }), @@ -211,18 +211,21 @@ pub fn input_mappings() -> Mapping { entry!(KeyDown(Backspace); modifiers=[Accel], action_dispatch=PathToolMessage::DeleteAndBreakPath), entry!(KeyDown(Delete); modifiers=[Shift], action_dispatch=PathToolMessage::BreakPath), entry!(KeyDown(Backspace); modifiers=[Shift], action_dispatch=PathToolMessage::BreakPath), + entry!(KeyDown(KeyX); modifiers=[Accel], action_dispatch=PathToolMessage::Cut { clipboard: Clipboard::Device }), + entry!(KeyDown(KeyC); modifiers=[Accel], action_dispatch=PathToolMessage::Copy { clipboard: Clipboard::Device }), + entry!(KeyDown(KeyD); modifiers=[Accel], action_dispatch=PathToolMessage::Duplicate), entry!(KeyDownNoRepeat(Tab); action_dispatch=PathToolMessage::SwapSelectedHandles), - entry!(KeyDown(MouseLeft); action_dispatch=PathToolMessage::MouseDown { extend_selection: Shift, lasso_select: Control, handle_drag_from_anchor: Alt, drag_restore_handle: Control, molding_in_segment_edit: KeyA }), + entry!(KeyDown(MouseLeft); action_dispatch=PathToolMessage::MouseDown { extend_selection: Shift, lasso_select: Control, handle_drag_from_anchor: Alt, drag_restore_handle: Control, segment_editing_modifier: Control }), entry!(KeyDown(MouseRight); action_dispatch=PathToolMessage::RightClick), entry!(KeyDown(Escape); action_dispatch=PathToolMessage::Escape), entry!(KeyDown(KeyG); action_dispatch=PathToolMessage::GRS { key: KeyG }), entry!(KeyDown(KeyR); action_dispatch=PathToolMessage::GRS { key: KeyR }), entry!(KeyDown(KeyS); action_dispatch=PathToolMessage::GRS { key: KeyS }), - entry!(PointerMove; refresh_keys=[KeyC, Space, Control, Shift, Alt], action_dispatch=PathToolMessage::PointerMove { toggle_colinear: KeyC, equidistant: Alt, move_anchor_with_handles: Space, snap_angle: Shift, lock_angle: Control, delete_segment: Alt, break_colinear_molding: Alt }), + entry!(PointerMove; refresh_keys=[KeyC, Space, Control, Shift, Alt], action_dispatch=PathToolMessage::PointerMove { toggle_colinear: KeyC, equidistant: Alt, move_anchor_with_handles: Space, snap_angle: Shift, lock_angle: Control, delete_segment: Alt, break_colinear_molding: Alt, segment_editing_modifier: Control }), entry!(KeyDown(Delete); action_dispatch=PathToolMessage::Delete), - entry!(KeyDown(KeyA); modifiers=[Accel], action_dispatch=PathToolMessage::SelectAllAnchors), - entry!(KeyDown(KeyA); modifiers=[Accel, Shift], canonical, action_dispatch=PathToolMessage::DeselectAllPoints), - entry!(KeyDown(KeyA); modifiers=[Alt], action_dispatch=PathToolMessage::DeselectAllPoints), + entry!(KeyDown(KeyA); modifiers=[Accel], action_dispatch=PathToolMessage::SelectAll), + entry!(KeyDown(KeyA); modifiers=[Accel, Shift], canonical, action_dispatch=PathToolMessage::DeselectAllSelected), + entry!(KeyDown(KeyA); modifiers=[Alt], action_dispatch=PathToolMessage::DeselectAllSelected), entry!(KeyDown(Backspace); action_dispatch=PathToolMessage::Delete), entry!(KeyUp(MouseLeft); action_dispatch=PathToolMessage::DragStop { extend_selection: Shift, shrink_selection: Alt }), entry!(KeyDown(Enter); action_dispatch=PathToolMessage::Enter { extend_selection: Shift, shrink_selection: Alt }), @@ -294,8 +297,8 @@ pub fn input_mappings() -> Mapping { entry!(PointerMove; action_dispatch=BrushToolMessage::PointerMove), entry!(KeyDown(MouseLeft); action_dispatch=BrushToolMessage::DragStart), entry!(KeyUp(MouseLeft); action_dispatch=BrushToolMessage::DragStop), - entry!(KeyDown(BracketLeft); action_dispatch=BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::ChangeDiameter(-BRUSH_SIZE_CHANGE_KEYBOARD))), - entry!(KeyDown(BracketRight); action_dispatch=BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::ChangeDiameter(BRUSH_SIZE_CHANGE_KEYBOARD))), + entry!(KeyDown(BracketLeft); action_dispatch=BrushToolMessage::UpdateOptions { options: BrushToolMessageOptionsUpdate::ChangeDiameter(-BRUSH_SIZE_CHANGE_KEYBOARD) }), + entry!(KeyDown(BracketRight); action_dispatch=BrushToolMessage::UpdateOptions { options: BrushToolMessageOptionsUpdate::ChangeDiameter(BRUSH_SIZE_CHANGE_KEYBOARD) }), entry!(KeyDown(MouseRight); action_dispatch=BrushToolMessage::Abort), entry!(KeyDown(Escape); action_dispatch=BrushToolMessage::Abort), // @@ -337,6 +340,7 @@ pub fn input_mappings() -> Mapping { entry!(KeyDown(KeyA); modifiers=[Accel, Shift], canonical, action_dispatch=DocumentMessage::DeselectAllLayers), entry!(KeyDown(KeyA); modifiers=[Alt], action_dispatch=DocumentMessage::DeselectAllLayers), entry!(KeyDown(KeyS); modifiers=[Accel], action_dispatch=DocumentMessage::SaveDocument), + entry!(KeyDown(KeyS); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::SaveDocumentAs), entry!(KeyDown(KeyD); modifiers=[Accel], canonical, action_dispatch=DocumentMessage::DuplicateSelectedLayers), entry!(KeyDown(KeyJ); modifiers=[Accel], action_dispatch=DocumentMessage::DuplicateSelectedLayers), entry!(KeyDown(KeyG); modifiers=[Accel], action_dispatch=DocumentMessage::GroupSelectedLayers { group_folder_type: GroupFolderType::Layer }), @@ -424,6 +428,7 @@ pub fn input_mappings() -> Mapping { entry!(KeyDown(KeyX); modifiers=[Accel], action_dispatch=PortfolioMessage::Cut { clipboard: Clipboard::Device }), entry!(KeyDown(KeyC); modifiers=[Accel], action_dispatch=PortfolioMessage::Copy { clipboard: Clipboard::Device }), entry!(KeyDown(KeyR); modifiers=[Alt], action_dispatch=PortfolioMessage::ToggleRulers), + entry!(KeyDown(KeyD); modifiers=[Alt], action_dispatch=PortfolioMessage::ToggleDataPanelOpen), // // FrontendMessage entry!(KeyDown(KeyV); modifiers=[Accel], action_dispatch=FrontendMessage::TriggerPaste), diff --git a/editor/src/messages/input_mapper/key_mapping/key_mapping_message.rs b/editor/src/messages/input_mapper/key_mapping/key_mapping_message.rs index 95cb5cc57f..3214864da6 100644 --- a/editor/src/messages/input_mapper/key_mapping/key_mapping_message.rs +++ b/editor/src/messages/input_mapper/key_mapping/key_mapping_message.rs @@ -3,13 +3,16 @@ use crate::messages::prelude::*; #[impl_message(Message, KeyMapping)] #[derive(PartialEq, Eq, Clone, Debug, Hash, serde::Serialize, serde::Deserialize)] pub enum KeyMappingMessage { + // Sub-messages #[child] Lookup(InputMapperMessage), - #[child] - ModifyMapping(MappingVariant), + + // Messages + ModifyMapping { + mapping: MappingVariant, + }, } -#[impl_message(Message, KeyMappingMessage, ModifyMapping)] #[derive(PartialEq, Eq, Clone, Debug, Default, Hash, serde::Serialize, serde::Deserialize)] pub enum MappingVariant { #[default] diff --git a/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs b/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs index 605f2587f6..4d40a9ebbe 100644 --- a/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs +++ b/editor/src/messages/input_mapper/key_mapping/key_mapping_message_handler.rs @@ -19,8 +19,11 @@ impl MessageHandler> for KeyMapp let KeyMappingMessageContext { input, actions } = context; match message { + // Sub-messages KeyMappingMessage::Lookup(input_message) => self.mapping_handler.process_message(input_message, responses, InputMapperMessageContext { input, actions }), - KeyMappingMessage::ModifyMapping(new_layout) => self.mapping_handler.set_mapping(new_layout.into()), + + // Messages + KeyMappingMessage::ModifyMapping { mapping } => self.mapping_handler.set_mapping(mapping.into()), } } advertise_actions!(); diff --git a/editor/src/messages/input_mapper/key_mapping/mod.rs b/editor/src/messages/input_mapper/key_mapping/mod.rs index 064b585090..255b00cdd2 100644 --- a/editor/src/messages/input_mapper/key_mapping/mod.rs +++ b/editor/src/messages/input_mapper/key_mapping/mod.rs @@ -2,6 +2,6 @@ mod key_mapping_message; mod key_mapping_message_handler; #[doc(inline)] -pub use key_mapping_message::{KeyMappingMessage, KeyMappingMessageDiscriminant, MappingVariant, MappingVariantDiscriminant}; +pub use key_mapping_message::{KeyMappingMessage, KeyMappingMessageDiscriminant, MappingVariant}; #[doc(inline)] pub use key_mapping_message_handler::{KeyMappingMessageContext, KeyMappingMessageHandler}; diff --git a/editor/src/messages/input_mapper/utility_types/input_keyboard.rs b/editor/src/messages/input_mapper/utility_types/input_keyboard.rs index 99a267550a..5528d4386a 100644 --- a/editor/src/messages/input_mapper/utility_types/input_keyboard.rs +++ b/editor/src/messages/input_mapper/utility_types/input_keyboard.rs @@ -479,7 +479,7 @@ impl Iterator for BitVectorIter<'_, LENGTH> { impl Display for BitVector { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { for storage in self.0.iter().rev() { - write!(f, "{:0width$b}", storage, width = STORAGE_SIZE_BITS)?; + write!(f, "{storage:0STORAGE_SIZE_BITS$b}")?; } Ok(()) diff --git a/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs b/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs index 1a8962d974..52e20d1d7b 100644 --- a/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs +++ b/editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs @@ -36,6 +36,14 @@ impl MessageHandler f responses.add(NavigationMessage::CanvasPan { delta: DVec2::ZERO }); responses.add(NodeGraphMessage::SetGridAlignedEdges); } + responses.add(DeferMessage::AfterGraphRun { + messages: vec![ + DeferMessage::AfterGraphRun { + messages: vec![DeferMessage::TriggerNavigationReady.into()], + } + .into(), + ], + }); } InputPreprocessorMessage::DoubleClick { editor_mouse_state, modifier_keys } => { self.update_states_of_modifier_keys(modifier_keys, keyboard_platform, responses); diff --git a/editor/src/messages/layout/layout_message_handler.rs b/editor/src/messages/layout/layout_message_handler.rs index f0fcb7939a..a7e0ab96a6 100644 --- a/editor/src/messages/layout/layout_message_handler.rs +++ b/editor/src/messages/layout/layout_message_handler.rs @@ -59,8 +59,8 @@ impl LayoutMessageHandler { /// Get the widget path for the widget with the specified id fn get_widget_path(widget_layout: &WidgetLayout, widget_id: WidgetId) -> Option<(&WidgetHolder, Vec)> { let mut stack = widget_layout.layout.iter().enumerate().map(|(index, val)| (vec![index], val)).collect::>(); - while let Some((mut widget_path, group)) = stack.pop() { - match group { + while let Some((mut widget_path, layout_group)) = stack.pop() { + match layout_group { // Check if any of the widgets in the current column or row have the correct id LayoutGroup::Column { widgets } | LayoutGroup::Row { widgets } => { for (index, widget) in widgets.iter().enumerate() { @@ -308,6 +308,7 @@ impl LayoutMessageHandler { responses.add(callback_message); } + Widget::ImageLabel(_) => {} Widget::IconLabel(_) => {} Widget::InvisibleStandinInput(invisible) => { let callback_message = match action { @@ -481,18 +482,18 @@ impl LayoutMessageHandler { diff.iter_mut().for_each(|diff| diff.new_value.apply_keyboard_shortcut(action_input_mapping)); let message = match layout_target { + LayoutTarget::MenuBar => unreachable!("Menu bar is not diffed"), LayoutTarget::DialogButtons => FrontendMessage::UpdateDialogButtons { layout_target, diff }, LayoutTarget::DialogColumn1 => FrontendMessage::UpdateDialogColumn1 { layout_target, diff }, LayoutTarget::DialogColumn2 => FrontendMessage::UpdateDialogColumn2 { layout_target, diff }, LayoutTarget::DocumentBar => FrontendMessage::UpdateDocumentBarLayout { layout_target, diff }, LayoutTarget::DocumentMode => FrontendMessage::UpdateDocumentModeLayout { layout_target, diff }, + LayoutTarget::DataPanel => FrontendMessage::UpdateDataPanelLayout { layout_target, diff }, LayoutTarget::LayersPanelControlLeftBar => FrontendMessage::UpdateLayersPanelControlBarLeftLayout { layout_target, diff }, LayoutTarget::LayersPanelControlRightBar => FrontendMessage::UpdateLayersPanelControlBarRightLayout { layout_target, diff }, LayoutTarget::LayersPanelBottomBar => FrontendMessage::UpdateLayersPanelBottomBarLayout { layout_target, diff }, - LayoutTarget::MenuBar => unreachable!("Menu bar is not diffed"), + LayoutTarget::PropertiesPanel => FrontendMessage::UpdatePropertiesPanelLayout { layout_target, diff }, LayoutTarget::NodeGraphControlBar => FrontendMessage::UpdateNodeGraphControlBarLayout { layout_target, diff }, - LayoutTarget::PropertiesSections => FrontendMessage::UpdatePropertyPanelSectionsLayout { layout_target, diff }, - LayoutTarget::Spreadsheet => FrontendMessage::UpdateSpreadsheetLayout { layout_target, diff }, LayoutTarget::ToolOptions => FrontendMessage::UpdateToolOptionsLayout { layout_target, diff }, LayoutTarget::ToolShelf => FrontendMessage::UpdateToolShelfLayout { layout_target, diff }, LayoutTarget::WorkingColors => FrontendMessage::UpdateWorkingColorsLayout { layout_target, diff }, diff --git a/editor/src/messages/layout/utility_types/layout_widget.rs b/editor/src/messages/layout/utility_types/layout_widget.rs index 9efccb1f83..fa2eebf0ad 100644 --- a/editor/src/messages/layout/utility_types/layout_widget.rs +++ b/editor/src/messages/layout/utility_types/layout_widget.rs @@ -42,9 +42,9 @@ pub enum LayoutTarget { /// Bar at the top of the node graph containing the location and the "Preview" and "Hide" buttons. NodeGraphControlBar, /// The body of the Properties panel containing many collapsable sections. - PropertiesSections, + PropertiesPanel, /// The spredsheet panel allows for the visualisation of data in the graph. - Spreadsheet, + DataPanel, /// The bar directly above the canvas, left-aligned and to the right of the document mode dropdown. ToolOptions, /// The vertical buttons for all of the tools on the left of the canvas. @@ -369,6 +369,7 @@ impl LayoutGroup { Widget::IconButton(x) => &mut x.tooltip, Widget::IconLabel(x) => &mut x.tooltip, Widget::ImageButton(x) => &mut x.tooltip, + Widget::ImageLabel(x) => &mut x.tooltip, Widget::NumberInput(x) => &mut x.tooltip, Widget::ParameterExposeButton(x) => &mut x.tooltip, Widget::PopoverButton(x) => &mut x.tooltip, @@ -546,6 +547,7 @@ pub enum Widget { IconButton(IconButton), IconLabel(IconLabel), ImageButton(ImageButton), + ImageLabel(ImageLabel), InvisibleStandinInput(InvisibleStandinInput), NodeCatalog(NodeCatalog), NumberInput(NumberInput), @@ -622,6 +624,7 @@ impl DiffUpdate { Widget::TextButton(widget) => Some((&mut widget.tooltip, &mut widget.tooltip_shortcut)), Widget::ImageButton(widget) => Some((&mut widget.tooltip, &mut widget.tooltip_shortcut)), Widget::IconLabel(_) + | Widget::ImageLabel(_) | Widget::CurveInput(_) | Widget::InvisibleStandinInput(_) | Widget::NodeCatalog(_) @@ -653,7 +656,7 @@ impl DiffUpdate { }; match self { - Self::SubLayout(sub_layout) => sub_layout.iter_mut().flat_map(|group| group.iter_mut()).for_each(convert_tooltip), + Self::SubLayout(sub_layout) => sub_layout.iter_mut().flat_map(|layout_group| layout_group.iter_mut()).for_each(convert_tooltip), Self::LayoutGroup(layout_group) => layout_group.iter_mut().for_each(convert_tooltip), Self::Widget(widget_holder) => convert_tooltip(widget_holder), } diff --git a/editor/src/messages/layout/utility_types/widgets/button_widgets.rs b/editor/src/messages/layout/utility_types/widgets/button_widgets.rs index 54fbc92056..3698bf3bc0 100644 --- a/editor/src/messages/layout/utility_types/widgets/button_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/button_widgets.rs @@ -168,8 +168,6 @@ pub struct ColorInput { #[widget_builder(constructor)] pub value: FillChoice, - pub disabled: bool, - // TODO: Implement // #[serde(rename = "allowTransparency")] // #[derivative(Default(value = "false"))] @@ -179,9 +177,11 @@ pub struct ColorInput { #[derivative(Default(value = "true"))] pub allow_none: bool, - // TODO: Implement - // pub disabled: bool, - // + pub disabled: bool, + + #[serde(rename = "menuDirection")] + pub menu_direction: Option, + pub tooltip: String, #[serde(skip)] diff --git a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs index 983e7804fd..11b3b46f0a 100644 --- a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs @@ -5,8 +5,6 @@ use graphene_std::Color; use graphene_std::raster::curve::Curve; use graphene_std::transform::ReferencePoint; use graphite_proc_macros::WidgetBuilder; -use once_cell::sync::OnceCell; -use std::sync::Arc; #[derive(Clone, Derivative, serde::Serialize, serde::Deserialize, WidgetBuilder, specta::Type)] #[derivative(Debug, PartialEq)] @@ -20,7 +18,7 @@ pub struct CheckboxInput { pub tooltip: String, - #[serde(rename = "forLabel", skip_serializing_if = "checkbox_id_is_empty")] + #[serde(rename = "forLabel")] pub for_label: CheckboxId, #[serde(skip)] @@ -44,19 +42,24 @@ impl Default for CheckboxInput { icon: "Checkmark".into(), tooltip: Default::default(), tooltip_shortcut: Default::default(), - for_label: CheckboxId::default(), + for_label: CheckboxId::new(), on_update: Default::default(), on_commit: Default::default(), } } } -#[derive(Clone, Default, Debug, Eq, PartialEq)] -pub struct CheckboxId(Arc>); +#[derive(Copy, Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct CheckboxId(u64); impl CheckboxId { - pub fn fill(&mut self) { - let _ = self.0.set(graphene_std::uuid::generate_uuid()); + pub fn new() -> Self { + Self(graphene_std::uuid::generate_uuid()) + } +} +impl Default for CheckboxId { + fn default() -> Self { + Self::new() } } impl specta::Type for CheckboxId { @@ -65,29 +68,6 @@ impl specta::Type for CheckboxId { specta::datatype::DataType::Primitive(specta::datatype::PrimitiveType::u64) } } -impl serde::Serialize for CheckboxId { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - self.0.get().copied().serialize(serializer) - } -} -impl<'a> serde::Deserialize<'a> for CheckboxId { - fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'a>, - { - let id = u64::deserialize(deserializer)?; - let checkbox_id = CheckboxId(OnceCell::new().into()); - checkbox_id.0.set(id).map_err(serde::de::Error::custom)?; - Ok(checkbox_id) - } -} - -fn checkbox_id_is_empty(id: &CheckboxId) -> bool { - id.0.get().is_none() -} #[derive(Clone, serde::Serialize, serde::Deserialize, Derivative, WidgetBuilder, specta::Type)] #[derivative(Debug, PartialEq, Default)] @@ -436,6 +416,9 @@ pub struct TextInput { #[serde(rename = "minWidth")] pub min_width: u32, + #[serde(rename = "maxWidth")] + pub max_width: u32, + // Callbacks #[serde(skip)] #[derivative(Debug = "ignore", PartialEq = "ignore")] diff --git a/editor/src/messages/layout/utility_types/widgets/label_widgets.rs b/editor/src/messages/layout/utility_types/widgets/label_widgets.rs index caeca5a4e1..174bc58691 100644 --- a/editor/src/messages/layout/utility_types/widgets/label_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/label_widgets.rs @@ -44,34 +44,40 @@ pub struct TextLabel { pub italic: bool, + pub monospace: bool, + + pub multiline: bool, + #[serde(rename = "centerAlign")] pub center_align: bool, #[serde(rename = "tableAlign")] pub table_align: bool, - pub multiline: bool, - #[serde(rename = "minWidth")] - pub min_width: u32, + pub min_width: String, pub tooltip: String, - #[serde(rename = "checkboxId")] - #[widget_builder(skip)] - pub checkbox_id: CheckboxId, + #[serde(rename = "forCheckbox")] + pub for_checkbox: CheckboxId, // Body #[widget_builder(constructor)] pub value: String, } -impl TextLabel { - pub fn for_checkbox(mut self, id: &mut CheckboxId) -> Self { - id.fill(); - self.checkbox_id = id.clone(); - self - } +#[derive(Clone, serde::Serialize, serde::Deserialize, Derivative, Default, WidgetBuilder, specta::Type)] +#[derivative(Debug, PartialEq)] +pub struct ImageLabel { + #[widget_builder(constructor)] + pub url: String, + + pub width: Option, + + pub height: Option, + + pub tooltip: String, } // TODO: Add UserInputLabel diff --git a/editor/src/messages/message.rs b/editor/src/messages/message.rs index 18023c1b6c..b23d530e29 100644 --- a/editor/src/messages/message.rs +++ b/editor/src/messages/message.rs @@ -1,5 +1,4 @@ use crate::messages::prelude::*; -use graphene_std::renderer::RenderMetadata; use graphite_proc_macros::*; #[impl_message] @@ -9,10 +8,14 @@ pub enum Message { #[child] Animation(AnimationMessage), #[child] + AppWindow(AppWindowMessage), + #[child] Broadcast(BroadcastMessage), #[child] Debug(DebugMessage), #[child] + Defer(DeferMessage), + #[child] Dialog(DialogMessage), #[child] Frontend(FrontendMessage), @@ -30,18 +33,12 @@ pub enum Message { Preferences(PreferencesMessage), #[child] Tool(ToolMessage), - #[child] - Workspace(WorkspaceMessage), // Messages - NoOp, Batched { messages: Box<[Message]>, }, - StartBuffer, - EndBuffer { - render_metadata: RenderMetadata, - }, + NoOp, } /// Provides an impl of `specta::Type` for `MessageDiscriminant`, the struct created by `impl_message`. @@ -72,14 +69,12 @@ mod test { fn print_tree_node(tree: &DebugMessageTree, prefix: &str, is_last: bool, file: &mut std::fs::File) { // Print the current node - let (branch, child_prefix) = if tree.has_message_handler_data_fields() || tree.has_message_handler_fields() { - ("โ”œโ”€โ”€ ", format!("{}โ”‚ ", prefix)) + let (branch, child_prefix) = if tree.message_handler_data_fields().is_some() || tree.message_handler_fields().is_some() { + ("โ”œโ”€โ”€ ", format!("{prefix}โ”‚ ")) + } else if is_last { + ("โ””โ”€โ”€ ", format!("{prefix} ")) } else { - if is_last { - ("โ””โ”€โ”€ ", format!("{} ", prefix)) - } else { - ("โ”œโ”€โ”€ ", format!("{}โ”‚ ", prefix)) - } + ("โ”œโ”€โ”€ ", format!("{prefix}โ”‚ ")) }; if tree.path().is_empty() { @@ -97,24 +92,38 @@ mod test { } } - // Print handler field if any - if let Some(data) = tree.message_handler_fields() { - let len = data.fields().len(); - let (branch, child_prefix) = if tree.has_message_handler_data_fields() { - ("โ”œโ”€โ”€ ", format!("{}โ”‚ ", prefix)) - } else { - ("โ””โ”€โ”€ ", format!("{} ", prefix)) - }; - if data.path().is_empty() { - file.write_all(format!("{}{}{}\n", prefix, branch, data.name()).as_bytes()).unwrap(); - } else { - file.write_all(format!("{}{}{} `{}`\n", prefix, branch, data.name(), data.path()).as_bytes()).unwrap(); - } - for (i, field) in data.fields().iter().enumerate() { + // Print message field if any + if let Some(fields) = tree.fields() { + let len = fields.len(); + for (i, field) in fields.iter().enumerate() { let is_last_field = i == len - 1; let branch = if is_last_field { "โ””โ”€โ”€ " } else { "โ”œโ”€โ”€ " }; - file.write_all(format!("{}{}{}\n", child_prefix, branch, field.0).as_bytes()).unwrap(); + file.write_all(format!("{child_prefix}{branch}{field}\n").as_bytes()).unwrap(); + } + } + + // Print handler field if any + if let Some(data) = tree.message_handler_fields() { + let len = data.fields().len(); + let (branch, child_prefix) = if tree.message_handler_data_fields().is_some() { + ("โ”œโ”€โ”€ ", format!("{prefix}โ”‚ ")) + } else { + ("โ””โ”€โ”€ ", format!("{prefix} ")) + }; + + const FRONTEND_MESSAGE_STR: &str = "FrontendMessage"; + if data.name().is_empty() && tree.name() != FRONTEND_MESSAGE_STR { + panic!("{}'s MessageHandler is missing #[message_handler_data]", tree.name()); + } else if tree.name() != FRONTEND_MESSAGE_STR { + file.write_all(format!("{}{}{} `{}`\n", prefix, branch, data.name(), data.path()).as_bytes()).unwrap(); + + for (i, field) in data.fields().iter().enumerate() { + let is_last_field = i == len - 1; + let branch = if is_last_field { "โ””โ”€โ”€ " } else { "โ”œโ”€โ”€ " }; + + file.write_all(format!("{}{}{}\n", child_prefix, branch, field.0).as_bytes()).unwrap(); + } } } diff --git a/editor/src/messages/mod.rs b/editor/src/messages/mod.rs index 7b43a40108..6b2656df84 100644 --- a/editor/src/messages/mod.rs +++ b/editor/src/messages/mod.rs @@ -1,8 +1,10 @@ //! The root-level messages forming the first layer of the message system architecture. pub mod animation; +pub mod app_window; pub mod broadcast; pub mod debug; +pub mod defer; pub mod dialog; pub mod frontend; pub mod globals; @@ -14,4 +16,3 @@ pub mod portfolio; pub mod preferences; pub mod prelude; pub mod tool; -pub mod workspace; diff --git a/editor/src/messages/portfolio/spreadsheet/spreadsheet_message.rs b/editor/src/messages/portfolio/document/data_panel/data_panel_message.rs similarity index 56% rename from editor/src/messages/portfolio/spreadsheet/spreadsheet_message.rs rename to editor/src/messages/portfolio/document/data_panel/data_panel_message.rs index af579cc17f..a9067c8496 100644 --- a/editor/src/messages/portfolio/spreadsheet/spreadsheet_message.rs +++ b/editor/src/messages/portfolio/document/data_panel/data_panel_message.rs @@ -1,32 +1,32 @@ use crate::messages::prelude::*; use crate::node_graph_executor::InspectResult; -/// The spreadsheet UI allows for instance data to be previewed. -#[impl_message(Message, PortfolioMessage, Spreadsheet)] +/// The Data panel UI allows the user to visualize the output data of the selected node. +#[impl_message(Message, DocumentMessage, DataPanel)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] -pub enum SpreadsheetMessage { - ToggleOpen, - +pub enum DataPanelMessage { UpdateLayout { #[serde(skip)] inspect_result: InspectResult, }, + ClearLayout, - PushToInstancePath { + PushToElementPath { index: usize, }, - TruncateInstancePath { + TruncateElementPath { len: usize, }, - ViewVectorDataDomain { - domain: VectorDataDomain, + ViewVectorTableTab { + tab: VectorTableTab, }, } #[derive(PartialEq, Eq, Clone, Copy, Default, Debug, serde::Serialize, serde::Deserialize)] -pub enum VectorDataDomain { +pub enum VectorTableTab { #[default] + Properties, Points, Segments, Regions, diff --git a/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs b/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs new file mode 100644 index 0000000000..b9d01a5e0c --- /dev/null +++ b/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs @@ -0,0 +1,655 @@ +use super::VectorTableTab; +use crate::messages::layout::utility_types::layout_widget::{Layout, LayoutGroup, LayoutTarget, WidgetLayout}; +use crate::messages::portfolio::document::data_panel::DataPanelMessage; +use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; +use crate::messages::prelude::*; +use crate::messages::tool::tool_messages::tool_prelude::*; +use glam::{Affine2, Vec2}; +use graph_craft::document::NodeId; +use graphene_std::Color; +use graphene_std::Context; +use graphene_std::gradient::GradientStops; +use graphene_std::memo::IORecord; +use graphene_std::raster_types::{CPU, GPU, Raster}; +use graphene_std::table::Table; +use graphene_std::vector::Vector; +use graphene_std::vector::style::{Fill, FillChoice}; +use graphene_std::{Artboard, Graphic}; +use std::any::Any; +use std::sync::Arc; + +#[derive(ExtractField)] +pub struct DataPanelMessageContext<'a> { + pub network_interface: &'a mut NodeNetworkInterface, + pub data_panel_open: bool, +} + +/// The data panel allows for graph data to be previewed. +#[derive(Default, Debug, Clone, ExtractField)] +pub struct DataPanelMessageHandler { + introspected_node: Option, + introspected_data: Option>, + element_path: Vec, + active_vector_table_tab: VectorTableTab, +} + +#[message_handler_data] +impl MessageHandler> for DataPanelMessageHandler { + fn process_message(&mut self, message: DataPanelMessage, responses: &mut VecDeque, context: DataPanelMessageContext) { + match message { + DataPanelMessage::UpdateLayout { mut inspect_result } => { + self.introspected_node = Some(inspect_result.inspect_node); + self.introspected_data = inspect_result.take_data(); + self.update_layout(responses, context); + } + DataPanelMessage::ClearLayout => { + self.introspected_node = None; + self.introspected_data = None; + self.element_path.clear(); + self.active_vector_table_tab = VectorTableTab::default(); + self.update_layout(responses, context); + } + + DataPanelMessage::PushToElementPath { index } => { + self.element_path.push(index); + self.update_layout(responses, context); + } + DataPanelMessage::TruncateElementPath { len } => { + self.element_path.truncate(len); + self.update_layout(responses, context); + } + + DataPanelMessage::ViewVectorTableTab { tab } => { + self.active_vector_table_tab = tab; + self.update_layout(responses, context); + } + } + } + + fn actions(&self) -> ActionList { + actions!(DataPanelMessage;) + } +} + +impl DataPanelMessageHandler { + fn update_layout(&mut self, responses: &mut VecDeque, context: DataPanelMessageContext<'_>) { + let DataPanelMessageContext { network_interface, .. } = context; + + let mut layout_data = LayoutData { + current_depth: 0, + desired_path: &mut self.element_path, + breadcrumbs: Vec::new(), + vector_table_tab: self.active_vector_table_tab, + }; + + // Main data visualization + let mut layout = self + .introspected_data + .as_ref() + .map(|instrospected_data| generate_layout(instrospected_data, &mut layout_data).unwrap_or_else(|| label("Visualization of this data type is not yet supported"))) + .unwrap_or_default(); + + let mut widgets = Vec::new(); + + // Selected layer/node name + if let Some(node_id) = self.introspected_node { + let is_layer = network_interface.is_layer(&node_id, &[]); + + widgets.extend([ + if is_layer { + IconLabel::new("Layer").tooltip("Name of the selected layer").widget_holder() + } else { + IconLabel::new("Node").tooltip("Name of the selected node").widget_holder() + }, + Separator::new(SeparatorType::Related).widget_holder(), + TextInput::new(network_interface.display_name(&node_id, &[])) + .tooltip(if is_layer { "Name of the selected layer" } else { "Name of the selected node" }) + .on_update(move |text_input| { + NodeGraphMessage::SetDisplayName { + node_id, + alias: text_input.value.clone(), + skip_adding_history_step: false, + } + .into() + }) + .max_width(200) + .widget_holder(), + Separator::new(SeparatorType::Unrelated).widget_holder(), + ]); + } + + // Element path breadcrumbs + if !layout_data.breadcrumbs.is_empty() { + let breadcrumb = BreadcrumbTrailButtons::new(layout_data.breadcrumbs) + .on_update(|&len| DataPanelMessage::TruncateElementPath { len: len as usize }.into()) + .widget_holder(); + widgets.push(breadcrumb); + } + + if !widgets.is_empty() { + layout.insert(0, LayoutGroup::Row { widgets }); + } + + responses.add(LayoutMessage::SendLayout { + layout: Layout::WidgetLayout(WidgetLayout { layout }), + layout_target: LayoutTarget::DataPanel, + }); + } +} + +struct LayoutData<'a> { + current_depth: usize, + desired_path: &'a mut Vec, + breadcrumbs: Vec, + vector_table_tab: VectorTableTab, +} + +macro_rules! generate_layout_downcast { + ($introspected_data:expr, $data:expr, [ $($ty:ty),* $(,)? ]) => { + if false { None } + $( + else if let Some(io) = $introspected_data.downcast_ref::>() { + Some(io.output.layout_with_breadcrumb($data)) + } + )* + else { None } + } +} +// TODO: We simply try all these types sequentially. Find a better strategy. +fn generate_layout(introspected_data: &Arc, data: &mut LayoutData) -> Option> { + generate_layout_downcast!(introspected_data, data, [ + Table, + Table, + Table, + Table>, + Table>, + Table, + Table, + f64, + u32, + u64, + bool, + String, + Option, + DVec2, + DAffine2, + ]) +} + +fn column_headings(value: &[&str]) -> Vec { + value.iter().map(|text| TextLabel::new(*text).widget_holder()).collect() +} + +fn label(x: impl Into) -> Vec { + let error = vec![TextLabel::new(x).widget_holder()]; + vec![LayoutGroup::Row { widgets: error }] +} + +trait TableRowLayout { + fn type_name() -> &'static str; + fn identifier(&self) -> String; + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + data.breadcrumbs.push(self.identifier()); + self.element_page(data) + } + fn element_widget(&self, index: usize) -> WidgetHolder { + TextButton::new(self.identifier()) + .on_update(move |_| DataPanelMessage::PushToElementPath { index }.into()) + .widget_holder() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + vec![] + } +} + +impl TableRowLayout for Table { + fn type_name() -> &'static str { + "Table" + } + fn identifier(&self) -> String { + format!("Table<{}> ({} row{})", T::type_name(), self.len(), if self.len() == 1 { "" } else { "s" }) + } + fn element_page(&self, data: &mut LayoutData) -> Vec { + if let Some(index) = data.desired_path.get(data.current_depth).copied() { + if let Some(row) = self.get(index) { + data.current_depth += 1; + let result = row.element.layout_with_breadcrumb(data); + data.current_depth -= 1; + return result; + } else { + warn!("Desired path truncated"); + data.desired_path.truncate(data.current_depth); + } + } + + let mut rows = self + .iter() + .enumerate() + .map(|(index, row)| { + vec![ + TextLabel::new(format!("{index}")).widget_holder(), + row.element.element_widget(index), + TextLabel::new(format_transform_matrix(row.transform)).widget_holder(), + TextLabel::new(format!("{}", row.alpha_blending)).widget_holder(), + TextLabel::new(row.source_node_id.map_or_else(|| "-".to_string(), |id| format!("{}", id.0))).widget_holder(), + ] + }) + .collect::>(); + + rows.insert(0, column_headings(&["", "element", "transform", "alpha_blending", "source_node_id"])); + + vec![LayoutGroup::Table { rows }] + } +} + +impl TableRowLayout for Artboard { + fn type_name() -> &'static str { + "Artboard" + } + fn identifier(&self) -> String { + self.label.clone() + } + fn element_page(&self, data: &mut LayoutData) -> Vec { + self.content.element_page(data) + } +} + +impl TableRowLayout for Graphic { + fn type_name() -> &'static str { + "Graphic" + } + fn identifier(&self) -> String { + match self { + Self::Graphic(table) => table.identifier(), + Self::Vector(table) => table.identifier(), + Self::RasterCPU(table) => table.identifier(), + Self::RasterGPU(table) => table.identifier(), + Self::Color(table) => table.identifier(), + Self::Gradient(table) => table.identifier(), + } + } + // Don't put a breadcrumb for Graphic + fn layout_with_breadcrumb(&self, data: &mut LayoutData) -> Vec { + self.element_page(data) + } + fn element_page(&self, data: &mut LayoutData) -> Vec { + match self { + Self::Graphic(table) => table.layout_with_breadcrumb(data), + Self::Vector(table) => table.layout_with_breadcrumb(data), + Self::RasterCPU(table) => table.layout_with_breadcrumb(data), + Self::RasterGPU(table) => table.layout_with_breadcrumb(data), + Self::Color(table) => table.layout_with_breadcrumb(data), + Self::Gradient(table) => table.layout_with_breadcrumb(data), + } + } +} + +impl TableRowLayout for Vector { + fn type_name() -> &'static str { + "Vector" + } + fn identifier(&self) -> String { + format!( + "Vector ({} point{}, {} segment{})", + self.point_domain.ids().len(), + if self.point_domain.ids().len() == 1 { "" } else { "s" }, + self.segment_domain.ids().len(), + if self.segment_domain.ids().len() == 1 { "" } else { "s" } + ) + } + fn element_page(&self, data: &mut LayoutData) -> Vec { + let table_tab_entries = [VectorTableTab::Properties, VectorTableTab::Points, VectorTableTab::Segments, VectorTableTab::Regions] + .into_iter() + .map(|tab| { + RadioEntryData::new(format!("{tab:?}")) + .label(format!("{tab:?}")) + .on_update(move |_| DataPanelMessage::ViewVectorTableTab { tab }.into()) + }) + .collect(); + let table_tabs = vec![RadioInput::new(table_tab_entries).selected_index(Some(data.vector_table_tab as u32)).widget_holder()]; + + let mut table_rows = Vec::new(); + match data.vector_table_tab { + VectorTableTab::Properties => { + table_rows.push(column_headings(&["property", "value"])); + + match self.style.fill.clone() { + Fill::None => table_rows.push(vec![ + TextLabel::new("Fill").widget_holder(), + ColorInput::new(FillChoice::None).disabled(true).menu_direction(Some(MenuDirection::Top)).widget_holder(), + ]), + Fill::Solid(color) => table_rows.push(vec![ + TextLabel::new("Fill").widget_holder(), + ColorInput::new(FillChoice::Solid(color)).disabled(true).menu_direction(Some(MenuDirection::Top)).widget_holder(), + ]), + Fill::Gradient(gradient) => { + table_rows.push(vec![ + TextLabel::new("Fill").widget_holder(), + ColorInput::new(FillChoice::Gradient(gradient.stops)) + .disabled(true) + .menu_direction(Some(MenuDirection::Top)) + .widget_holder(), + ]); + table_rows.push(vec![ + TextLabel::new("Fill Gradient Type").widget_holder(), + TextLabel::new(gradient.gradient_type.to_string()).widget_holder(), + ]); + table_rows.push(vec![ + TextLabel::new("Fill Gradient Start").widget_holder(), + TextLabel::new(format_dvec2(gradient.start)).widget_holder(), + ]); + table_rows.push(vec![TextLabel::new("Fill Gradient End").widget_holder(), TextLabel::new(format_dvec2(gradient.end)).widget_holder()]); + } + } + + if let Some(stroke) = self.style.stroke.clone() { + let color = if let Some(color) = stroke.color { FillChoice::Solid(color) } else { FillChoice::None }; + table_rows.push(vec![ + TextLabel::new("Stroke").widget_holder(), + ColorInput::new(color).disabled(true).menu_direction(Some(MenuDirection::Top)).widget_holder(), + ]); + table_rows.push(vec![TextLabel::new("Stroke Weight").widget_holder(), TextLabel::new(format!("{} px", stroke.weight)).widget_holder()]); + table_rows.push(vec![ + TextLabel::new("Stroke Dash Lengths").widget_holder(), + TextLabel::new(if stroke.dash_lengths.is_empty() { + "-".to_string() + } else { + format!("[{}]", stroke.dash_lengths.iter().map(|x| format!("{x} px")).collect::>().join(", ")) + }) + .widget_holder(), + ]); + table_rows.push(vec![ + TextLabel::new("Stroke Dash Offset").widget_holder(), + TextLabel::new(format!("{}", stroke.dash_offset)).widget_holder(), + ]); + table_rows.push(vec![TextLabel::new("Stroke Cap").widget_holder(), TextLabel::new(stroke.cap.to_string()).widget_holder()]); + table_rows.push(vec![TextLabel::new("Stroke Join").widget_holder(), TextLabel::new(stroke.join.to_string()).widget_holder()]); + table_rows.push(vec![ + TextLabel::new("Stroke Join Miter Limit").widget_holder(), + TextLabel::new(format!("{}", stroke.join_miter_limit)).widget_holder(), + ]); + table_rows.push(vec![TextLabel::new("Stroke Align").widget_holder(), TextLabel::new(stroke.align.to_string()).widget_holder()]); + table_rows.push(vec![ + TextLabel::new("Stroke Transform").widget_holder(), + TextLabel::new(format_transform_matrix(&stroke.transform)).widget_holder(), + ]); + table_rows.push(vec![ + TextLabel::new("Stroke Non-Scaling").widget_holder(), + TextLabel::new((if stroke.non_scaling { "Yes" } else { "No" }).to_string()).widget_holder(), + ]); + table_rows.push(vec![ + TextLabel::new("Stroke Paint Order").widget_holder(), + TextLabel::new(stroke.paint_order.to_string()).widget_holder(), + ]); + } + + let colinear = self.colinear_manipulators.iter().map(|[a, b]| format!("[{a} / {b}]")).collect::>().join(", "); + let colinear = if colinear.is_empty() { "-".to_string() } else { colinear }; + table_rows.push(vec![TextLabel::new("Colinear Handle IDs").widget_holder(), TextLabel::new(colinear).widget_holder()]); + + table_rows.push(vec![ + TextLabel::new("Upstream Nested Layers").widget_holder(), + TextLabel::new(if self.upstream_nested_layers.is_some() { + "Yes (this preserves references to its upstream nested layers for editing by tools)" + } else { + "No (this doesn't preserve references to its upstream nested layers for editing by tools)" + }) + .widget_holder(), + ]); + } + VectorTableTab::Points => { + table_rows.push(column_headings(&["", "position"])); + table_rows.extend( + self.point_domain + .iter() + .map(|(id, position)| vec![TextLabel::new(format!("{}", id.inner())).widget_holder(), TextLabel::new(format!("{position}")).widget_holder()]), + ); + } + VectorTableTab::Segments => { + table_rows.push(column_headings(&["", "start_index", "end_index", "handles"])); + table_rows.extend(self.segment_domain.iter().map(|(id, start, end, handles)| { + vec![ + TextLabel::new(format!("{}", id.inner())).widget_holder(), + TextLabel::new(format!("{start}")).widget_holder(), + TextLabel::new(format!("{end}")).widget_holder(), + TextLabel::new(format!("{handles:?}")).widget_holder(), + ] + })); + } + VectorTableTab::Regions => { + table_rows.push(column_headings(&["", "segment_range", "fill"])); + table_rows.extend(self.region_domain.iter().map(|(id, segment_range, fill)| { + vec![ + TextLabel::new(format!("{}", id.inner())).widget_holder(), + TextLabel::new(format!("{segment_range:?}")).widget_holder(), + TextLabel::new(format!("{}", fill.inner())).widget_holder(), + ] + })); + } + } + + vec![LayoutGroup::Row { widgets: table_tabs }, LayoutGroup::Table { rows: table_rows }] + } +} + +impl TableRowLayout for Raster { + fn type_name() -> &'static str { + "Raster" + } + fn identifier(&self) -> String { + format!("Raster ({}x{})", self.width, self.height) + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let base64_string = self.data().base64_string.clone().unwrap_or_else(|| { + use base64::Engine; + + let output = self.data().to_png(); + let preamble = "data:image/png;base64,"; + let mut base64_string = String::with_capacity(preamble.len() + output.len() * 4); + base64_string.push_str(preamble); + base64::engine::general_purpose::STANDARD.encode_string(output, &mut base64_string); + base64_string + }); + + let widgets = vec![ImageLabel::new(base64_string).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for Raster { + fn type_name() -> &'static str { + "Raster" + } + fn identifier(&self) -> String { + format!("Raster ({}x{})", self.data().width(), self.data().height()) + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new("Raster is a texture on the GPU and cannot currently be displayed here").widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for Color { + fn type_name() -> &'static str { + "Color" + } + fn identifier(&self) -> String { + format!("Color (#{})", self.to_gamma_srgb().to_rgba_hex_srgb()) + } + fn element_widget(&self, _index: usize) -> WidgetHolder { + ColorInput::new(FillChoice::Solid(*self)).disabled(true).menu_direction(Some(MenuDirection::Top)).widget_holder() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![self.element_widget(0)]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for GradientStops { + fn type_name() -> &'static str { + "Gradient" + } + fn identifier(&self) -> String { + format!("Gradient ({} stops)", self.0.len()) + } + fn element_widget(&self, _index: usize) -> WidgetHolder { + ColorInput::new(FillChoice::Gradient(self.clone())) + .disabled(true) + .menu_direction(Some(MenuDirection::Top)) + .widget_holder() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![self.element_widget(0)]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for f64 { + fn type_name() -> &'static str { + "Number (f64)" + } + fn identifier(&self) -> String { + "Number (f64)".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(self.to_string()).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for u32 { + fn type_name() -> &'static str { + "Number (u32)" + } + fn identifier(&self) -> String { + "Number (u32)".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(self.to_string()).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for u64 { + fn type_name() -> &'static str { + "Number (u64)" + } + fn identifier(&self) -> String { + "Number (u64)".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(self.to_string()).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for bool { + fn type_name() -> &'static str { + "Bool" + } + fn identifier(&self) -> String { + "Bool".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(self.to_string()).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for String { + fn type_name() -> &'static str { + "String" + } + fn identifier(&self) -> String { + "String".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextAreaInput::new(self.to_string()).disabled(true).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for Option { + fn type_name() -> &'static str { + "Option" + } + fn identifier(&self) -> String { + "Option".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(format!("{self:?}")).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for DVec2 { + fn type_name() -> &'static str { + "Vec2" + } + fn identifier(&self) -> String { + "Vec2".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(format!("({}, {})", self.x, self.y)).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for Vec2 { + fn type_name() -> &'static str { + "Vec2" + } + fn identifier(&self) -> String { + "Vec2".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(format!("({}, {})", self.x, self.y)).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for DAffine2 { + fn type_name() -> &'static str { + "Transform" + } + fn identifier(&self) -> String { + "Transform".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let widgets = vec![TextLabel::new(format_transform_matrix(self)).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +impl TableRowLayout for Affine2 { + fn type_name() -> &'static str { + "Transform" + } + fn identifier(&self) -> String { + "Transform".to_string() + } + fn element_page(&self, _data: &mut LayoutData) -> Vec { + let matrix = DAffine2::from_cols_array(&self.to_cols_array().map(|x| x as f64)); + let widgets = vec![TextLabel::new(format_transform_matrix(&matrix)).widget_holder()]; + vec![LayoutGroup::Row { widgets }] + } +} + +fn format_transform_matrix(transform: &DAffine2) -> String { + let (scale, angle, translation) = transform.to_scale_angle_translation(); + let rotation = if angle == -0. { 0. } else { angle.to_degrees() }; + let round = |x: f64| (x * 1e3).round() / 1e3; + + format!( + "Location: ({} px, {} px) โ€” Rotation: {rotation:2}ยฐ โ€” Scale: ({}x, {}x)", + round(translation.x), + round(translation.y), + round(scale.x), + round(scale.y) + ) +} + +fn format_dvec2(value: DVec2) -> String { + let round = |x: f64| (x * 1e3).round() / 1e3; + format!("({} px, {} px)", round(value.x), round(value.y)) +} diff --git a/editor/src/messages/portfolio/document/data_panel/mod.rs b/editor/src/messages/portfolio/document/data_panel/mod.rs new file mode 100644 index 0000000000..d1a28217ec --- /dev/null +++ b/editor/src/messages/portfolio/document/data_panel/mod.rs @@ -0,0 +1,7 @@ +mod data_panel_message; +mod data_panel_message_handler; + +#[doc(inline)] +pub use data_panel_message::*; +#[doc(inline)] +pub use data_panel_message_handler::*; diff --git a/editor/src/messages/portfolio/document/document_message.rs b/editor/src/messages/portfolio/document/document_message.rs index ae3576d2a1..88c2159c6c 100644 --- a/editor/src/messages/portfolio/document/document_message.rs +++ b/editor/src/messages/portfolio/document/document_message.rs @@ -1,5 +1,8 @@ +use std::path::PathBuf; + use super::utility_types::misc::{GroupFolderType, SnappingState}; use crate::messages::input_mapper::utility_types::input_keyboard::Key; +use crate::messages::portfolio::document::data_panel::DataPanelMessage; use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; use crate::messages::portfolio::document::overlays::utility_types::OverlaysType; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; @@ -31,6 +34,8 @@ pub enum DocumentMessage { Overlays(OverlaysMessage), #[child] PropertiesPanel(PropertiesPanelMessage), + #[child] + DataPanel(DataPanelMessage), // Messages AlignSelectedLayers { @@ -48,7 +53,9 @@ pub enum DocumentMessage { DocumentHistoryBackward, DocumentHistoryForward, DocumentStructureChanged, - DrawArtboardOverlays(OverlayContext), + DrawArtboardOverlays { + context: OverlayContext, + }, DuplicateSelectedLayers, EnterNestedNetwork { node_id: NodeId, @@ -67,9 +74,15 @@ pub enum DocumentMessage { open: bool, }, GraphViewOverlayToggle, - GridOptions(GridSnapping), - GridOverlays(OverlayContext), - GridVisibility(bool), + GridOptions { + options: GridSnapping, + }, + GridOverlays { + context: OverlayContext, + }, + GridVisibility { + visible: bool, + }, GroupSelectedLayers { group_folder_type: GroupFolderType, }, @@ -105,6 +118,10 @@ pub enum DocumentMessage { RenderRulers, RenderScrollbars, SaveDocument, + SaveDocumentAs, + SavedDocument { + path: Option, + }, SelectParentLayer, SelectAllLayers, SelectedLayersLower, @@ -182,7 +199,7 @@ pub enum DocumentMessage { UpdateUpstreamTransforms { upstream_footprints: HashMap, local_transforms: HashMap, - first_instance_source_id: HashMap>, + first_element_source_id: HashMap>, }, UpdateClickTargets { click_targets: HashMap>, diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index 422d5bb111..aec19541a2 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -6,9 +6,10 @@ use super::utility_types::misc::{GroupFolderType, SNAP_FUNCTIONS_FOR_BOUNDING_BO use super::utility_types::network_interface::{self, NodeNetworkInterface, TransactionStatus}; use super::utility_types::nodes::{CollapsedLayers, SelectedNodes}; use crate::application::{GRAPHITE_GIT_COMMIT_HASH, generate_uuid}; -use crate::consts::{ASYMPTOTIC_EFFECT, COLOR_OVERLAY_GRAY, DEFAULT_DOCUMENT_NAME, FILE_SAVE_SUFFIX, SCALE_EFFECT, SCROLLBAR_SPACING, VIEWPORT_ROTATE_SNAP_INTERVAL}; +use crate::consts::{ASYMPTOTIC_EFFECT, COLOR_OVERLAY_GRAY, DEFAULT_DOCUMENT_NAME, FILE_EXTENSION, SCALE_EFFECT, SCROLLBAR_SPACING, VIEWPORT_ROTATE_SNAP_INTERVAL}; use crate::messages::input_mapper::utility_types::macros::action_keys; use crate::messages::layout::utility_types::widget_prelude::*; +use crate::messages::portfolio::document::data_panel::{DataPanelMessageContext, DataPanelMessageHandler}; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; use crate::messages::portfolio::document::node_graph::NodeGraphMessageContext; use crate::messages::portfolio::document::overlays::grid_overlays::{grid_overlay, overlay_options}; @@ -16,8 +17,9 @@ use crate::messages::portfolio::document::overlays::utility_types::{OverlaysType use crate::messages::portfolio::document::properties_panel::properties_panel_message_handler::PropertiesPanelMessageContext; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::misc::{AlignAggregate, AlignAxis, DocumentMode, FlipAxis, PTZ}; -use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeTemplate}; +use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeTemplate, OutputConnector}; use crate::messages::portfolio::document::utility_types::nodes::RawBuffer; +use crate::messages::portfolio::utility_types::PanelType; use crate::messages::portfolio::utility_types::PersistentData; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils::{self, get_blend_mode, get_fill, get_opacity}; @@ -25,17 +27,21 @@ use crate::messages::tool::tool_messages::select_tool::SelectToolPointerKeys; use crate::messages::tool::tool_messages::tool_prelude::Key; use crate::messages::tool::utility_types::ToolType; use crate::node_graph_executor::NodeGraphExecutor; -use bezier_rs::Subpath; use glam::{DAffine2, DVec2, IVec2}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput, NodeNetwork, OldNodeNetwork}; use graphene_std::math::quad::Quad; use graphene_std::path_bool::{boolean_intersect, path_bool_lib}; use graphene_std::raster::BlendMode; -use graphene_std::raster_types::{Raster, RasterDataTable}; +use graphene_std::raster_types::Raster; +use graphene_std::subpath::Subpath; +use graphene_std::table::Table; use graphene_std::vector::PointId; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; +use graphene_std::vector::misc::{dvec2_to_point, point_to_dvec2}; use graphene_std::vector::style::ViewMode; +use kurbo::{Affine, CubicBez, Line, ParamCurve, PathSeg, QuadBez}; +use std::path::PathBuf; use std::time::Duration; #[derive(ExtractField)] @@ -47,6 +53,9 @@ pub struct DocumentMessageContext<'a> { pub current_tool: &'a ToolType, pub preferences: &'a PreferencesMessageHandler, pub device_pixel_ratio: f64, + pub data_panel_open: bool, + pub layers_panel_open: bool, + pub properties_panel_open: bool, } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ExtractField)] @@ -61,9 +70,11 @@ pub struct DocumentMessageHandler { #[serde(skip)] pub node_graph_handler: NodeGraphMessageHandler, #[serde(skip)] - overlays_message_handler: OverlaysMessageHandler, + pub overlays_message_handler: OverlaysMessageHandler, #[serde(skip)] - properties_panel_message_handler: PropertiesPanelMessageHandler, + pub properties_panel_message_handler: PropertiesPanelMessageHandler, + #[serde(skip)] + pub data_panel_message_handler: DataPanelMessageHandler, // ============================================ // Fields that are saved in the document format @@ -74,8 +85,6 @@ pub struct DocumentMessageHandler { /// List of the [`LayerNodeIdentifier`]s that are currently collapsed by the user in the Layers panel. /// Collapsed means that the expansion arrow isn't set to show the children of these layers. pub collapsed: CollapsedLayers, - /// The name of the document, which is displayed in the tab and title bar of the editor. - pub name: String, /// The full Git commit hash of the Graphite repository that was used to build the editor. /// We save this to provide a hint about which version of the editor was used to create the document. pub commit_hash: String, @@ -102,6 +111,12 @@ pub struct DocumentMessageHandler { // Fields omitted from the saved document format // ============================================= // + /// The name of the document, which is displayed in the tab and title bar of the editor. + #[serde(skip)] + pub name: String, + /// The path of the to the document file. + #[serde(skip)] + pub(crate) path: Option, /// Path to network currently viewed in the node graph overlay. This will eventually be stored in each panel, so that multiple panels can refer to different networks #[serde(skip)] breadcrumb_network_path: Vec, @@ -139,12 +154,12 @@ impl Default for DocumentMessageHandler { node_graph_handler: NodeGraphMessageHandler::default(), overlays_message_handler: OverlaysMessageHandler::default(), properties_panel_message_handler: PropertiesPanelMessageHandler::default(), + data_panel_message_handler: DataPanelMessageHandler::default(), // ============================================ // Fields that are saved in the document format // ============================================ network_interface: default_document_network_interface(), collapsed: CollapsedLayers::default(), - name: DEFAULT_DOCUMENT_NAME.to_string(), commit_hash: GRAPHITE_GIT_COMMIT_HASH.to_string(), document_ptz: PTZ::default(), document_mode: DocumentMode::DesignMode, @@ -157,6 +172,8 @@ impl Default for DocumentMessageHandler { // ============================================= // Fields omitted from the saved document format // ============================================= + name: DEFAULT_DOCUMENT_NAME.to_string(), + path: None, breadcrumb_network_path: Vec::new(), selection_network_path: Vec::new(), document_undo_history: VecDeque::new(), @@ -180,6 +197,9 @@ impl MessageHandler> for DocumentMes current_tool, preferences, device_pixel_ratio, + data_panel_open, + layers_panel_open, + properties_panel_open, } = context; match message { @@ -217,9 +237,20 @@ impl MessageHandler> for DocumentMes document_name: self.name.as_str(), executor, persistent_data, + properties_panel_open, }; self.properties_panel_message_handler.process_message(message, responses, context); } + DocumentMessage::DataPanel(message) => { + self.data_panel_message_handler.process_message( + message, + responses, + DataPanelMessageContext { + network_interface: &mut self.network_interface, + data_panel_open, + }, + ); + } DocumentMessage::NodeGraph(message) => { self.node_graph_handler.process_message( message, @@ -235,6 +266,7 @@ impl MessageHandler> for DocumentMes graph_fade_artwork_percentage: self.graph_fade_artwork_percentage, navigation_handler: &self.navigation_handler, preferences, + layers_panel_open, }, ); } @@ -350,14 +382,17 @@ impl MessageHandler> for DocumentMes DocumentMessage::DocumentHistoryBackward => self.undo_with_history(ipp, responses), DocumentMessage::DocumentHistoryForward => self.redo_with_history(ipp, responses), DocumentMessage::DocumentStructureChanged => { - self.update_layers_panel_control_bar_widgets(responses); - self.update_layers_panel_bottom_bar_widgets(responses); + if layers_panel_open { + self.network_interface.load_structure(); + let data_buffer: RawBuffer = self.serialize_root(); - self.network_interface.load_structure(); - let data_buffer: RawBuffer = self.serialize_root(); - responses.add(FrontendMessage::UpdateDocumentLayerStructure { data_buffer }); + self.update_layers_panel_control_bar_widgets(layers_panel_open, responses); + self.update_layers_panel_bottom_bar_widgets(layers_panel_open, responses); + + responses.add(FrontendMessage::UpdateDocumentLayerStructure { data_buffer }); + } } - DocumentMessage::DrawArtboardOverlays(overlay_context) => { + DocumentMessage::DrawArtboardOverlays { context: overlay_context } => { if !overlay_context.visibility_settings.artboard_name() { return; } @@ -548,24 +583,25 @@ impl MessageHandler> for DocumentMes responses.add(NodeGraphMessage::UpdateHints); } else { responses.add(ToolMessage::ActivateTool { tool_type: *current_tool }); + responses.add(OverlaysMessage::Draw); // Redraw overlays when graph is closed } } DocumentMessage::GraphViewOverlayToggle => { responses.add(DocumentMessage::GraphViewOverlay { open: !self.graph_view_overlay_open }); } - DocumentMessage::GridOptions(grid) => { - self.snapping_state.grid = grid; + DocumentMessage::GridOptions { options } => { + self.snapping_state.grid = options; self.snapping_state.grid_snapping = true; responses.add(OverlaysMessage::Draw); responses.add(PortfolioMessage::UpdateDocumentWidgets); } - DocumentMessage::GridOverlays(mut overlay_context) => { + DocumentMessage::GridOverlays { context: mut overlay_context } => { if self.snapping_state.grid_snapping { grid_overlay(self, &mut overlay_context) } } - DocumentMessage::GridVisibility(enabled) => { - self.snapping_state.grid_snapping = enabled; + DocumentMessage::GridVisibility { visible } => { + self.snapping_state.grid_snapping = visible; responses.add(OverlaysMessage::Draw); } DocumentMessage::GroupSelectedLayers { group_folder_type } => { @@ -691,7 +727,7 @@ impl MessageHandler> for DocumentMes }); if layer_to_move.parent(self.metadata()) != Some(parent) { - // TODO: Fix this so it works when dragging a layer into a group parent which has a Transform node, which used to work before #2689 caused this regression by removing the empty VectorData table row. + // TODO: Fix this so it works when dragging a layer into a group parent which has a Transform node, which used to work before #2689 caused this regression by removing the empty vector table row. // TODO: See #2688 for this issue. let layer_local_transform = self.network_interface.document_metadata().transform_to_viewport(layer_to_move); let undo_transform = self.network_interface.document_metadata().transform_to_viewport(parent).inverse(); @@ -837,7 +873,7 @@ impl MessageHandler> for DocumentMes responses.add(DocumentMessage::AddTransaction); - let layer = graph_modification_utils::new_image_layer(RasterDataTable::new(Raster::new_cpu(image)), layer_node_id, self.new_layer_parent(true), responses); + let layer = graph_modification_utils::new_image_layer(Table::new_from_element(Raster::new_cpu(image)), layer_node_id, self.new_layer_parent(true), responses); if let Some(name) = name { responses.add(NodeGraphMessage::SetDisplayName { @@ -912,7 +948,11 @@ impl MessageHandler> for DocumentMes responses.add(OverlaysMessage::Draw); } DocumentMessage::RenameDocument { new_name } => { - self.name = new_name; + self.name = new_name.clone(); + + self.path = None; + self.set_save_state(false); + responses.add(PortfolioMessage::UpdateOpenDocumentsList); responses.add(NodeGraphMessage::UpdateNewNodeGraph); } @@ -985,21 +1025,41 @@ impl MessageHandler> for DocumentMes multiplier: scrollbar_multiplier.into(), }); } - DocumentMessage::SaveDocument => { + DocumentMessage::SaveDocument | DocumentMessage::SaveDocumentAs => { + if let DocumentMessage::SaveDocumentAs = message { + self.path = None; + } + self.set_save_state(true); responses.add(PortfolioMessage::AutoSaveActiveDocument); // Update the save status of the just saved document responses.add(PortfolioMessage::UpdateOpenDocumentsList); - let name = match self.name.ends_with(FILE_SAVE_SUFFIX) { - true => self.name.clone(), - false => self.name.clone() + FILE_SAVE_SUFFIX, - }; - responses.add(FrontendMessage::TriggerDownloadTextFile { - document: self.serialize_document(), - name, + responses.add(FrontendMessage::TriggerSaveDocument { + document_id, + name: format!("{}.{}", self.name.clone(), FILE_EXTENSION), + path: self.path.clone(), + content: self.serialize_document().into_bytes(), }) } + DocumentMessage::SavedDocument { path } => { + self.path = path; + + // Update the name to match the file stem + let document_name_from_path = self.path.as_ref().and_then(|path| { + if path.extension().is_some_and(|e| e == FILE_EXTENSION) { + path.file_stem().map(|n| n.to_string_lossy().to_string()) + } else { + None + } + }); + if let Some(name) = document_name_from_path { + self.name = name; + + responses.add(PortfolioMessage::UpdateOpenDocumentsList); + responses.add(NodeGraphMessage::UpdateNewNodeGraph); + } + } DocumentMessage::SelectParentLayer => { let selected_nodes = self.network_interface.selected_nodes(); let selected_layers = selected_nodes.selected_layers(self.metadata()); @@ -1022,7 +1082,7 @@ impl MessageHandler> for DocumentMes if !parent_layers.is_empty() { let nodes = parent_layers.into_iter().collect(); responses.add(NodeGraphMessage::SelectedNodesSet { nodes }); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); } } DocumentMessage::SelectAllLayers => { @@ -1097,7 +1157,7 @@ impl MessageHandler> for DocumentMes } else { responses.add_front(NodeGraphMessage::SelectedNodesAdd { nodes: vec![id] }); } - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); } else { nodes.push(id); } @@ -1117,7 +1177,6 @@ impl MessageHandler> for DocumentMes } } DocumentMessage::SetActivePanel { active_panel: panel } => { - use crate::messages::portfolio::utility_types::PanelType; match panel { PanelType::Document => { if self.graph_view_overlay_open { @@ -1167,7 +1226,7 @@ impl MessageHandler> for DocumentMes Some(overlays_type) => overlays_type, None => { visibility_settings.all = visible; - responses.add(BroadcastEvent::ToolAbort); + responses.add(EventMessage::ToolAbort); responses.add(OverlaysMessage::Draw); return; } @@ -1190,7 +1249,7 @@ impl MessageHandler> for DocumentMes OverlaysType::Handles => visibility_settings.handles = visible, } - responses.add(BroadcastEvent::ToolAbort); + responses.add(EventMessage::ToolAbort); responses.add(OverlaysMessage::Draw); } DocumentMessage::SetRangeSelectionLayer { new_layer } => { @@ -1302,10 +1361,10 @@ impl MessageHandler> for DocumentMes DocumentMessage::UpdateUpstreamTransforms { upstream_footprints, local_transforms, - first_instance_source_id, + first_element_source_id, } => { self.network_interface.update_transforms(upstream_footprints, local_transforms); - self.network_interface.update_first_instance_source_id(first_instance_source_id); + self.network_interface.update_first_element_source_id(first_element_source_id); } DocumentMessage::UpdateClickTargets { click_targets } => { // TODO: Allow non layer nodes to have click targets @@ -1404,12 +1463,14 @@ impl MessageHandler> for DocumentMes let transform = self.navigation_handler.calculate_offset_transform(ipp.viewport_bounds.center(), &self.document_ptz); self.network_interface.set_document_to_viewport_transform(transform); // Ensure selection box is kept in sync with the pointer when the PTZ changes - responses.add(SelectToolMessage::PointerMove(SelectToolPointerKeys { - axis_align: Key::Shift, - snap_angle: Key::Shift, - center: Key::Alt, - duplicate: Key::Alt, - })); + responses.add(SelectToolMessage::PointerMove { + modifier_keys: SelectToolPointerKeys { + axis_align: Key::Shift, + snap_angle: Key::Shift, + center: Key::Alt, + duplicate: Key::Alt, + }, + }); responses.add(NodeGraphMessage::RunDocumentGraph); } else { let Some(network_metadata) = self.network_interface.network_metadata(&self.breadcrumb_network_path) else { @@ -1438,11 +1499,11 @@ impl MessageHandler> for DocumentMes } DocumentMessage::SelectionStepBack => { self.network_interface.selection_step_back(&self.selection_network_path); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); } DocumentMessage::SelectionStepForward => { self.network_interface.selection_step_forward(&self.selection_network_path); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); } DocumentMessage::WrapContentInArtboard { place_artboard_at_origin } => { // Get bounding box of all layers @@ -1530,6 +1591,10 @@ impl MessageHandler> for DocumentMes ZoomCanvasToFitAll, ); + // Additional actions available on desktop + #[cfg(not(target_family = "wasm"))] + common.extend(actions!(DocumentMessageDiscriminant::SaveDocumentAs)); + // Additional actions if there are any selected layers if self.network_interface.selected_nodes().selected_layers(self.metadata()).next().is_some() { let mut select = actions!(DocumentMessageDiscriminant; @@ -1717,7 +1782,8 @@ impl DocumentMessageHandler { pub fn deserialize_document(serialized_content: &str) -> Result { let document_message_handler = serde_json::from_str::(serialized_content) - .or_else(|_| { + .or_else(|e| { + log::warn!("failed to directly load document with the following error: {e}. Trying old DocumentMessageHandler"); // TODO: Eventually remove this document upgrade code #[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct OldDocumentMessageHandler { @@ -1870,10 +1936,11 @@ impl DocumentMessageHandler { responses.add(PortfolioMessage::UpdateOpenDocumentsList); responses.add(NodeGraphMessage::SelectedNodesUpdated); responses.add(NodeGraphMessage::ForceRunDocumentGraph); + // TODO: Remove once the footprint is used to load the imports/export distances from the edge responses.add(NodeGraphMessage::UnloadWires); responses.add(NodeGraphMessage::SetGridAlignedEdges); - responses.add(Message::StartBuffer); + Some(previous_network) } pub fn redo_with_history(&mut self, ipp: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { @@ -2145,7 +2212,7 @@ impl DocumentMessageHandler { }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.artboard_name) .on_update(|optional_input: &CheckboxInput| { @@ -2155,15 +2222,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Artboard Name".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Artboard Name".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.transform_measurement) .on_update(|optional_input: &CheckboxInput| { @@ -2173,9 +2240,9 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("G/R/S Measurement".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("G/R/S Measurement".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, @@ -2184,7 +2251,7 @@ impl DocumentMessageHandler { }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.quick_measurement) .on_update(|optional_input: &CheckboxInput| { @@ -2194,15 +2261,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Quick Measurement".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Quick Measurement".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.transform_cage) .on_update(|optional_input: &CheckboxInput| { @@ -2212,15 +2279,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Transform Cage".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Transform Cage".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.compass_rose) .on_update(|optional_input: &CheckboxInput| { @@ -2230,15 +2297,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Transform Dial".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Transform Dial".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.pivot) .on_update(|optional_input: &CheckboxInput| { @@ -2248,15 +2315,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Transform Pivot".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Transform Pivot".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.pivot) .on_update(|optional_input: &CheckboxInput| { @@ -2266,15 +2333,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Transform Origin".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Transform Origin".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.hover_outline) .on_update(|optional_input: &CheckboxInput| { @@ -2284,15 +2351,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Hover Outline".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Hover Outline".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.selection_outline) .on_update(|optional_input: &CheckboxInput| { @@ -2302,9 +2369,9 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Selection Outline".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Selection Outline".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, @@ -2313,7 +2380,7 @@ impl DocumentMessageHandler { }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.path) .on_update(|optional_input: &CheckboxInput| { @@ -2323,15 +2390,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Path".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Path".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.anchors) .on_update(|optional_input: &CheckboxInput| { @@ -2341,15 +2408,15 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new("Anchors".to_string()).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new("Anchors".to_string()).for_checkbox(checkbox_id).widget_holder(), ] }, }, LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(self.overlays_visibility_settings.handles) .disabled(!self.overlays_visibility_settings.anchors) @@ -2360,11 +2427,11 @@ impl DocumentMessageHandler { } .into() }) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), TextLabel::new("Handles".to_string()) .disabled(!self.overlays_visibility_settings.anchors) - .for_checkbox(&mut checkbox_id) + .for_checkbox(checkbox_id) .widget_holder(), ] }, @@ -2397,7 +2464,7 @@ impl DocumentMessageHandler { .into_iter() .chain(SNAP_FUNCTIONS_FOR_BOUNDING_BOXES.into_iter().map(|(name, closure, tooltip)| LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(*closure(&mut snapping_state)) .on_update(move |input: &CheckboxInput| { @@ -2408,9 +2475,9 @@ impl DocumentMessageHandler { .into() }) .tooltip(tooltip) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new(name).tooltip(tooltip).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new(name).tooltip(tooltip).for_checkbox(checkbox_id).widget_holder(), ] }, })) @@ -2419,7 +2486,7 @@ impl DocumentMessageHandler { }]) .chain(SNAP_FUNCTIONS_FOR_PATHS.into_iter().map(|(name, closure, tooltip)| LayoutGroup::Row { widgets: { - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); vec![ CheckboxInput::new(*closure(&mut snapping_state2)) .on_update(move |input: &CheckboxInput| { @@ -2430,9 +2497,9 @@ impl DocumentMessageHandler { .into() }) .tooltip(tooltip) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(), - TextLabel::new(name).tooltip(tooltip).for_checkbox(&mut checkbox_id).widget_holder(), + TextLabel::new(name).tooltip(tooltip).for_checkbox(checkbox_id).widget_holder(), ] }, })) @@ -2444,7 +2511,7 @@ impl DocumentMessageHandler { .icon("Grid") .tooltip("Grid") .tooltip_shortcut(action_keys!(DocumentMessageDiscriminant::ToggleGridVisibility)) - .on_update(|optional_input: &CheckboxInput| DocumentMessage::GridVisibility(optional_input.checked).into()) + .on_update(|optional_input: &CheckboxInput| DocumentMessage::GridVisibility { visible: optional_input.checked }.into()) .widget_holder(), PopoverButton::new() .popover_layout(overlay_options(&self.snapping_state.grid)) @@ -2537,7 +2604,11 @@ impl DocumentMessageHandler { responses.add(NodeGraphMessage::ForceRunDocumentGraph); } - pub fn update_layers_panel_control_bar_widgets(&self, responses: &mut VecDeque) { + pub fn update_layers_panel_control_bar_widgets(&self, layers_panel_open: bool, responses: &mut VecDeque) { + if !layers_panel_open { + return; + } + // Get an iterator over the selected layers (excluding artboards which don't have an opacity or blend mode). let selected_nodes = self.network_interface.selected_nodes(); let selected_layers_except_artboards = selected_nodes.selected_layers_except_artboards(&self.network_interface); @@ -2695,12 +2766,17 @@ impl DocumentMessageHandler { }); } - pub fn update_layers_panel_bottom_bar_widgets(&self, responses: &mut VecDeque) { + pub fn update_layers_panel_bottom_bar_widgets(&mut self, layers_panel_open: bool, responses: &mut VecDeque) { + if !layers_panel_open { + return; + } + let selected_nodes = self.network_interface.selected_nodes(); let mut selected_layers = selected_nodes.selected_layers(self.metadata()); let selected_layer = selected_layers.next(); let has_selection = selected_layer.is_some(); let has_multiple_selection = selected_layers.next().is_some(); + for _ in selected_layers {} let widgets = vec![ PopoverButton::new() @@ -2714,7 +2790,7 @@ impl DocumentMessageHandler { let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &self.network_interface); let node_type = graph_layer.horizontal_layer_flow().nth(1); if let Some(node_id) = node_type { - let (output_type, _) = self.network_interface.output_type(&node_id, 0, &self.selection_network_path); + let (output_type, _) = self.network_interface.output_type(&OutputConnector::node(node_id, 0), &self.selection_network_path); Some(format!("type:{}", output_type.nested_type())) } else { None @@ -2905,7 +2981,7 @@ impl DocumentMessageHandler { /// Create a network interface with a single export fn default_document_network_interface() -> NodeNetworkInterface { let mut network_interface = NodeNetworkInterface::default(); - network_interface.add_export(TaggedValue::ArtboardGroup(graphene_std::ArtboardGroupTable::default()), -1, "", &[]); + network_interface.add_export(TaggedValue::Artboard(Default::default()), -1, "", &[]); network_interface } @@ -2937,10 +3013,10 @@ fn quad_to_path_lib_segments(quad: Quad) -> Vec { } fn click_targets_to_path_lib_segments<'a>(click_targets: impl Iterator, transform: DAffine2) -> Vec { - let segment = |bezier: bezier_rs::Bezier| match bezier.handles { - bezier_rs::BezierHandles::Linear => path_bool_lib::PathSegment::Line(bezier.start, bezier.end), - bezier_rs::BezierHandles::Quadratic { handle } => path_bool_lib::PathSegment::Quadratic(bezier.start, handle, bezier.end), - bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => path_bool_lib::PathSegment::Cubic(bezier.start, handle_start, handle_end, bezier.end), + let segment = |bezier: PathSeg| match bezier { + PathSeg::Line(line) => path_bool_lib::PathSegment::Line(point_to_dvec2(line.p0), point_to_dvec2(line.p1)), + PathSeg::Quad(quad_bez) => path_bool_lib::PathSegment::Quadratic(point_to_dvec2(quad_bez.p0), point_to_dvec2(quad_bez.p1), point_to_dvec2(quad_bez.p2)), + PathSeg::Cubic(cubic_bez) => path_bool_lib::PathSegment::Cubic(point_to_dvec2(cubic_bez.p0), point_to_dvec2(cubic_bez.p1), point_to_dvec2(cubic_bez.p2), point_to_dvec2(cubic_bez.p3)), }; click_targets .filter_map(|target| { @@ -2951,7 +3027,7 @@ fn click_targets_to_path_lib_segments<'a>(click_targets: impl Iterator ClickXRayIter<'a> { /// Handles the checking of the layer where the target is a rect or path fn check_layer_area_target(&mut self, click_targets: Option<&Vec>, clip: bool, layer: LayerNodeIdentifier, path: Vec, transform: DAffine2) -> XRayResult { - // Convert back to Bezier-rs types for intersections + // Convert back to Kurbo types for intersections let segment = |bezier: &path_bool_lib::PathSegment| match *bezier { - path_bool_lib::PathSegment::Line(start, end) => bezier_rs::Bezier::from_linear_dvec2(start, end), - path_bool_lib::PathSegment::Cubic(start, h1, h2, end) => bezier_rs::Bezier::from_cubic_dvec2(start, h1, h2, end), - path_bool_lib::PathSegment::Quadratic(start, h1, end) => bezier_rs::Bezier::from_quadratic_dvec2(start, h1, end), + path_bool_lib::PathSegment::Line(start, end) => PathSeg::Line(Line::new(dvec2_to_point(start), dvec2_to_point(end))), + path_bool_lib::PathSegment::Cubic(start, h1, h2, end) => PathSeg::Cubic(CubicBez::new(dvec2_to_point(start), dvec2_to_point(h1), dvec2_to_point(h2), dvec2_to_point(end))), + path_bool_lib::PathSegment::Quadratic(start, h1, end) => PathSeg::Quad(QuadBez::new(dvec2_to_point(start), dvec2_to_point(h1), dvec2_to_point(end))), path_bool_lib::PathSegment::Arc(_, _, _, _, _, _, _) => unimplemented!(), }; let get_clip = || path.iter().map(segment); @@ -3027,7 +3103,10 @@ impl<'a> ClickXRayIter<'a> { XRayTarget::Quad(quad) => self.check_layer_area_target(click_targets, clip, layer, quad_to_path_lib_segments(*quad), transform), XRayTarget::Path(path) => self.check_layer_area_target(click_targets, clip, layer, path.clone(), transform), XRayTarget::Polygon(polygon) => { - let polygon = polygon.iter_closed().map(|line| path_bool_lib::PathSegment::Line(line.start, line.end)).collect(); + let polygon = polygon + .iter_closed() + .map(|line| path_bool_lib::PathSegment::Line(point_to_dvec2(line.start()), point_to_dvec2(line.end()))) + .collect(); self.check_layer_area_target(click_targets, clip, layer, polygon, transform) } } diff --git a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs index 31ea831218..8ebde695b5 100644 --- a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs +++ b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs @@ -2,13 +2,14 @@ use super::utility_types::TransformIn; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::NodeTemplate; use crate::messages::prelude::*; -use bezier_rs::Subpath; use glam::{DAffine2, IVec2}; use graph_craft::document::NodeId; use graphene_std::Artboard; use graphene_std::brush::brush_stroke::BrushStroke; use graphene_std::raster::BlendMode; -use graphene_std::raster_types::{CPU, RasterDataTable}; +use graphene_std::raster_types::{CPU, Raster}; +use graphene_std::subpath::Subpath; +use graphene_std::table::Table; use graphene_std::text::{Font, TypesettingConfig}; use graphene_std::vector::PointId; use graphene_std::vector::VectorModificationType; @@ -69,7 +70,7 @@ pub enum GraphOperationMessage { }, NewBitmapLayer { id: NodeId, - image_frame: RasterDataTable, + image_frame: Table>, parent: LayerNodeIdentifier, insert_index: usize, }, diff --git a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs index b7ea613323..5bf6cce032 100644 --- a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs +++ b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs @@ -174,7 +174,7 @@ impl MessageHandler> for GraphOperationMessage::NewVectorLayer { id, subpaths, parent, insert_index } => { let mut modify_inputs = ModifyInputsContext::new(network_interface, responses); let layer = modify_inputs.create_layer(id); - modify_inputs.insert_vector_data(subpaths, layer, true, true, true); + modify_inputs.insert_vector(subpaths, layer, true, true, true); network_interface.move_layer_to_stack(layer, parent, insert_index, &[]); responses.add(NodeGraphMessage::RunDocumentGraph); } @@ -349,7 +349,7 @@ fn import_usvg_node(modify_inputs: &mut ModifyInputsContext, node: &usvg::Node, let subpaths = convert_usvg_path(path); let bounds = subpaths.iter().filter_map(|subpath| subpath.bounding_box()).reduce(Quad::combine_bounds).unwrap_or_default(); - modify_inputs.insert_vector_data(subpaths, layer, true, path.fill().is_some(), path.stroke().is_some()); + modify_inputs.insert_vector(subpaths, layer, true, path.fill().is_some(), path.stroke().is_some()); if let Some(transform_node_id) = modify_inputs.existing_node_id("Transform", true) { transform_utils::update_transform(modify_inputs.network_interface, &transform_node_id, transform * usvg_transform(node.abs_transform())); @@ -426,7 +426,6 @@ fn apply_usvg_fill(fill: &usvg::Fill, modify_inputs: &mut ModifyInputsContext, t Fill::Gradient(Gradient { start, end, - transform: DAffine2::IDENTITY, gradient_type: GradientType::Linear, stops, }) @@ -453,7 +452,6 @@ fn apply_usvg_fill(fill: &usvg::Fill, modify_inputs: &mut ModifyInputsContext, t Fill::Gradient(Gradient { start, end, - transform: DAffine2::IDENTITY, gradient_type: GradientType::Radial, stops, }) diff --git a/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs b/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs index 2b3639516d..387b5502ef 100644 --- a/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs +++ b/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs @@ -1,8 +1,8 @@ use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeNetworkInterface}; -use bezier_rs::Subpath; use glam::{DAffine2, DVec2}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; +use graphene_std::subpath::Subpath; use graphene_std::vector::PointId; /// Convert an affine transform into the tuple `(scale, angle, translation, shear)` assuming `shear.y = 0`. @@ -91,6 +91,32 @@ pub fn get_current_normalized_pivot(inputs: &[NodeInput]) -> DVec2 { if let Some(&TaggedValue::DVec2(pivot)) = inputs[5].as_value() { pivot } else { DVec2::splat(0.5) } } +/// Expand a bounds to avoid div zero errors +fn clamp_bounds(bounds_min: DVec2, mut bounds_max: DVec2) -> [DVec2; 2] { + let bounds_size = bounds_max - bounds_min; + if bounds_size.x < 1e-10 { + bounds_max.x = bounds_min.x + 1.; + } + if bounds_size.y < 1e-10 { + bounds_max.y = bounds_min.y + 1.; + } + [bounds_min, bounds_max] +} +/// Returns corners of all subpaths +fn subpath_bounds(subpaths: &[Subpath]) -> [DVec2; 2] { + subpaths + .iter() + .filter_map(|subpath| subpath.bounding_box()) + .reduce(|b1, b2| [b1[0].min(b2[0]), b1[1].max(b2[1])]) + .unwrap_or_default() +} + +/// Returns corners of all subpaths (but expanded to avoid division-by-zero errors) +pub fn nonzero_subpath_bounds(subpaths: &[Subpath]) -> [DVec2; 2] { + let [bounds_min, bounds_max] = subpath_bounds(subpaths); + clamp_bounds(bounds_min, bounds_max) +} + #[cfg(test)] mod tests { use super::*; @@ -138,29 +164,3 @@ mod tests { } } } - -/// Expand a bounds to avoid div zero errors -fn clamp_bounds(bounds_min: DVec2, mut bounds_max: DVec2) -> [DVec2; 2] { - let bounds_size = bounds_max - bounds_min; - if bounds_size.x < 1e-10 { - bounds_max.x = bounds_min.x + 1.; - } - if bounds_size.y < 1e-10 { - bounds_max.y = bounds_min.y + 1.; - } - [bounds_min, bounds_max] -} -/// Returns corners of all subpaths -fn subpath_bounds(subpaths: &[Subpath]) -> [DVec2; 2] { - subpaths - .iter() - .filter_map(|subpath| subpath.bounding_box()) - .reduce(|b1, b2| [b1[0].min(b2[0]), b1[1].max(b2[1])]) - .unwrap_or_default() -} - -/// Returns corners of all subpaths (but expanded to avoid division-by-zero errors) -pub fn nonzero_subpath_bounds(subpaths: &[Subpath]) -> [DVec2; 2] { - let [bounds_min, bounds_max] = subpath_bounds(subpaths); - clamp_bounds(bounds_min, bounds_max) -} diff --git a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs index 85cce0c5c8..4079fefd32 100644 --- a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs +++ b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs @@ -3,7 +3,6 @@ use crate::messages::portfolio::document::node_graph::document_node_definitions: use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::{self, InputConnector, NodeNetworkInterface, OutputConnector}; use crate::messages::prelude::*; -use bezier_rs::Subpath; use glam::{DAffine2, IVec2}; use graph_craft::concrete; use graph_craft::document::value::TaggedValue; @@ -11,12 +10,14 @@ use graph_craft::document::{NodeId, NodeInput}; use graphene_std::Artboard; use graphene_std::brush::brush_stroke::BrushStroke; use graphene_std::raster::BlendMode; -use graphene_std::raster_types::{CPU, RasterDataTable}; +use graphene_std::raster_types::{CPU, Raster}; +use graphene_std::subpath::Subpath; +use graphene_std::table::Table; use graphene_std::text::{Font, TypesettingConfig}; +use graphene_std::vector::Vector; use graphene_std::vector::style::{Fill, Stroke}; use graphene_std::vector::{PointId, VectorModificationType}; -use graphene_std::vector::{VectorData, VectorDataTable}; -use graphene_std::{GraphicGroupTable, NodeInputDecleration}; +use graphene_std::{Graphic, NodeInputDecleration}; #[derive(PartialEq, Clone, Copy, Debug, serde::Serialize, serde::Deserialize)] pub enum TransformIn { @@ -130,11 +131,11 @@ impl<'a> ModifyInputsContext<'a> { /// Creates an artboard as the primary export for the document network pub fn create_artboard(&mut self, new_id: NodeId, artboard: Artboard) -> LayerNodeIdentifier { let artboard_node_template = resolve_document_node_type("Artboard").expect("Node").node_template_input_override([ - Some(NodeInput::value(TaggedValue::ArtboardGroup(graphene_std::ArtboardGroupTable::default()), true)), - Some(NodeInput::value(TaggedValue::GraphicGroup(graphene_std::GraphicGroupTable::default()), true)), + Some(NodeInput::value(TaggedValue::Artboard(Default::default()), true)), + Some(NodeInput::value(TaggedValue::Graphic(Default::default()), true)), Some(NodeInput::value(TaggedValue::DVec2(artboard.location.into()), false)), Some(NodeInput::value(TaggedValue::DVec2(artboard.dimensions.into()), false)), - Some(NodeInput::value(TaggedValue::Color(artboard.background), false)), + Some(NodeInput::value(TaggedValue::Color(Table::new_from_element(artboard.background)), false)), Some(NodeInput::value(TaggedValue::Bool(artboard.clip), false)), ]); self.network_interface.insert_node(new_id, artboard_node_template, &[]); @@ -143,7 +144,7 @@ impl<'a> ModifyInputsContext<'a> { pub fn insert_boolean_data(&mut self, operation: graphene_std::path_bool::BooleanOperation, layer: LayerNodeIdentifier) { let boolean = resolve_document_node_type("Boolean Operation").expect("Boolean node does not exist").node_template_input_override([ - Some(NodeInput::value(TaggedValue::GraphicGroup(graphene_std::GraphicGroupTable::default()), true)), + Some(NodeInput::value(TaggedValue::Graphic(Default::default()), true)), Some(NodeInput::value(TaggedValue::BooleanOperation(operation), false)), ]); @@ -152,12 +153,12 @@ impl<'a> ModifyInputsContext<'a> { self.network_interface.move_node_to_chain_start(&boolean_id, layer, &[]); } - pub fn insert_vector_data(&mut self, subpaths: Vec>, layer: LayerNodeIdentifier, include_transform: bool, include_fill: bool, include_stroke: bool) { - let vector_data = VectorDataTable::new(VectorData::from_subpaths(subpaths, true)); + pub fn insert_vector(&mut self, subpaths: Vec>, layer: LayerNodeIdentifier, include_transform: bool, include_fill: bool, include_stroke: bool) { + let vector = Table::new_from_element(Vector::from_subpaths(subpaths, true)); let shape = resolve_document_node_type("Path") .expect("Path node does not exist") - .node_template_input_override([Some(NodeInput::value(TaggedValue::VectorData(vector_data), false))]); + .node_template_input_override([Some(NodeInput::value(TaggedValue::Vector(vector), false))]); let shape_id = NodeId::new(); self.network_interface.insert_node(shape_id, shape, &[]); self.network_interface.move_node_to_chain_start(&shape_id, layer, &[]); @@ -198,6 +199,7 @@ impl<'a> ModifyInputsContext<'a> { Some(NodeInput::value(TaggedValue::OptionalF64(typesetting.max_width), false)), Some(NodeInput::value(TaggedValue::OptionalF64(typesetting.max_height), false)), Some(NodeInput::value(TaggedValue::F64(typesetting.tilt), false)), + Some(NodeInput::value(TaggedValue::TextAlign(typesetting.align), false)), ]); let text_id = NodeId::new(); @@ -217,11 +219,11 @@ impl<'a> ModifyInputsContext<'a> { self.network_interface.move_node_to_chain_start(&stroke_id, layer, &[]); } - pub fn insert_image_data(&mut self, image_frame: RasterDataTable, layer: LayerNodeIdentifier) { + pub fn insert_image_data(&mut self, image_frame: Table>, layer: LayerNodeIdentifier) { let transform = resolve_document_node_type("Transform").expect("Transform node does not exist").default_node_template(); let image = resolve_document_node_type("Image Value") .expect("ImageValue node does not exist") - .node_template_input_override([Some(NodeInput::value(TaggedValue::None, false)), Some(NodeInput::value(TaggedValue::RasterData(image_frame), false))]); + .node_template_input_override([Some(NodeInput::value(TaggedValue::None, false)), Some(NodeInput::value(TaggedValue::Raster(image_frame), false))]); let image_id = NodeId::new(); self.network_interface.insert_node(image_id, image, &[]); @@ -261,7 +263,7 @@ impl<'a> ModifyInputsContext<'a> { } /// Gets the node id of a node with a specific reference (name) that is upstream (leftward) from the layer node, but before reaching another upstream layer stack. - /// For example, if given a group layer, this would find a requested "Transform" or "Boolean Operation" node in its chain, between the group layer and its layer stack child contents. + /// For example, if given a parent layer, this would find a requested "Transform" or "Boolean Operation" node in its chain, between the parent layer and its layer stack child contents. /// It would also travel up an entire layer that's not fed by a stack until reaching the generator node, such as a "Rectangle" or "Path" layer. pub fn locate_node_in_layer_chain(reference_name: &str, left_of_layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { let upstream = network_interface.upstream_flow_back_from_nodes(vec![left_of_layer.to_node()], &[], network_interface::FlowType::HorizontalFlow); @@ -294,14 +296,15 @@ impl<'a> ModifyInputsContext<'a> { pub fn create_node(&mut self, reference: &str) -> Option { let output_layer = self.get_output_layer()?; let Some(node_definition) = resolve_document_node_type(reference) else { - log::error!("Node type {} does not exist in ModifyInputsContext::existing_node_id", reference); + log::error!("Node type {reference} does not exist in ModifyInputsContext::existing_node_id"); return None; }; - // If inserting a path node, insert a Flatten Path if the type is a graphic group. - // TODO: Allow the path node to operate on Graphic Group data by utilizing the reference for each vector data in a group. + + // If inserting a 'Path' node, insert a 'Flatten Path' node if the type is `Graphic`. + // TODO: Allow the 'Path' node to operate on table data by utilizing the reference (index or ID?) for each row. if node_definition.identifier == "Path" { let layer_input_type = self.network_interface.input_type(&InputConnector::node(output_layer.to_node(), 1), &[]).0.nested_type().clone(); - if layer_input_type == concrete!(GraphicGroupTable) { + if layer_input_type == concrete!(Table) { let Some(flatten_path_definition) = resolve_document_node_type("Flatten Path") else { log::error!("Flatten Path does not exist in ModifyInputsContext::existing_node_id"); return None; @@ -326,11 +329,11 @@ impl<'a> ModifyInputsContext<'a> { match &fill { Fill::None => { let input_connector = InputConnector::node(fill_node_id, backup_color_index); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::OptionalColor(None), false), true); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(Table::new()), false), true); } Fill::Solid(color) => { let input_connector = InputConnector::node(fill_node_id, backup_color_index); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::OptionalColor(Some(*color)), false), true); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(Table::new_from_element(*color)), false), true); } Fill::Gradient(gradient) => { let input_connector = InputConnector::node(fill_node_id, backup_gradient_index); @@ -369,8 +372,10 @@ impl<'a> ModifyInputsContext<'a> { pub fn stroke_set(&mut self, stroke: Stroke) { let Some(stroke_node_id) = self.existing_node_id("Stroke", true) else { return }; - let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::ColorInput::>::INDEX); - self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::OptionalColor(stroke.color), false), true); + let stroke_color = if let Some(color) = stroke.color { Table::new_from_element(color) } else { Table::new() }; + + let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::ColorInput::INDEX); + self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Color(stroke_color), false), true); let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::WeightInput::INDEX); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64(stroke.weight), false), true); let input_connector = InputConnector::node(stroke_node_id, graphene_std::vector::stroke::AlignInput::INDEX); diff --git a/editor/src/messages/portfolio/document/mod.rs b/editor/src/messages/portfolio/document/mod.rs index 4099a584f9..767126b248 100644 --- a/editor/src/messages/portfolio/document/mod.rs +++ b/editor/src/messages/portfolio/document/mod.rs @@ -1,6 +1,7 @@ mod document_message; mod document_message_handler; +pub mod data_panel; pub mod graph_operation; pub mod navigation; pub mod node_graph; diff --git a/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs b/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs index e01e1195e1..259b60e995 100644 --- a/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs +++ b/editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs @@ -139,7 +139,7 @@ impl MessageHandler> for Navigat let transformed_delta = document_to_viewport.inverse().transform_vector2(delta); ptz.pan += transformed_delta; - responses.add(BroadcastEvent::CanvasTransformed); + responses.add(EventMessage::CanvasTransformed); responses.add(DocumentMessage::PTZUpdate); } NavigationMessage::CanvasPanAbortPrepare { x_not_y_axis } => { @@ -286,7 +286,7 @@ impl MessageHandler> for Navigat ptz.flip = !ptz.flip; responses.add(DocumentMessage::PTZUpdate); - responses.add(BroadcastEvent::CanvasTransformed); + responses.add(EventMessage::CanvasTransformed); responses.add(MenuBarMessage::SendLayout); responses.add(PortfolioMessage::UpdateDocumentWidgets); } @@ -325,7 +325,7 @@ impl MessageHandler> for Navigat self.navigation_operation = NavigationOperation::None; // Send the final messages to close out the operation - responses.add(BroadcastEvent::CanvasTransformed); + responses.add(EventMessage::CanvasTransformed); responses.add(ToolMessage::UpdateCursor); responses.add(ToolMessage::UpdateHints); responses.add(NavigateToolMessage::End); diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs index 06bec125ea..59301b2701 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs @@ -19,11 +19,12 @@ use graph_craft::document::*; use graphene_std::brush::brush_cache::BrushCache; use graphene_std::extract_xy::XY; use graphene_std::raster::{CellularDistanceFunction, CellularReturnType, Color, DomainWarpType, FractalType, NoiseType, RedGreenBlueAlpha}; -use graphene_std::raster_types::{CPU, RasterDataTable}; +use graphene_std::raster_types::{CPU, Raster}; +use graphene_std::table::Table; use graphene_std::text::{Font, TypesettingConfig}; #[allow(unused_imports)] use graphene_std::transform::Footprint; -use graphene_std::vector::VectorDataTable; +use graphene_std::vector::Vector; use graphene_std::*; use std::collections::{HashMap, HashSet, VecDeque}; @@ -45,7 +46,7 @@ impl NodePropertiesContext<'_> { return None; }; widget_override_lambda(*node_id, index, self) - .map_err(|error| log::error!("Error in widget override lambda: {}", error)) + .map_err(|error| log::error!("Error in widget override lambda: {error}")) .ok() } else { None @@ -85,7 +86,7 @@ fn static_nodes() -> Vec { let custom = vec![ // TODO: Auto-generate this from its proto node macro DocumentNodeDefinition { - identifier: "Identity", + identifier: "Passthrough", category: "General", node_template: NodeTemplate { document_node: DocumentNode { @@ -94,13 +95,13 @@ fn static_nodes() -> Vec { ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("In", "TODO").into()], + input_metadata: vec![("Content", "TODO").into()], output_names: vec!["Out".to_string()], ..Default::default() }, }, - description: Cow::Borrowed("Passes-through the input value without changing it. This is useful for rerouting wires for organization purposes."), - properties: Some("identity_properties"), + description: Cow::Borrowed("Returns the input value without changing it. This is useful for rerouting wires for organization purposes."), + properties: None, }, // TODO: Auto-generate this from its proto node macro DocumentNodeDefinition { @@ -110,7 +111,7 @@ fn static_nodes() -> Vec { document_node: DocumentNode { implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER), inputs: vec![NodeInput::value(TaggedValue::None, true)], - manual_composition: Some(generic!(T)), + call_argument: generic!(T), skip_deduplication: true, ..Default::default() }, @@ -150,19 +151,19 @@ fn static_nodes() -> Vec { DocumentNode { inputs: vec![NodeInput::network(generic!(T), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(1), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, ] @@ -226,38 +227,41 @@ fn static_nodes() -> Vec { node_template: NodeTemplate { document_node: DocumentNode { implementation: DocumentNodeImplementation::Network(NodeNetwork { - exports: vec![NodeInput::node(NodeId(3), 0)], + exports: vec![NodeInput::node(NodeId(4), 0)], nodes: [ - // Secondary (left) input type coercion - DocumentNode { - inputs: vec![NodeInput::network(generic!(T), 1)], - implementation: DocumentNodeImplementation::ProtoNode(graphic_element::to_element::IDENTIFIER), - manual_composition: Some(concrete!(Context)), - ..Default::default() - }, // Primary (bottom) input type coercion DocumentNode { inputs: vec![NodeInput::network(generic!(T), 0)], - implementation: DocumentNodeImplementation::ProtoNode(graphic_element::to_group::IDENTIFIER), - manual_composition: Some(concrete!(Context)), + implementation: DocumentNodeImplementation::ProtoNode(graphic::to_graphic::IDENTIFIER), + call_argument: concrete!(Context), + ..Default::default() + }, + // Secondary (left) input type coercion + DocumentNode { + inputs: vec![NodeInput::network(generic!(T), 1)], + implementation: DocumentNodeImplementation::ProtoNode(graphic::wrap_graphic::IDENTIFIER), + call_argument: concrete!(Context), + ..Default::default() + }, + // Store the ID of the parent node (which encapsulates this sub-network) in each row we are extending the table with. + DocumentNode { + inputs: vec![NodeInput::node(NodeId(1), 0), NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath)], + implementation: DocumentNodeImplementation::ProtoNode(graphic::source_node_id::IDENTIFIER), + call_argument: concrete!(Context), ..Default::default() }, // The monitor node is used to display a thumbnail in the UI DocumentNode { - inputs: vec![NodeInput::node(NodeId(0), 0)], + inputs: vec![NodeInput::node(NodeId(2), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER), - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), skip_deduplication: true, ..Default::default() }, DocumentNode { - manual_composition: Some(generic!(T)), - inputs: vec![ - NodeInput::node(NodeId(1), 0), - NodeInput::node(NodeId(2), 0), - NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath), - ], - implementation: DocumentNodeImplementation::ProtoNode(graphic_element::layer::IDENTIFIER), + call_argument: generic!(T), + inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(3), 0)], + implementation: DocumentNodeImplementation::ProtoNode(graphic::extend::IDENTIFIER), ..Default::default() }, ] @@ -268,13 +272,13 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::GraphicGroup(GraphicGroupTable::default()), true), - NodeInput::value(TaggedValue::GraphicGroup(GraphicGroupTable::default()), true), + NodeInput::value(TaggedValue::Graphic(Default::default()), true), + NodeInput::value(TaggedValue::Graphic(Default::default()), true), ], ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Graphical Data", "TODO").into(), ("Over", "TODO").into()], + input_metadata: vec![("Base", "TODO").into(), ("Content", "TODO").into()], output_names: vec!["Out".to_string()], node_type_metadata: NodeTypePersistentMetadata::layer(IVec2::new(0, 0)), network_metadata: Some(NodeNetworkMetadata { @@ -282,16 +286,24 @@ fn static_nodes() -> Vec { node_metadata: [ DocumentNodeMetadata { persistent_metadata: DocumentNodePersistentMetadata { - display_name: "To Element".to_string(), - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -1)), + display_name: "To Graphic".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -3)), ..Default::default() }, ..Default::default() }, DocumentNodeMetadata { persistent_metadata: DocumentNodePersistentMetadata { - display_name: "To Group".to_string(), - node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -3)), + display_name: "Wrap Graphic".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -1)), + ..Default::default() + }, + ..Default::default() + }, + DocumentNodeMetadata { + persistent_metadata: DocumentNodePersistentMetadata { + display_name: "Source Node ID".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -1)), ..Default::default() }, ..Default::default() @@ -306,7 +318,7 @@ fn static_nodes() -> Vec { }, DocumentNodeMetadata { persistent_metadata: DocumentNodePersistentMetadata { - display_name: "Layer".to_string(), + display_name: "Extend".to_string(), node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -3)), ..Default::default() }, @@ -324,7 +336,7 @@ fn static_nodes() -> Vec { ..Default::default() }, }, - description: Cow::Borrowed("Merge attaches a layer to the stack's group."), + description: Cow::Borrowed("Merges new content as an entry into the graphic table that represents a layer compositing stack."), properties: None, }, DocumentNodeDefinition { @@ -333,12 +345,12 @@ fn static_nodes() -> Vec { node_template: NodeTemplate { document_node: DocumentNode { implementation: DocumentNodeImplementation::Network(NodeNetwork { - exports: vec![NodeInput::node(NodeId(2), 0)], + exports: vec![NodeInput::node(NodeId(3), 0)], nodes: [ // Ensure this ID is kept in sync with the ID in set_alias so that the name input is kept in sync with the alias DocumentNode { - manual_composition: Some(generic!(T)), - implementation: DocumentNodeImplementation::ProtoNode(graphic_element::to_artboard::IDENTIFIER), + call_argument: generic!(T), + implementation: DocumentNodeImplementation::ProtoNode(artboard::create_artboard::IDENTIFIER), inputs: vec![ NodeInput::network(concrete!(TaggedValue), 1), NodeInput::value(TaggedValue::String(String::from("Artboard")), false), @@ -349,23 +361,29 @@ fn static_nodes() -> Vec { ], ..Default::default() }, + // Store the ID of the parent node (which encapsulates this sub-network) in each row we are extending the table with. + DocumentNode { + inputs: vec![NodeInput::node(NodeId(0), 0), NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath)], + implementation: DocumentNodeImplementation::ProtoNode(graphic::source_node_id::IDENTIFIER), + call_argument: concrete!(Context), + ..Default::default() + }, // The monitor node is used to display a thumbnail in the UI. // TODO: Check if thumbnail is reversed DocumentNode { - inputs: vec![NodeInput::node(NodeId(0), 0)], + inputs: vec![NodeInput::node(NodeId(1), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), skip_deduplication: true, ..Default::default() }, DocumentNode { - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), inputs: vec![ - NodeInput::network(graphene_std::Type::Fn(Box::new(concrete!(Context)), Box::new(concrete!(ArtboardGroupTable))), 0), - NodeInput::node(NodeId(1), 0), - NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath), + NodeInput::network(graphene_std::Type::Fn(Box::new(concrete!(Context)), Box::new(concrete!(Table))), 0), + NodeInput::node(NodeId(2), 0), ], - implementation: DocumentNodeImplementation::ProtoNode(graphic_element::append_artboard::IDENTIFIER), + implementation: DocumentNodeImplementation::ProtoNode(graphic::extend::IDENTIFIER), ..Default::default() }, ] @@ -376,19 +394,19 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::ArtboardGroup(ArtboardGroupTable::default()), true), - NodeInput::value(TaggedValue::GraphicGroup(GraphicGroupTable::default()), true), + NodeInput::value(TaggedValue::Artboard(Default::default()), true), + NodeInput::value(TaggedValue::Graphic(Default::default()), true), NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false), NodeInput::value(TaggedValue::DVec2(DVec2::new(1920., 1080.)), false), - NodeInput::value(TaggedValue::Color(Color::WHITE), false), + NodeInput::value(TaggedValue::Color(Table::new_from_element(Color::WHITE)), false), NodeInput::value(TaggedValue::Bool(false), false), ], ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { input_metadata: vec![ - ("Artboards", "TODO").into(), - InputMetadata::with_name_description_override("Contents", "TODO", WidgetOverride::Hidden), + ("Base", "TODO").into(), + InputMetadata::with_name_description_override("Content", "TODO", WidgetOverride::Hidden), InputMetadata::with_name_description_override( "Location", "TODO", @@ -421,7 +439,15 @@ fn static_nodes() -> Vec { node_metadata: [ DocumentNodeMetadata { persistent_metadata: DocumentNodePersistentMetadata { - display_name: "To Artboard".to_string(), + display_name: "Create Artboard".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-21, -3)), + ..Default::default() + }, + ..Default::default() + }, + DocumentNodeMetadata { + persistent_metadata: DocumentNodePersistentMetadata { + display_name: "Source Node ID".to_string(), node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -3)), ..Default::default() }, @@ -437,7 +463,7 @@ fn static_nodes() -> Vec { }, DocumentNodeMetadata { persistent_metadata: DocumentNodePersistentMetadata { - display_name: "Append Artboards".to_string(), + display_name: "Extend".to_string(), node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -4)), ..Default::default() }, @@ -468,13 +494,13 @@ fn static_nodes() -> Vec { nodes: [ DocumentNode { inputs: vec![NodeInput::value(TaggedValue::None, false), NodeInput::scope("editor-api"), NodeInput::network(concrete!(String), 1)], - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::load_resource::IDENTIFIER), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(0), 0)], - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::decode_image::IDENTIFIER), ..Default::default() }, @@ -541,7 +567,7 @@ fn static_nodes() -> Vec { ..Default::default() }, DocumentNode { - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), ..Default::default() @@ -591,7 +617,7 @@ fn static_nodes() -> Vec { description: Cow::Borrowed("Creates a new canvas object."), properties: None, }, - #[cfg(all(feature = "gpu", target_arch = "wasm32"))] + #[cfg(all(feature = "gpu", target_family = "wasm"))] DocumentNodeDefinition { identifier: "Rasterize", category: "Raster", @@ -603,20 +629,20 @@ fn static_nodes() -> Vec { DocumentNode { inputs: vec![NodeInput::scope("editor-api")], implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::create_surface::IDENTIFIER), - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), skip_deduplication: true, ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::network(generic!(T), 0), NodeInput::network(concrete!(Footprint), 1), NodeInput::node(NodeId(1), 0)], implementation: DocumentNodeImplementation::ProtoNode(wasm_application_io::rasterize::IDENTIFIER), - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), ..Default::default() }, ] @@ -627,11 +653,11 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::VectorData(VectorDataTable::default()), true), + NodeInput::value(TaggedValue::Vector(Default::default()), true), NodeInput::value( TaggedValue::Footprint(Footprint { - transform: DAffine2::from_scale_angle_translation(DVec2::new(100., 100.), 0., DVec2::new(0., 0.)), - resolution: UVec2::new(100, 100), + transform: DAffine2::from_scale_angle_translation(DVec2::new(1000., 1000.), 0., DVec2::new(0., 0.)), + resolution: UVec2::new(1000, 1000), ..Default::default() }), false, @@ -681,7 +707,7 @@ fn static_nodes() -> Vec { ..Default::default() }, }, - description: Cow::Borrowed("Rasterizes the given vector data"), + description: Cow::Borrowed("TODO"), properties: None, }, DocumentNodeDefinition { @@ -689,7 +715,7 @@ fn static_nodes() -> Vec { category: "Raster: Pattern", node_template: NodeTemplate { document_node: DocumentNode { - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::std_nodes::noise_pattern::IDENTIFIER), inputs: vec![ NodeInput::value(TaggedValue::None, false), @@ -744,6 +770,7 @@ fn static_nodes() -> Vec { document_node: DocumentNode { implementation: DocumentNodeImplementation::Network(NodeNetwork { exports: vec![ + NodeInput::value(TaggedValue::None, false), NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(1), 0), NodeInput::node(NodeId(2), 0), @@ -752,38 +779,38 @@ fn static_nodes() -> Vec { nodes: [ DocumentNode { inputs: vec![ - NodeInput::network(concrete!(RasterDataTable), 0), + NodeInput::network(concrete!(Table>), 0), NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Red), false), ], implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![ - NodeInput::network(concrete!(RasterDataTable), 0), + NodeInput::network(concrete!(Table>), 0), NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Green), false), ], implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![ - NodeInput::network(concrete!(RasterDataTable), 0), + NodeInput::network(concrete!(Table>), 0), NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Blue), false), ], implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![ - NodeInput::network(concrete!(RasterDataTable), 0), + NodeInput::network(concrete!(Table>), 0), NodeInput::value(TaggedValue::RedGreenBlueAlpha(RedGreenBlueAlpha::Alpha), false), ], implementation: DocumentNodeImplementation::ProtoNode(raster_nodes::adjustments::extract_channel::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, ] @@ -793,13 +820,12 @@ fn static_nodes() -> Vec { .collect(), ..Default::default() }), - inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)], + inputs: vec![NodeInput::value(TaggedValue::Raster(Default::default()), true)], ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { input_metadata: vec![("Image", "TODO").into()], - output_names: vec!["Red".to_string(), "Green".to_string(), "Blue".to_string(), "Alpha".to_string()], - has_primary_output: false, + output_names: vec!["".to_string(), "Red".to_string(), "Green".to_string(), "Blue".to_string(), "Alpha".to_string()], network_metadata: Some(NodeNetworkMetadata { persistent_metadata: NodeNetworkPersistentMetadata { node_metadata: [ @@ -851,23 +877,23 @@ fn static_nodes() -> Vec { properties: None, }, DocumentNodeDefinition { - identifier: "Split Coordinate", + identifier: "Split Vec2", category: "Math: Vector", node_template: NodeTemplate { document_node: DocumentNode { implementation: DocumentNodeImplementation::Network(NodeNetwork { - exports: vec![NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(1), 0)], + exports: vec![NodeInput::value(TaggedValue::None, false), NodeInput::node(NodeId(0), 0), NodeInput::node(NodeId(1), 0)], nodes: [ DocumentNode { - inputs: vec![NodeInput::network(concrete!(RasterDataTable), 0), NodeInput::value(TaggedValue::XY(XY::X), false)], + inputs: vec![NodeInput::network(concrete!(Table>), 0), NodeInput::value(TaggedValue::XY(XY::X), false)], implementation: DocumentNodeImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { - inputs: vec![NodeInput::network(concrete!(RasterDataTable), 0), NodeInput::value(TaggedValue::XY(XY::Y), false)], + inputs: vec![NodeInput::network(concrete!(Table>), 0), NodeInput::value(TaggedValue::XY(XY::Y), false)], implementation: DocumentNodeImplementation::ProtoNode(extract_xy::extract_xy::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, ] @@ -878,13 +904,12 @@ fn static_nodes() -> Vec { ..Default::default() }), - inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)], + inputs: vec![NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), true)], ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Coordinate", "TODO").into()], - output_names: vec!["X".to_string(), "Y".to_string()], - has_primary_output: false, + input_metadata: vec![("Vec2", "TODO").into()], + output_names: vec!["".to_string(), "X".to_string(), "Y".to_string()], network_metadata: Some(NodeNetworkMetadata { persistent_metadata: NodeNetworkPersistentMetadata { node_metadata: [ @@ -917,7 +942,7 @@ fn static_nodes() -> Vec { }, }, description: Cow::Borrowed( - "Decomposes the X and Y components of a 2D coordinate.\n\nThe inverse of this node is \"Coordinate Value\", which can have either or both its X and Y exposed as graph inputs.", + "Decomposes the X and Y components of a vec2.\n\nThe inverse of this node is \"Vec2 Value\", which can have either or both its X and Y parameters exposed as graph inputs.", ), properties: None, }, @@ -931,11 +956,11 @@ fn static_nodes() -> Vec { exports: vec![NodeInput::node(NodeId(0), 0)], nodes: vec![DocumentNode { inputs: vec![ - NodeInput::network(concrete!(RasterDataTable), 0), + NodeInput::network(concrete!(Table>), 0), NodeInput::network(concrete!(Vec), 1), NodeInput::network(concrete!(BrushCache), 2), ], - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), implementation: DocumentNodeImplementation::ProtoNode(brush::brush::brush::IDENTIFIER), ..Default::default() }] @@ -946,7 +971,7 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true), + NodeInput::value(TaggedValue::Raster(Default::default()), true), NodeInput::value(TaggedValue::BrushStrokes(Vec::new()), false), NodeInput::value(TaggedValue::BrushCache(BrushCache::default()), false), ], @@ -985,8 +1010,8 @@ fn static_nodes() -> Vec { node_template: NodeTemplate { document_node: DocumentNode { implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), - inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)], - manual_composition: Some(concrete!(Context)), + inputs: vec![NodeInput::value(TaggedValue::Raster(Default::default()), true)], + call_argument: concrete!(Context), ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { @@ -1004,8 +1029,8 @@ fn static_nodes() -> Vec { node_template: NodeTemplate { document_node: DocumentNode { implementation: DocumentNodeImplementation::ProtoNode(memo::impure_memo::IDENTIFIER), - inputs: vec![NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true)], - manual_composition: Some(concrete!(Context)), + inputs: vec![NodeInput::value(TaggedValue::Raster(Default::default()), true)], + call_argument: concrete!(Context), ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { @@ -1027,13 +1052,13 @@ fn static_nodes() -> Vec { exports: vec![NodeInput::node(NodeId(1), 0)], nodes: [ DocumentNode { - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), inputs: vec![NodeInput::scope("editor-api")], implementation: DocumentNodeImplementation::ProtoNode(wgpu_executor::create_gpu_surface::IDENTIFIER), ..Default::default() }, DocumentNode { - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::impure_memo::IDENTIFIER), ..Default::default() @@ -1083,6 +1108,86 @@ fn static_nodes() -> Vec { description: Cow::Borrowed("TODO"), properties: None, }, + #[cfg(feature = "gpu")] + DocumentNodeDefinition { + identifier: "Upload Texture", + category: "Debug: GPU", + node_template: NodeTemplate { + document_node: DocumentNode { + implementation: DocumentNodeImplementation::Network(NodeNetwork { + exports: vec![NodeInput::node(NodeId(2), 0)], + nodes: [ + DocumentNode { + inputs: vec![NodeInput::scope("editor-api")], + implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::ops::IntoNode<&WgpuExecutor>")), + ..Default::default() + }, + DocumentNode { + inputs: vec![NodeInput::network(concrete!(Table>), 0), NodeInput::node(NodeId(0), 0)], + call_argument: generic!(T), + implementation: DocumentNodeImplementation::ProtoNode(wgpu_executor::texture_upload::upload_texture::IDENTIFIER), + ..Default::default() + }, + DocumentNode { + call_argument: generic!(T), + inputs: vec![NodeInput::node(NodeId(1), 0)], + implementation: DocumentNodeImplementation::ProtoNode(memo::impure_memo::IDENTIFIER), + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), + ..Default::default() + }), + inputs: vec![NodeInput::value(TaggedValue::Raster(Default::default()), true)], + ..Default::default() + }, + persistent_node_metadata: DocumentNodePersistentMetadata { + output_names: vec!["Texture".to_string()], + network_metadata: Some(NodeNetworkMetadata { + persistent_metadata: NodeNetworkPersistentMetadata { + node_metadata: [ + DocumentNodeMetadata { + persistent_metadata: DocumentNodePersistentMetadata { + display_name: "Extract Executor".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, 0)), + ..Default::default() + }, + ..Default::default() + }, + DocumentNodeMetadata { + persistent_metadata: DocumentNodePersistentMetadata { + display_name: "Upload Texture".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(7, 0)), + ..Default::default() + }, + ..Default::default() + }, + DocumentNodeMetadata { + persistent_metadata: DocumentNodePersistentMetadata { + display_name: "Cache".to_string(), + node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(14, 0)), + ..Default::default() + }, + ..Default::default() + }, + ] + .into_iter() + .enumerate() + .map(|(id, node)| (NodeId(id as u64), node)) + .collect(), + ..Default::default() + }, + ..Default::default() + }), + ..Default::default() + }, + }, + description: Cow::Borrowed("TODO"), + properties: None, + }, DocumentNodeDefinition { identifier: "Extract", category: "Debug", @@ -1115,7 +1220,7 @@ fn static_nodes() -> Vec { // document_node: DocumentNode { // implementation: DocumentNodeImplementation::proto("graphene_core::raster::CurvesNode"), // inputs: vec![ - // NodeInput::value(TaggedValue::RasterData(RasterDataTable::default()), true), + // NodeInput::value(TaggedValue::Raster(Default::default()), true), // NodeInput::value(TaggedValue::Curve(Default::default()), false), // ], // ..Default::default() @@ -1138,9 +1243,9 @@ fn static_nodes() -> Vec { exports: vec![NodeInput::node(NodeId(1), 0)], nodes: vec![ DocumentNode { - inputs: vec![NodeInput::network(concrete!(VectorDataTable), 0)], + inputs: vec![NodeInput::network(concrete!(Table), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), skip_deduplication: true, ..Default::default() }, @@ -1150,7 +1255,7 @@ fn static_nodes() -> Vec { NodeInput::network(concrete!(graphene_std::vector::VectorModification), 1), NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath), ], - manual_composition: Some(generic!(T)), + call_argument: generic!(T), implementation: DocumentNodeImplementation::ProtoNode(vector::path_modify::IDENTIFIER), ..Default::default() }, @@ -1162,14 +1267,14 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::VectorData(VectorDataTable::default()), true), + NodeInput::value(TaggedValue::Vector(Default::default()), true), NodeInput::value(TaggedValue::VectorModification(Default::default()), false), ], ..Default::default() }, persistent_node_metadata: DocumentNodePersistentMetadata { - input_metadata: vec![("Vector Data", "TODO").into(), ("Modification", "TODO").into()], - output_names: vec!["Vector Data".to_string()], + input_metadata: vec![("Content", "TODO").into(), ("Modification", "TODO").into()], + output_names: vec!["Modified".to_string()], network_metadata: Some(NodeNetworkMetadata { persistent_metadata: NodeNetworkPersistentMetadata { node_metadata: [ @@ -1210,7 +1315,7 @@ fn static_nodes() -> Vec { node_template: NodeTemplate { document_node: DocumentNode { implementation: DocumentNodeImplementation::ProtoNode(text::text::IDENTIFIER), - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), inputs: vec![ NodeInput::scope("editor-api"), NodeInput::value(TaggedValue::String("Lorem ipsum".to_string()), false), @@ -1224,6 +1329,7 @@ fn static_nodes() -> Vec { NodeInput::value(TaggedValue::OptionalF64(TypesettingConfig::default().max_width), false), NodeInput::value(TaggedValue::OptionalF64(TypesettingConfig::default().max_height), false), NodeInput::value(TaggedValue::F64(TypesettingConfig::default().tilt), false), + NodeInput::value(TaggedValue::TextAlign(text::TextAlign::default()), false), NodeInput::value(TaggedValue::Bool(false), false), ], ..Default::default() @@ -1257,7 +1363,6 @@ fn static_nodes() -> Vec { "TODO", WidgetOverride::Number(NumberInputSettings { unit: Some(" px".to_string()), - min: Some(0.), step: Some(0.1), ..Default::default() }), @@ -1292,7 +1397,8 @@ fn static_nodes() -> Vec { ..Default::default() }), ), - ("Per-Glyph Instances", "Splits each text glyph into its own instance, i.e. row in the table of vector data.").into(), + InputMetadata::with_name_description_override("Align", "TODO", WidgetOverride::Custom("text_align".to_string())), + ("Per-Glyph Instances", "Splits each text glyph into its own row in the table of vector geometry.").into(), ], output_names: vec!["Vector".to_string()], ..Default::default() @@ -1319,7 +1425,7 @@ fn static_nodes() -> Vec { DocumentNode { inputs: vec![NodeInput::network(generic!(T), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::monitor::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), skip_deduplication: true, ..Default::default() }, @@ -1331,7 +1437,7 @@ fn static_nodes() -> Vec { NodeInput::network(concrete!(DVec2), 3), NodeInput::network(concrete!(DVec2), 4), ], - manual_composition: Some(concrete!(Context)), + call_argument: concrete!(Context), implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::transform::IDENTIFIER), ..Default::default() }, @@ -1414,27 +1520,27 @@ fn static_nodes() -> Vec { exports: vec![NodeInput::node(NodeId(3), 0)], nodes: vec![ DocumentNode { - inputs: vec![NodeInput::network(concrete!(VectorDataTable), 0), NodeInput::network(concrete!(vector::style::Fill), 1)], + inputs: vec![NodeInput::network(concrete!(Table), 0), NodeInput::network(concrete!(vector::style::Fill), 1)], implementation: DocumentNodeImplementation::ProtoNode(path_bool::boolean_operation::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(1), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(2), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, ] @@ -1445,7 +1551,7 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::GraphicGroup(GraphicGroupTable::default()), true), + NodeInput::value(TaggedValue::Graphic(Default::default()), true), NodeInput::value(TaggedValue::BooleanOperation(path_bool::BooleanOperation::Union), false), ], ..Default::default() @@ -1495,7 +1601,7 @@ fn static_nodes() -> Vec { }, ..Default::default() }), - input_metadata: vec![("Group of Paths", "TODO").into(), ("Operation", "TODO").into()], + input_metadata: vec![("Content", "TODO").into(), ("Operation", "TODO").into()], output_names: vec!["Vector".to_string()], ..Default::default() }, @@ -1512,14 +1618,14 @@ fn static_nodes() -> Vec { exports: vec![NodeInput::node(NodeId(4), 0)], nodes: [ DocumentNode { - inputs: vec![NodeInput::network(concrete!(graphene_std::vector::VectorDataTable), 0)], + inputs: vec![NodeInput::network(concrete!(Table), 0)], implementation: DocumentNodeImplementation::ProtoNode(vector::subpath_segment_lengths::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![ - NodeInput::network(concrete!(graphene_std::vector::VectorDataTable), 0), + NodeInput::network(concrete!(Table), 0), NodeInput::network(concrete!(vector::misc::PointSpacingType), 1), NodeInput::network(concrete!(f64), 2), NodeInput::network(concrete!(u32), 3), @@ -1529,25 +1635,25 @@ fn static_nodes() -> Vec { NodeInput::node(NodeId(0), 0), ], implementation: DocumentNodeImplementation::ProtoNode(vector::sample_polyline::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(1), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(2), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(3), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, ] @@ -1558,7 +1664,7 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::VectorData(graphene_std::vector::VectorDataTable::default()), true), + NodeInput::value(TaggedValue::Vector(Default::default()), true), NodeInput::value(TaggedValue::PointSpacingType(Default::default()), false), NodeInput::value(TaggedValue::F64(100.), false), NodeInput::value(TaggedValue::U32(100), false), @@ -1622,7 +1728,7 @@ fn static_nodes() -> Vec { ..Default::default() }), input_metadata: vec![ - ("Vector Data", "The shape to be resampled and converted into a polyline.").into(), + ("Content", "The shape to be resampled and converted into a polyline.").into(), ("Spacing", node_properties::SAMPLE_POLYLINE_TOOLTIP_SPACING).into(), InputMetadata::with_name_description_override( "Separation", @@ -1679,30 +1785,30 @@ fn static_nodes() -> Vec { nodes: [ DocumentNode { inputs: vec![ - NodeInput::network(concrete!(graphene_std::vector::VectorDataTable), 0), + NodeInput::network(concrete!(Table), 0), NodeInput::network(concrete!(f64), 1), NodeInput::network(concrete!(u32), 2), ], - manual_composition: Some(generic!(T)), + call_argument: generic!(T), implementation: DocumentNodeImplementation::ProtoNode(vector::poisson_disk_points::IDENTIFIER), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(memo::memo::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(1), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::freeze_real_time::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(2), 0)], implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::boundless_footprint::IDENTIFIER), - manual_composition: Some(generic!(T)), + call_argument: generic!(T), ..Default::default() }, ] @@ -1713,7 +1819,7 @@ fn static_nodes() -> Vec { ..Default::default() }), inputs: vec![ - NodeInput::value(TaggedValue::VectorData(graphene_std::vector::VectorDataTable::default()), true), + NodeInput::value(TaggedValue::Vector(Default::default()), true), NodeInput::value(TaggedValue::F64(10.), false), NodeInput::value(TaggedValue::U32(0), false), ], @@ -1765,7 +1871,7 @@ fn static_nodes() -> Vec { ..Default::default() }), input_metadata: vec![ - ("Vector Data", "TODO").into(), + ("Content", "TODO").into(), InputMetadata::with_name_description_override( "Separation Disk Diameter", "TODO", @@ -1817,13 +1923,9 @@ fn static_node_properties() -> NodeProperties { map.insert("rectangle_properties".to_string(), Box::new(node_properties::rectangle_properties)); map.insert("grid_properties".to_string(), Box::new(node_properties::grid_properties)); map.insert("sample_polyline_properties".to_string(), Box::new(node_properties::sample_polyline_properties)); - map.insert( - "identity_properties".to_string(), - Box::new(|_node_id, _context| node_properties::string_properties("The identity node passes its data through.")), - ); map.insert( "monitor_properties".to_string(), - Box::new(|_node_id, _context| node_properties::string_properties("The Monitor node is used by the editor to access the data flowing through it.")), + Box::new(|_node_id, _context| node_properties::string_properties("Used internally by the editor to obtain a layer thumbnail.")), ); map } @@ -1840,10 +1942,10 @@ fn static_input_properties() -> InputProperties { "string".to_string(), Box::new(|node_id, index, context| { let Some(value) = context.network_interface.input_data(&node_id, index, "string_properties", context.selection_network_path) else { - return Err(format!("Could not get string properties for node {}", node_id)); + return Err(format!("Could not get string properties for node {node_id}")); }; let Some(string) = value.as_str() else { - return Err(format!("Could not downcast string properties for node {}", node_id)); + return Err(format!("Could not downcast string properties for node {node_id}")); }; Ok(node_properties::string_properties(string)) }), @@ -1961,7 +2063,7 @@ fn static_input_properties() -> InputProperties { .and_then(|value| value.as_bool()) .unwrap_or_default(); - Ok(vec![node_properties::coordinate_widget( + Ok(vec![node_properties::vec2_widget( ParameterWidgetsInfo::new(node_id, index, true, context), &x, &y, @@ -2217,7 +2319,7 @@ fn static_input_properties() -> InputProperties { "spline_input".to_string(), Box::new(|node_id, index, context| { Ok(vec![LayoutGroup::Row { - widgets: node_properties::array_of_coordinates_widget(ParameterWidgetsInfo::new(node_id, index, true, context), TextInput::default().centered(true)), + widgets: node_properties::array_of_vec2_widget(ParameterWidgetsInfo::new(node_id, index, true, context), TextInput::default().centered(true)), }]) }), ); @@ -2324,6 +2426,13 @@ fn static_input_properties() -> InputProperties { )]) }), ); + map.insert( + "text_align".to_string(), + Box::new(|node_id, index, context| { + let choices = enum_choice::().for_socket(ParameterWidgetsInfo::new(node_id, index, true, context)).property_row(); + Ok(vec![choices]) + }), + ); map } diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs index 85ce4b5162..1bb1610791 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions/document_node_derive.rs @@ -59,8 +59,8 @@ pub(super) fn post_process_nodes(mut custom: Vec) -> Vec node_template: NodeTemplate { document_node: DocumentNode { inputs, - manual_composition: Some(input_type.clone()), - implementation: DocumentNodeImplementation::ProtoNode(id.clone().into()), + call_argument: (input_type.clone()), + implementation: DocumentNodeImplementation::ProtoNode(id.clone()), visible: true, skip_deduplication: false, ..Default::default() @@ -77,7 +77,6 @@ pub(super) fn post_process_nodes(mut custom: Vec) -> Vec }) .collect(), output_names: vec![output_type.to_string()], - has_primary_output: true, locked: false, ..Default::default() }, diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs index bd6c77d467..1432046a25 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message.rs @@ -18,7 +18,11 @@ pub enum NodeGraphMessage { }, AddPathNode, AddImport, + AddPrimaryImport, + AddSecondaryImport, AddExport, + AddPrimaryExport, + AddSecondaryExport, Init, SelectedNodesUpdated, Copy, @@ -63,6 +67,12 @@ pub enum NodeGraphMessage { set_to_exposed: bool, start_transaction: bool, }, + ExposeEncapsulatingPrimaryInput { + exposed: bool, + }, + ExposePrimaryExport { + exposed: bool, + }, InsertNode { node_id: NodeId, node_template: NodeTemplate, diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs index 8263edbace..6337a2566d 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs @@ -1,4 +1,4 @@ -use super::utility_types::{BoxSelection, ContextMenuInformation, DragStart, FrontendGraphInput, FrontendGraphOutput, FrontendNode}; +use super::utility_types::{BoxSelection, ContextMenuInformation, DragStart, FrontendNode}; use super::{document_node_definitions, node_properties}; use crate::consts::GRID_SIZE; use crate::messages::input_mapper::utility_types::macros::action_keys; @@ -17,17 +17,16 @@ use crate::messages::portfolio::document::utility_types::wires::{GraphWireStyle, use crate::messages::prelude::*; use crate::messages::tool::common_functionality::auto_panning::AutoPanning; use crate::messages::tool::common_functionality::graph_modification_utils::{self, get_clip_mode}; +use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed; use crate::messages::tool::tool_messages::tool_prelude::{Key, MouseMotion}; use crate::messages::tool::utility_types::{HintData, HintGroup, HintInfo}; -use bezier_rs::Subpath; use glam::{DAffine2, DVec2, IVec2}; -use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNodeImplementation, NodeId, NodeInput}; use graph_craft::proto::GraphErrors; use graphene_std::math::math_ext::QuadExt; -use graphene_std::vector::misc::subpath_to_kurbo_bezpath; +use graphene_std::vector::algorithms::bezpath_algorithms::bezpath_is_inside_bezpath; use graphene_std::*; -use kurbo::{Line, Point}; +use kurbo::{DEFAULT_ACCURACY, Shape}; use renderer::Quad; use std::cmp::Ordering; @@ -43,6 +42,7 @@ pub struct NodeGraphMessageContext<'a> { pub graph_fade_artwork_percentage: f64, pub navigation_handler: &'a NavigationMessageHandler, pub preferences: &'a PreferencesMessageHandler, + pub layers_panel_open: bool, } #[derive(Debug, Clone, ExtractField)] @@ -89,7 +89,7 @@ pub struct NodeGraphMessageHandler { reordering_import: Option, /// The index of the export that is being moved reordering_export: Option, - /// The end index of the moved port + /// The end index of the moved connector end_index: Option, /// Used to keep track of what nodes are sent to the front end so that only visible ones are sent to the frontend frontend_nodes: Vec, @@ -112,6 +112,7 @@ impl<'a> MessageHandler> for NodeG graph_fade_artwork_percentage, navigation_handler, preferences, + layers_panel_open, } = context; match message { @@ -126,48 +127,56 @@ impl<'a> MessageHandler> for NodeG responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![new_layer_id] }); } NodeGraphMessage::AddPathNode => { - let selected_nodes = network_interface.selected_nodes(); - let mut selected_layers = selected_nodes.selected_layers(network_interface.document_metadata()); - let first_layer = selected_layers.next(); - let second_layer = selected_layers.next(); - let has_single_selection = first_layer.is_some() && second_layer.is_none(); - - let compatible_type = first_layer.and_then(|layer| { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &network_interface); - graph_layer.horizontal_layer_flow().nth(1).and_then(|node_id| { - let (output_type, _) = network_interface.output_type(&node_id, 0, &[]); - Some(format!("type:{}", output_type.nested_type())) - }) - }); - - let is_compatible = compatible_type.as_deref() == Some("type:Instances"); - - if first_layer.is_some() && has_single_selection && is_compatible { - if let Some(layer) = first_layer { - let node_type = "Path".to_string(); - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &network_interface); - let is_modifiable = matches!(graph_layer.find_input("Path", 1), Some(TaggedValue::VectorModification(_))); - if !is_modifiable { - responses.add(NodeGraphMessage::CreateNodeInLayerWithTransaction { - node_type: node_type.clone(), - layer: LayerNodeIdentifier::new_unchecked(layer.to_node()), - }); - responses.add(BroadcastEvent::SelectionChanged); - } - } + if let Some(layer) = make_path_editable_is_allowed(network_interface) { + responses.add(NodeGraphMessage::CreateNodeInLayerWithTransaction { node_type: "Path".to_string(), layer }); + responses.add(EventMessage::SelectionChanged); } } NodeGraphMessage::AddImport => { network_interface.add_import(graph_craft::document::value::TaggedValue::None, true, -1, "", "", breadcrumb_network_path); responses.add(NodeGraphMessage::SendGraph); } + NodeGraphMessage::AddPrimaryImport => { + if network_interface.number_of_imports(breadcrumb_network_path) == 0 { + responses.add(NodeGraphMessage::AddImport); + } else { + responses.add(NodeGraphMessage::ExposeEncapsulatingPrimaryInput { exposed: true }); + } + } + NodeGraphMessage::AddSecondaryImport => { + // If necessary, add a hidden primary import before the secondary import + if network_interface.number_of_imports(breadcrumb_network_path) == 0 { + responses.add(NodeGraphMessage::AddImport); + responses.add(NodeGraphMessage::ExposeEncapsulatingPrimaryInput { exposed: false }); + } + + // Add the secondary import + responses.add(NodeGraphMessage::AddImport); + } NodeGraphMessage::AddExport => { network_interface.add_export(graph_craft::document::value::TaggedValue::None, -1, "", breadcrumb_network_path); responses.add(NodeGraphMessage::SendGraph); } + NodeGraphMessage::AddPrimaryExport => { + if network_interface.number_of_exports(breadcrumb_network_path) == 0 { + responses.add(NodeGraphMessage::AddExport); + } else { + responses.add(NodeGraphMessage::ExposePrimaryExport { exposed: true }); + } + } + NodeGraphMessage::AddSecondaryExport => { + // If necessary, add a hidden primary import before the secondary import + if network_interface.number_of_exports(breadcrumb_network_path) == 0 { + responses.add(NodeGraphMessage::AddExport); + responses.add(NodeGraphMessage::ExposePrimaryExport { exposed: false }); + } + + // Add the secondary export + responses.add(NodeGraphMessage::AddExport); + } NodeGraphMessage::Init => { responses.add(BroadcastMessage::SubscribeEvent { - on: BroadcastEvent::SelectionChanged, + on: EventMessage::SelectionChanged, send: Box::new(NodeGraphMessage::SelectedNodesUpdated.into()), }); network_interface.load_structure(); @@ -182,11 +191,13 @@ impl<'a> MessageHandler> for NodeG } responses.add(MenuBarMessage::SendLayout); responses.add(NodeGraphMessage::UpdateLayerPanel); + responses.add(PropertiesPanelMessage::Refresh); responses.add(NodeGraphMessage::SendSelectedNodes); responses.add(ArtboardToolMessage::UpdateSelectedArtboard); responses.add(DocumentMessage::DocumentStructureChanged); responses.add(OverlaysMessage::Draw); responses.add(NodeGraphMessage::SendGraph); + responses.add(PortfolioMessage::SubmitActiveGraphRender); } NodeGraphMessage::CreateWire { output_connector, input_connector } => { // TODO: Add support for flattening NodeInput::Network exports in flatten_with_fns https://github.com/GraphiteEditor/Graphite/issues/1762 @@ -424,6 +435,77 @@ impl<'a> MessageHandler> for NodeG responses.add(DocumentMessage::ZoomCanvasTo100Percent); } } + NodeGraphMessage::ExposeEncapsulatingPrimaryInput { exposed } => { + let Some((node_id, network_path)) = breadcrumb_network_path.split_last() else { + return; + }; + + let encapsulating_connector = InputConnector::node(*node_id, 0); + if !exposed { + network_interface.disconnect_input(&encapsulating_connector, network_path); + } + + let Some(mut input) = network_interface.input_from_connector(&encapsulating_connector, network_path).cloned() else { + return; + }; + + if let NodeInput::Value { exposed: old_exposed, .. } = &mut input { + *old_exposed = exposed; + } + + network_interface.set_input(&encapsulating_connector, input, network_path); + + let Some(outward_wires) = network_interface.outward_wires(breadcrumb_network_path) else { + log::error!("Could not get outward wires in remove_import"); + return; + }; + let Some(downstream_connections) = outward_wires.get(&OutputConnector::Import(0)).cloned() else { + log::error!("Could not get outward wires for import in remove_import"); + return; + }; + + // Disconnect all connections in the encapsulating network + for downstream_connection in &downstream_connections { + network_interface.disconnect_input(downstream_connection, breadcrumb_network_path); + } + + responses.add(NodeGraphMessage::UpdateImportsExports); + responses.add(NodeGraphMessage::SendWires); + } + NodeGraphMessage::ExposePrimaryExport { exposed } => { + let export_connector: InputConnector = InputConnector::Export(0); + if !exposed { + network_interface.disconnect_input(&export_connector, breadcrumb_network_path); + } + + let Some(mut input) = network_interface.input_from_connector(&export_connector, breadcrumb_network_path).cloned() else { + return; + }; + + if let NodeInput::Value { exposed: old_exposed, .. } = &mut input { + *old_exposed = exposed; + } + + network_interface.set_input(&export_connector, input, breadcrumb_network_path); + + // Disconnect all connections in the encapsulating network + if let Some((encapsulating_node, encapsulating_path)) = breadcrumb_network_path.split_last() { + let Some(outward_wires) = network_interface.outward_wires(encapsulating_path) else { + log::error!("Could not get outward wires in remove_import"); + return; + }; + let Some(downstream_connections) = outward_wires.get(&OutputConnector::node(*encapsulating_node, 0)).cloned() else { + log::error!("Could not get outward wires for import in remove_import"); + return; + }; + + for downstream_connection in &downstream_connections { + network_interface.disconnect_input(downstream_connection, encapsulating_path); + } + } + + responses.add(NodeGraphMessage::UpdateImportsExports); + } NodeGraphMessage::InsertNode { node_id, node_template } => { network_interface.insert_node(node_id, node_template, selection_network_path); } @@ -729,21 +811,21 @@ impl<'a> MessageHandler> for NodeG return; }; - if modify_import_export.add_import_export.clicked_input_port_from_point(node_graph_point).is_some() { + if let Some(remove_import_index) = modify_import_export.remove_imports_exports.clicked_output_port_from_point(node_graph_point) { responses.add(DocumentMessage::AddTransaction); - responses.add(NodeGraphMessage::AddExport); - return; - } else if modify_import_export.add_import_export.clicked_output_port_from_point(node_graph_point).is_some() { - responses.add(DocumentMessage::AddTransaction); - responses.add(NodeGraphMessage::AddImport); - return; - } else if let Some(remove_import_index) = modify_import_export.remove_imports_exports.clicked_output_port_from_point(node_graph_point) { - responses.add(DocumentMessage::AddTransaction); - responses.add(NodeGraphMessage::RemoveImport { import_index: remove_import_index }); + if remove_import_index == 0 { + responses.add(NodeGraphMessage::ExposeEncapsulatingPrimaryInput { exposed: false }) + } else { + responses.add(NodeGraphMessage::RemoveImport { import_index: remove_import_index }); + } return; } else if let Some(remove_export_index) = modify_import_export.remove_imports_exports.clicked_input_port_from_point(node_graph_point) { responses.add(DocumentMessage::AddTransaction); - responses.add(NodeGraphMessage::RemoveExport { export_index: remove_export_index }); + if remove_export_index == 0 { + responses.add(NodeGraphMessage::ExposePrimaryExport { exposed: false }) + } else { + responses.add(NodeGraphMessage::RemoveExport { export_index: remove_export_index }); + } return; } else if let Some(move_import_index) = modify_import_export.reorder_imports_exports.clicked_output_port_from_point(node_graph_point) { responses.add(DocumentMessage::StartTransaction); @@ -779,10 +861,8 @@ impl<'a> MessageHandler> for NodeG } // Alt-click sets the clicked node as previewed - if alt_click { - if let Some(clicked_node) = clicked_id { - self.preview_on_mouse_up = Some(clicked_node); - } + if alt_click && let Some(clicked_node) = clicked_id { + self.preview_on_mouse_up = Some(clicked_node); } // Begin moving an existing wire @@ -808,14 +888,8 @@ impl<'a> MessageHandler> for NodeG self.initial_disconnecting = false; self.wire_in_progress_from_connector = network_interface.output_position(&clicked_output, selection_network_path); - if let Some((output_type, source)) = clicked_output - .node_id() - .map(|node_id| network_interface.output_type(&node_id, clicked_output.index(), breadcrumb_network_path)) - { - self.wire_in_progress_type = FrontendGraphDataType::displayed_type(&output_type, &source); - } else { - self.wire_in_progress_type = FrontendGraphDataType::General; - } + let (output_type, source) = &network_interface.output_type(&clicked_output, breadcrumb_network_path); + self.wire_in_progress_type = FrontendGraphDataType::displayed_type(output_type, source); self.update_node_graph_hints(responses); return; @@ -984,8 +1058,7 @@ impl<'a> MessageHandler> for NodeG to_connector_is_layer, GraphWireStyle::Direct, ); - let mut path_string = String::new(); - let _ = vector_wire.subpath_to_svg(&mut path_string, DAffine2::IDENTITY); + let path_string = vector_wire.to_svg(); let wire_path = WirePath { path_string, data_type: self.wire_in_progress_type, @@ -1047,7 +1120,8 @@ impl<'a> MessageHandler> for NodeG }; (position > point.y).then_some(*index) }) - .unwrap_or(modify_import_export.reorder_imports_exports.output_ports().count()), + .filter(|end_index| *end_index > 0) // An import cannot be reordered to be the primary + .unwrap_or_else(|| modify_import_export.reorder_imports_exports.output_ports().count() + 1), ); responses.add(FrontendMessage::UpdateImportReorderIndex { index: self.end_index }); } else if self.reordering_export.is_some() { @@ -1067,7 +1141,8 @@ impl<'a> MessageHandler> for NodeG }; (position > point.y).then_some(*index) }) - .unwrap_or(modify_import_export.reorder_imports_exports.input_ports().count()), + .filter(|end_index| *end_index > 0) // An export cannot be reordered to be the primary + .unwrap_or_else(|| modify_import_export.reorder_imports_exports.input_ports().count() + 1), ); responses.add(FrontendMessage::UpdateExportReorderIndex { index: self.end_index }); } @@ -1122,27 +1197,27 @@ impl<'a> MessageHandler> for NodeG responses.add(NodeGraphMessage::RunDocumentGraph); responses.add(NodeGraphMessage::SendGraph); - } else if output_connector.is_some() && input_connector.is_none() && !self.initial_disconnecting { + } else if !self.initial_disconnecting + && input_connector.is_none() + && let Some(output_connector) = output_connector + { // If the add node menu is already open, we don't want to open it again if self.context_menu.is_some() { return; } + + // Get the output types from the network interface + let (output_type, type_source) = network_interface.output_type(&output_connector, selection_network_path); let Some(network_metadata) = network_interface.network_metadata(selection_network_path) else { warn!("No network_metadata"); return; }; - // Get the compatible type from the output connector - let compatible_type = output_connector.and_then(|output_connector| { - output_connector.node_id().and_then(|node_id| { - // Get the output types from the network interface - let (output_type, type_source) = network_interface.output_type(&node_id, output_connector.index(), selection_network_path); - match type_source { - TypeSource::RandomProtonodeImplementation | TypeSource::Error(_) => None, - _ => Some(format!("type:{}", output_type.nested_type())), - } - }) - }); + let compatible_type = match type_source { + TypeSource::RandomProtonodeImplementation | TypeSource::Error(_) => None, + _ => Some(format!("type:{}", output_type.nested_type())), + }; + let appear_right_of_mouse = if ipp.mouse.position.x > ipp.viewport_bounds.size().x - 173. { -173. } else { 0. }; let appear_above_mouse = if ipp.mouse.position.y > ipp.viewport_bounds.size().y - 34. { -34. } else { 0. }; let node_graph_shift = DVec2::new(appear_right_of_mouse, appear_above_mouse) / network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.matrix2.x_axis.x; @@ -1222,7 +1297,7 @@ impl<'a> MessageHandler> for NodeG .filter(|input| input.1.as_value().is_some()) .map(|input| input.0); if let Some(selected_node_input_connect_index) = selected_node_input_connect_index { - let Some(bounding_box) = network_interface.node_bounding_box(&selected_node_id, selection_network_path) else { + let Some(node_bbox) = network_interface.node_bounding_box(&selected_node_id, selection_network_path) else { log::error!("Could not get bounding box for node: {selected_node_id}"); return; }; @@ -1243,34 +1318,15 @@ impl<'a> MessageHandler> for NodeG { return None; } - log::debug!("preferences.graph_wire_style: {:?}", preferences.graph_wire_style); + let (wire, is_stack) = network_interface.vector_wire_from_input(&input, preferences.graph_wire_style, selection_network_path)?; - let bbox_rect = kurbo::Rect::new(bounding_box[0].x, bounding_box[0].y, bounding_box[1].x, bounding_box[1].y); + let node_bbox = kurbo::Rect::new(node_bbox[0].x, node_bbox[0].y, node_bbox[1].x, node_bbox[1].y).to_path(DEFAULT_ACCURACY); + let inside = bezpath_is_inside_bezpath(&wire, &node_bbox, None, None); - let p1 = DVec2::new(bbox_rect.x0, bbox_rect.y0); - let p2 = DVec2::new(bbox_rect.x1, bbox_rect.y0); - let p3 = DVec2::new(bbox_rect.x1, bbox_rect.y1); - let p4 = DVec2::new(bbox_rect.x0, bbox_rect.y1); - let ps = [p1, p2, p3, p4]; - - let inside = wire.is_inside_subpath(&Subpath::from_anchors_linear(ps, true), None, None); - - let wire = subpath_to_kurbo_bezpath(wire); - - let intersect = wire.segments().any(|segment| { - let rect = kurbo::Rect::new(bounding_box[0].x, bounding_box[0].y, bounding_box[1].x, bounding_box[1].y); - - let top_line = Line::new(Point::new(rect.x0, rect.y0), Point::new(rect.x1, rect.y0)); - let bottom_line = Line::new(Point::new(rect.x0, rect.y1), Point::new(rect.x1, rect.y1)); - let left_line = Line::new(Point::new(rect.x0, rect.y0), Point::new(rect.x0, rect.y1)); - let right_line = Line::new(Point::new(rect.x1, rect.y0), Point::new(rect.x1, rect.y1)); - - !segment.intersect_line(top_line).is_empty() - || !segment.intersect_line(bottom_line).is_empty() - || !segment.intersect_line(left_line).is_empty() - || !segment.intersect_line(right_line).is_empty() - }); + let intersect = wire + .segments() + .any(|segment| node_bbox.segments().filter_map(|segment| segment.as_line()).any(|line| !segment.intersect_line(line).is_empty())); (intersect || inside).then_some((input, is_stack)) }) @@ -1485,11 +1541,13 @@ impl<'a> MessageHandler> for NodeG } NodeGraphMessage::RemoveImport { import_index: usize } => { network_interface.remove_import(usize, selection_network_path); + responses.add(NodeGraphMessage::UpdateImportsExports); responses.add(NodeGraphMessage::SendGraph); responses.add(NodeGraphMessage::RunDocumentGraph); } NodeGraphMessage::RemoveExport { export_index: usize } => { network_interface.remove_export(usize, selection_network_path); + responses.add(NodeGraphMessage::UpdateImportsExports); responses.add(NodeGraphMessage::SendGraph); responses.add(NodeGraphMessage::RunDocumentGraph); } @@ -1515,7 +1573,7 @@ impl<'a> MessageHandler> for NodeG return; }; selected_nodes.add_selected_nodes(nodes); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); } NodeGraphMessage::SelectedNodesRemove { nodes } => { let Some(selected_nodes) = network_interface.selected_nodes_mut(selection_network_path) else { @@ -1523,7 +1581,7 @@ impl<'a> MessageHandler> for NodeG return; }; selected_nodes.retain_selected_nodes(|node| !nodes.contains(node)); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); } NodeGraphMessage::SelectedNodesSet { nodes } => { let Some(selected_nodes) = network_interface.selected_nodes_mut(selection_network_path) else { @@ -1531,8 +1589,7 @@ impl<'a> MessageHandler> for NodeG return; }; selected_nodes.set_selected_nodes(nodes); - responses.add(BroadcastEvent::SelectionChanged); - responses.add(PropertiesPanelMessage::Refresh); + responses.add(EventMessage::SelectionChanged); } NodeGraphMessage::SendClickTargets => responses.add(FrontendMessage::UpdateClickTargets { click_targets: Some(network_interface.collect_frontend_click_targets(breadcrumb_network_path)), @@ -1560,7 +1617,7 @@ impl<'a> MessageHandler> for NodeG let mut nodes = Vec::new(); for node_id in &self.frontend_nodes { let Some(node_bbox) = network_interface.node_bounding_box(node_id, breadcrumb_network_path) else { - log::error!("Could not get bbox for node: {:?}", node_id); + log::error!("Could not get bbox for node: {node_id:?}"); continue; }; @@ -1724,6 +1781,7 @@ impl<'a> MessageHandler> for NodeG responses.add(DocumentMessage::RenderRulers); responses.add(DocumentMessage::RenderScrollbars); responses.add(NodeGraphMessage::SendGraph); + responses.add(OverlaysMessage::Draw); // Redraw overlays to update artboard names } NodeGraphMessage::SetDisplayNameImpl { node_id, alias } => { network_interface.set_display_name(&node_id, alias, selection_network_path); @@ -1764,7 +1822,7 @@ impl<'a> MessageHandler> for NodeG } NodeGraphMessage::ToggleLocked { node_id } => { let Some(node_metadata) = network_interface.document_network_metadata().persistent_metadata.node_metadata.get(&node_id) else { - log::error!("Cannot get node {:?} in NodeGraphMessage::ToggleLocked", node_id); + log::error!("Cannot get node {node_id:?} in NodeGraphMessage::ToggleLocked"); return; }; @@ -1864,7 +1922,7 @@ impl<'a> MessageHandler> for NodeG let shift = ipp.keyboard.get(Key::Shift as usize); let Some(selected_nodes) = network_interface.selected_nodes_in_nested_network(selection_network_path) else { - log::error!("Could not get selected nodes in PointerMove"); + log::error!("Could not get selected nodes in UpdateBoxSelection"); return; }; let previous_selection = selected_nodes.selected_nodes_ref().iter().cloned().collect::>(); @@ -1880,7 +1938,7 @@ impl<'a> MessageHandler> for NodeG continue; }; let quad = Quad::from_box([box_selection_start, box_selection_end_graph]); - if click_targets.node_click_target.intersect_path(|| quad.bezier_lines(), DAffine2::IDENTITY) { + if click_targets.node_click_target.intersect_path(|| quad.to_lines(), DAffine2::IDENTITY) { nodes.insert(node_id); } } @@ -1893,34 +1951,30 @@ impl<'a> MessageHandler> for NodeG } } NodeGraphMessage::UpdateImportsExports => { - let imports = network_interface.frontend_imports(breadcrumb_network_path).unwrap_or_default(); - let exports = network_interface.frontend_exports(breadcrumb_network_path).unwrap_or_default(); - let add_import = network_interface - .frontend_import_export_modify( - |modify_import_export_click_target| modify_import_export_click_target.add_import_export.output_ports().collect::>(), - breadcrumb_network_path, - ) - .into_iter() - .next(); - let add_export = network_interface - .frontend_import_export_modify( - |modify_import_export_click_target| modify_import_export_click_target.add_import_export.input_ports().collect::>(), - breadcrumb_network_path, - ) - .into_iter() - .next(); + let imports = network_interface.frontend_imports(breadcrumb_network_path); + let exports = network_interface.frontend_exports(breadcrumb_network_path); + + let Some((import_position, export_position)) = network_interface.import_export_position(breadcrumb_network_path) else { + log::error!("Could not get import export positions"); + return; + }; + + // Do not show the add import or add export button in the document network; + let add_import_export = !breadcrumb_network_path.is_empty(); + responses.add(NodeGraphMessage::UpdateVisibleNodes); responses.add(NodeGraphMessage::SendWires); responses.add(FrontendMessage::UpdateImportsExports { imports, exports, - add_import, - add_export, + import_position, + export_position, + add_import_export, }); } NodeGraphMessage::UpdateLayerPanel => { - Self::update_layer_panel(network_interface, selection_network_path, collapsed, responses); + Self::update_layer_panel(network_interface, selection_network_path, collapsed, layers_panel_open, responses); } NodeGraphMessage::UpdateEdges => { // Update the import/export UI edges whenever the PTZ changes or the bounding box of all nodes changes @@ -1931,7 +1985,7 @@ impl<'a> MessageHandler> for NodeG return; }; selected_nodes.clear_selected_nodes(); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); responses.add(NodeGraphMessage::SendGraph); } @@ -2033,11 +2087,6 @@ impl NodeGraphMessageHandler { return; }; - let Some(network) = network_interface.nested_network(breadcrumb_network_path) else { - warn!("No network in update_selection_action_buttons"); - return; - }; - let Some(selected_nodes) = network_interface.selected_nodes_in_nested_network(breadcrumb_network_path) else { warn!("No selected nodes in update_selection_action_buttons"); return; @@ -2051,6 +2100,7 @@ impl NodeGraphMessageHandler { let mut selected_layers = selected_nodes.selected_layers(network_interface.document_metadata()); let selected_layer = selected_layers.next(); let has_multiple_selection = selected_layers.next().is_some(); + for _ in selected_layers {} let mut widgets = vec![ PopoverButton::new() @@ -2063,7 +2113,7 @@ impl NodeGraphMessageHandler { let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, network_interface); let node_type = graph_layer.horizontal_layer_flow().nth(1); if let Some(node_id) = node_type { - let (output_type, _) = network_interface.output_type(&node_id, 0, &[]); + let (output_type, _) = network_interface.output_type(&OutputConnector::node(node_id, 0), &[]); Some(format!("type:{}", output_type.nested_type())) } else { None @@ -2149,6 +2199,11 @@ impl NodeGraphMessageHandler { let mut selection = selected_nodes.selected_nodes(); let (selection, no_other_selections) = (selection.next(), selection.count() == 0); + + let Some(network) = network_interface.nested_network(breadcrumb_network_path) else { + warn!("No network in update_selection_action_buttons"); + return; + }; let previewing = if matches!(network_interface.previewing(breadcrumb_network_path), Previewing::Yes { .. }) { network.exports.iter().find_map(|export| { let NodeInput::Node { node_id, .. } = export else { return None }; @@ -2265,6 +2320,12 @@ impl NodeGraphMessageHandler { } } + // The same layer/node may appear several times. Sort and dedup them for a stable ordering. + layers.sort(); + layers.dedup(); + nodes.sort(); + nodes.dedup(); + // Next, we decide what to display based on the number of layers and nodes selected match *layers.as_slice() { // If no layers are selected, show properties for all selected nodes @@ -2370,12 +2431,12 @@ impl NodeGraphMessageHandler { .icon(Some("Node".to_string())) .tooltip("Add an operation to the end of this layer's chain of nodes") .popover_layout({ - let layer_identifier = LayerNodeIdentifier::new(layer, &context.network_interface); + let layer_identifier = LayerNodeIdentifier::new(layer, context.network_interface); let compatible_type = { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer_identifier, &context.network_interface); + let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer_identifier, context.network_interface); let node_type = graph_layer.horizontal_layer_flow().nth(1); if let Some(node_id) = node_type { - let (output_type, _) = context.network_interface.output_type(&node_id, 0, &[]); + let (output_type, _) = context.network_interface.output_type(&OutputConnector::node(node_id, 0), &[]); Some(format!("type:{}", output_type.nested_type())) } else { None @@ -2454,7 +2515,7 @@ impl NodeGraphMessageHandler { } else { added_wires.push(WirePathUpdate { id: NodeId(u64::MAX), - input_index: usize::MAX, + input_index: u32::MAX as usize, wire_path_update: None, }) } @@ -2463,110 +2524,48 @@ impl NodeGraphMessageHandler { } fn collect_nodes(&self, network_interface: &mut NodeNetworkInterface, breadcrumb_network_path: &[NodeId]) -> Vec { - let Some(outward_wires) = network_interface.outward_wires(breadcrumb_network_path).cloned() else { - return Vec::new(); - }; - let mut can_be_layer_lookup = HashSet::new(); - let mut position_lookup = HashMap::new(); let Some(network) = network_interface.nested_network(breadcrumb_network_path) else { log::error!("Could not get nested network when collecting nodes"); return Vec::new(); }; - - for node_id in network.nodes.keys().cloned().collect::>() { - if network_interface.is_eligible_to_be_layer(&node_id, breadcrumb_network_path) { - can_be_layer_lookup.insert(node_id); - } - if let Some(position) = network_interface.position(&node_id, breadcrumb_network_path) { - position_lookup.insert(node_id, position); - } else { - log::error!("Could not get position for node {node_id}"); - } - } - - let mut frontend_inputs_lookup = frontend_inputs_lookup(breadcrumb_network_path, network_interface); - let Some(network) = network_interface.nested_network(breadcrumb_network_path) else { - log::error!("Could not get nested network when collecting nodes"); - return Vec::new(); - }; - let Some(network_metadata) = network_interface.network_metadata(breadcrumb_network_path) else { - log::error!("Could not get network_metadata when collecting nodes"); - return Vec::new(); - }; - let mut nodes = Vec::new(); - for (&node_id, node) in &network.nodes { - let node_id_path = [breadcrumb_network_path, (&[node_id])].concat(); + for (node_id, visible) in network.nodes.iter().map(|(node_id, node)| (*node_id, node.visible)).collect::>() { + let node_id_path = [breadcrumb_network_path, &[node_id]].concat(); - let inputs = frontend_inputs_lookup.remove(&node_id).unwrap_or_default(); + let primary_input_connector = InputConnector::node(node_id, 0); - let mut inputs = inputs.into_iter().map(|input| { - input.map(|input| FrontendGraphInput { - data_type: FrontendGraphDataType::displayed_type(&input.ty, &input.type_source), - resolved_type: format!("{:?}", &input.ty), - valid_types: input.valid_types.iter().map(|ty| ty.to_string()).collect(), - name: input.input_name, - description: input.input_description, - connected_to: input.output_connector, - }) - }); - - let primary_input = inputs.next().flatten(); - let exposed_inputs = inputs.flatten().collect(); - - let (output_type, type_source) = network_interface.output_type(&node_id, 0, breadcrumb_network_path); - let frontend_data_type = FrontendGraphDataType::displayed_type(&output_type, &type_source); - - let connected_to = outward_wires.get(&OutputConnector::node(node_id, 0)).cloned().unwrap_or_default(); - let primary_output = if network_interface.has_primary_output(&node_id, breadcrumb_network_path) { - Some(FrontendGraphOutput { - data_type: frontend_data_type, - name: "Output 1".to_string(), - description: String::new(), - resolved_type: format!("{:?}", output_type), - connected_to, - }) + let primary_input = if network_interface + .input_from_connector(&primary_input_connector, breadcrumb_network_path) + .is_some_and(|input| input.is_exposed()) + { + network_interface.frontend_input_from_connector(&primary_input_connector, breadcrumb_network_path) } else { None }; + let exposed_inputs = (1..network_interface.number_of_inputs(&node_id, breadcrumb_network_path)) + .filter_map(|input_index| network_interface.frontend_input_from_connector(&InputConnector::node(node_id, input_index), breadcrumb_network_path)) + .collect(); - let mut exposed_outputs = Vec::new(); - for output_index in 0..network_interface.number_of_outputs(&node_id, breadcrumb_network_path) { - if output_index == 0 && network_interface.has_primary_output(&node_id, breadcrumb_network_path) { - continue; - } - let (output_type, type_source) = network_interface.output_type(&node_id, 0, breadcrumb_network_path); - let data_type = FrontendGraphDataType::displayed_type(&output_type, &type_source); + let primary_output = network_interface.frontend_output_from_connector(&OutputConnector::node(node_id, 0), breadcrumb_network_path); - let Some(node_metadata) = network_metadata.persistent_metadata.node_metadata.get(&node_id) else { - log::error!("Could not get node_metadata when getting output for {node_id}"); - continue; - }; - let output_name = node_metadata - .persistent_metadata - .output_names - .get(output_index) - .cloned() - .filter(|output_name| !output_name.is_empty()) - .unwrap_or_else(|| output_type.nested_type().to_string()); - - let connected_to = outward_wires.get(&OutputConnector::node(node_id, output_index)).cloned().unwrap_or_default(); - exposed_outputs.push(FrontendGraphOutput { - data_type, - name: output_name, - description: String::new(), - resolved_type: format!("{:?}", output_type), - connected_to, - }); - } - let Some(network) = network_interface.nested_network(breadcrumb_network_path) else { - log::error!("Could not get nested network when collecting nodes"); - return Vec::new(); + let exposed_outputs = (1..network_interface.number_of_outputs(&node_id, breadcrumb_network_path)) + .filter_map(|output_index| network_interface.frontend_output_from_connector(&OutputConnector::node(node_id, output_index), breadcrumb_network_path)) + .collect(); + let (primary_output_connected_to_layer, primary_input_connected_to_layer) = if network_interface.is_layer(&node_id, breadcrumb_network_path) { + ( + network_interface.primary_output_connected_to_layer(&node_id, breadcrumb_network_path), + network_interface.primary_input_connected_to_layer(&node_id, breadcrumb_network_path), + ) + } else { + (false, false) }; - let is_export = network.exports.first().is_some_and(|export| export.as_node().is_some_and(|export_node_id| node_id == export_node_id)); + + let is_export = network_interface + .input_from_connector(&InputConnector::Export(0), breadcrumb_network_path) + .is_some_and(|export| export.as_node().is_some_and(|export_node_id| node_id == export_node_id)); let is_root_node = network_interface.root_node(breadcrumb_network_path).is_some_and(|root_node| root_node.node_id == node_id); - let Some(position) = position_lookup.get(&node_id).map(|pos| (pos.x, pos.y)) else { + let Some(position) = network_interface.position(&node_id, breadcrumb_network_path) else { log::error!("Could not get position for node: {node_id}"); continue; }; @@ -2592,19 +2591,20 @@ impl NodeGraphMessageHandler { is_layer: network_interface .node_metadata(&node_id, breadcrumb_network_path) .is_some_and(|node_metadata| node_metadata.persistent_metadata.is_layer()), - can_be_layer: can_be_layer_lookup.contains(&node_id), + can_be_layer: network_interface.is_eligible_to_be_layer(&node_id, breadcrumb_network_path), reference: network_interface.reference(&node_id, breadcrumb_network_path).cloned().unwrap_or_default(), display_name: network_interface.display_name(&node_id, breadcrumb_network_path), primary_input, exposed_inputs, primary_output, exposed_outputs, + primary_output_connected_to_layer, + primary_input_connected_to_layer, position, previewed, - visible: node.visible, + visible, locked, errors, - ui_only: false, }); } @@ -2626,7 +2626,11 @@ impl NodeGraphMessageHandler { Some(subgraph_names) } - fn update_layer_panel(network_interface: &NodeNetworkInterface, selection_network_path: &[NodeId], collapsed: &CollapsedLayers, responses: &mut VecDeque) { + fn update_layer_panel(network_interface: &NodeNetworkInterface, selection_network_path: &[NodeId], collapsed: &CollapsedLayers, layers_panel_open: bool, responses: &mut VecDeque) { + if !layers_panel_open { + return; + } + let selected_layers = network_interface .selected_nodes() .selected_layers(network_interface.document_metadata()) @@ -2709,7 +2713,7 @@ impl NodeGraphMessageHandler { } } - pub fn update_node_graph_hints(&self, responses: &mut VecDeque) { + fn update_node_graph_hints(&self, responses: &mut VecDeque) { // A wire is in progress and its start and end connectors are set let wiring = self.wire_in_progress_from_connector.is_some(); @@ -2750,73 +2754,6 @@ impl NodeGraphMessageHandler { } } -#[derive(Default)] -struct InputLookup { - input_name: String, - input_description: String, - ty: Type, - type_source: TypeSource, - valid_types: Vec, - output_connector: Option, -} - -type FrontendInputsLookup = HashMap>>; - -/// Create a lookup hashmap that can be used to create the frontend inputs. This is needed because `input_type` requires a mutable `network_interface`. -fn frontend_inputs_lookup(breadcrumb_network_path: &[NodeId], network_interface: &mut NodeNetworkInterface) -> FrontendInputsLookup { - let Some(network) = network_interface.nested_network(breadcrumb_network_path) else { - return Default::default(); - }; - let mut frontend_inputs_lookup = HashMap::new(); - for (node_id, index, output_connector, is_exposed) in network - .nodes - .iter() - .flat_map(|(node_id, node)| { - node.inputs - .iter() - .enumerate() - .map(|(index, input)| (*node_id, index, OutputConnector::from_input(input), input.is_exposed())) - }) - .collect::>() - { - // Skip not exposed inputs (they still get an entry to help with finding the primary input) - let lookup = if !is_exposed { - None - } else { - // Get the name from the metadata here (since it also requires a reference to the `network_interface`) - let (input_name, input_description) = network_interface.displayed_input_name_and_description(&node_id, index, breadcrumb_network_path); - Some(InputLookup { - input_name, - input_description, - output_connector, - ..Default::default() - }) - }; - frontend_inputs_lookup.entry(node_id).or_insert_with(Vec::new).push(lookup); - } - - for (&node_id, value) in frontend_inputs_lookup.iter_mut() { - for (index, value) in value.iter_mut().enumerate() { - // Skip not exposed inputs for efficiency - let Some(value) = value else { continue }; - // Resolve the type (done in a separate loop because it requires a mutable reference to the `network_interface`) - let (ty, type_source) = network_interface.input_type(&InputConnector::node(node_id, index), breadcrumb_network_path); - value.ty = ty; - value.type_source = type_source; - } - } - - for (&node_id, value) in frontend_inputs_lookup.iter_mut() { - for (index, value) in value.iter_mut().enumerate() { - // Skip not exposed inputs for efficiency - let Some(value) = value else { continue }; - // Resolve the type (done in a separate loop because it requires a mutable reference to the `network_interface`) - value.valid_types = network_interface.valid_input_types(&InputConnector::node(node_id, index), breadcrumb_network_path); - } - } - frontend_inputs_lookup -} - impl Default for NodeGraphMessageHandler { fn default() -> Self { Self { diff --git a/editor/src/messages/portfolio/document/node_graph/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_properties.rs index 4c9b8b0102..24328f3539 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_properties.rs @@ -11,6 +11,7 @@ use glam::{DAffine2, DVec2}; use graph_craft::Type; use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNode, DocumentNodeImplementation, NodeId, NodeInput}; +use graphene_std::NodeInputDecleration; use graphene_std::animation::RealTimeMode; use graphene_std::extract_xy::XY; use graphene_std::path_bool::BooleanOperation; @@ -19,16 +20,11 @@ use graphene_std::raster::{ BlendMode, CellularDistanceFunction, CellularReturnType, Color, DomainWarpType, FractalType, LuminanceCalculation, NoiseType, RedGreenBlue, RedGreenBlueAlpha, RelativeAbsolute, SelectiveColorChoice, }; -use graphene_std::raster_types::{CPU, GPU, RasterDataTable}; -use graphene_std::text::Font; +use graphene_std::table::{Table, TableRow}; +use graphene_std::text::{Font, TextAlign}; use graphene_std::transform::{Footprint, ReferencePoint, Transform}; -use graphene_std::vector::VectorDataTable; -use graphene_std::vector::misc::GridType; -use graphene_std::vector::misc::{ArcType, MergeByDistanceAlgorithm}; -use graphene_std::vector::misc::{CentroidType, PointSpacingType}; -use graphene_std::vector::style::{Fill, FillChoice, FillType, GradientStops}; -use graphene_std::vector::style::{GradientType, PaintOrder, StrokeAlign, StrokeCap, StrokeJoin}; -use graphene_std::{GraphicGroupTable, NodeInputDecleration}; +use graphene_std::vector::misc::{ArcType, CentroidType, GridType, MergeByDistanceAlgorithm, PointSpacingType}; +use graphene_std::vector::style::{Fill, FillChoice, FillType, GradientStops, GradientType, PaintOrder, StrokeAlign, StrokeCap, StrokeJoin}; pub(crate) fn string_properties(text: &str) -> Vec { let widget = TextLabel::new(text).widget_holder(); @@ -151,16 +147,16 @@ pub(crate) fn property_from_type( Type::Concrete(concrete_type) => { match concrete_type.alias.as_ref().map(|x| x.as_ref()) { // Aliased types (ambiguous values) - Some("Percentage") => number_widget(default_info, number_input.percentage().min(min(0.)).max(max(100.))).into(), - Some("SignedPercentage") => number_widget(default_info, number_input.percentage().min(min(-100.)).max(max(100.))).into(), - Some("Angle") => number_widget(default_info, number_input.mode_range().min(min(-180.)).max(max(180.)).unit(unit.unwrap_or("ยฐ"))).into(), + Some("Percentage") | Some("PercentageF32") => number_widget(default_info, number_input.percentage().min(min(0.)).max(max(100.))).into(), + Some("SignedPercentage") | Some("SignedPercentageF32") => number_widget(default_info, number_input.percentage().min(min(-100.)).max(max(100.))).into(), + Some("Angle") | Some("AngleF32") => number_widget(default_info, number_input.mode_range().min(min(-180.)).max(max(180.)).unit(unit.unwrap_or("ยฐ"))).into(), Some("Multiplier") => number_widget(default_info, number_input.unit(unit.unwrap_or("x"))).into(), Some("PixelLength") => number_widget(default_info, number_input.min(min(0.)).unit(unit.unwrap_or(" px"))).into(), Some("Length") => number_widget(default_info, number_input.min(min(0.))).into(), Some("Fraction") => number_widget(default_info, number_input.mode_range().min(min(0.)).max(max(1.))).into(), Some("IntegerCount") => number_widget(default_info, number_input.int().min(min(1.))).into(), Some("SeedValue") => number_widget(default_info, number_input.int().min(min(0.))).into(), - Some("PixelSize") => coordinate_widget(default_info, "X", "Y", unit.unwrap_or(" px"), None, false), + Some("PixelSize") => vec2_widget(default_info, "X", "Y", unit.unwrap_or(" px"), None, false), Some("TextArea") => text_area_widget(default_info).into(), // For all other types, use TypeId-based matching @@ -170,29 +166,25 @@ pub(crate) fn property_from_type( // =============== // PRIMITIVE TYPES // =============== - Some(x) if x == TypeId::of::() => number_widget(default_info, number_input.min(min(f64::NEG_INFINITY)).max(max(f64::INFINITY))).into(), + Some(x) if x == TypeId::of::() || x == TypeId::of::() => number_widget(default_info, number_input.min(min(f64::NEG_INFINITY)).max(max(f64::INFINITY))).into(), Some(x) if x == TypeId::of::() => number_widget(default_info, number_input.int().min(min(0.)).max(max(f64::from(u32::MAX)))).into(), Some(x) if x == TypeId::of::() => number_widget(default_info, number_input.int().min(min(0.))).into(), Some(x) if x == TypeId::of::() => bool_widget(default_info, CheckboxInput::default()).into(), Some(x) if x == TypeId::of::() => text_widget(default_info).into(), - Some(x) if x == TypeId::of::() => coordinate_widget(default_info, "X", "Y", "", None, false), + Some(x) if x == TypeId::of::() => vec2_widget(default_info, "X", "Y", "", None, false), Some(x) if x == TypeId::of::() => transform_widget(default_info, &mut extra_widgets), + Some(x) if x == TypeId::of::() => color_widget(default_info, ColorInput::default()), + Some(x) if x == TypeId::of::>() => color_widget(default_info, ColorInput::default()), // ========================== // PRIMITIVE COLLECTION TYPES // ========================== Some(x) if x == TypeId::of::>() => array_of_number_widget(default_info, TextInput::default()).into(), - Some(x) if x == TypeId::of::>() => array_of_coordinates_widget(default_info, TextInput::default()).into(), - // ==================== - // GRAPHICAL DATA TYPES - // ==================== - Some(x) if x == TypeId::of::() => vector_data_widget(default_info).into(), - Some(x) if x == TypeId::of::>() || x == TypeId::of::>() => raster_widget(default_info).into(), - Some(x) if x == TypeId::of::() => group_widget(default_info).into(), + Some(x) if x == TypeId::of::>() => array_of_vec2_widget(default_info, TextInput::default()).into(), // ============ // STRUCT TYPES // ============ - Some(x) if x == TypeId::of::() => color_widget(default_info, ColorInput::default().allow_none(false)), - Some(x) if x == TypeId::of::>() => color_widget(default_info, ColorInput::default().allow_none(true)), + Some(x) if x == TypeId::of::>() => color_widget(default_info, ColorInput::default().allow_none(true)), + Some(x) if x == TypeId::of::>() => color_widget(default_info, ColorInput::default().allow_none(false)), Some(x) if x == TypeId::of::() => color_widget(default_info, ColorInput::default().allow_none(false)), Some(x) if x == TypeId::of::() => font_widget(default_info), Some(x) if x == TypeId::of::() => curve_widget(default_info), @@ -223,6 +215,7 @@ pub(crate) fn property_from_type( Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), + Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), Some(x) if x == TypeId::of::() => enum_choice::().for_socket(default_info).property_row(), @@ -479,6 +472,10 @@ pub fn footprint_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg resolution_widgets.push( NumberInput::new(Some((footprint.resolution.as_dvec2() / bounds).x * 100.)) .label("Resolution") + .mode_range() + .min(0.) + .range_min(Some(1.)) + .range_max(Some(100.)) .unit("%") .on_update(update_value( move |x: &NumberInput| { @@ -625,7 +622,7 @@ pub fn transform_widget(parameter_widgets_info: ParameterWidgetsInfo, extra_widg } } -pub fn coordinate_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &str, unit: &str, min: Option, is_integer: bool) -> LayoutGroup { +pub fn vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, x: &str, y: &str, unit: &str, min: Option, is_integer: bool) -> LayoutGroup { let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; let mut widgets = start_widgets(parameter_widgets_info); @@ -722,7 +719,7 @@ pub fn array_of_number_widget(parameter_widgets_info: ParameterWidgetsInfo, text widgets } -pub fn array_of_coordinates_widget(parameter_widgets_info: ParameterWidgetsInfo, text_props: TextInput) -> Vec { +pub fn array_of_vec2_widget(parameter_widgets_info: ParameterWidgetsInfo, text_props: TextInput) -> Vec { let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; let mut widgets = start_widgets(parameter_widgets_info); @@ -791,33 +788,6 @@ pub fn font_inputs(parameter_widgets_info: ParameterWidgetsInfo) -> (Vec Vec { - let mut widgets = start_widgets(parameter_widgets_info); - - widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); - widgets.push(TextLabel::new("Vector data is supplied through the node graph").widget_holder()); - - widgets -} - -pub fn raster_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { - let mut widgets = start_widgets(parameter_widgets_info); - - widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); - widgets.push(TextLabel::new("Raster data is supplied through the node graph").widget_holder()); - - widgets -} - -pub fn group_widget(parameter_widgets_info: ParameterWidgetsInfo) -> Vec { - let mut widgets = start_widgets(parameter_widgets_info); - - widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); - widgets.push(TextLabel::new("Group data is supplied through the node graph").widget_holder()); - - widgets -} - pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: NumberInput) -> Vec { let ParameterWidgetsInfo { document_node, node_id, index, .. } = parameter_widgets_info; @@ -837,6 +807,14 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: .on_commit(commit_value) .widget_holder(), ]), + Some(&TaggedValue::F32(x)) => widgets.extend_from_slice(&[ + Separator::new(SeparatorType::Unrelated).widget_holder(), + number_props + .value(Some(x as f64)) + .on_update(update_value(move |x: &NumberInput| TaggedValue::F32(x.value.unwrap() as f32), node_id, index)) + .on_commit(commit_value) + .widget_holder(), + ]), Some(&TaggedValue::U32(x)) => widgets.extend_from_slice(&[ Separator::new(SeparatorType::Unrelated).widget_holder(), number_props @@ -883,6 +861,15 @@ pub fn number_widget(parameter_widgets_info: ParameterWidgetsInfo, number_props: .on_commit(commit_value) .widget_holder(), ]), + Some(&TaggedValue::FVec2(vec2)) => widgets.extend_from_slice(&[ + Separator::new(SeparatorType::Unrelated).widget_holder(), + number_props + // We use an arbitrary `y` instead of an arbitrary `x` here because the "Grid" node's "Spacing" value's height should be used from rectangular mode when transferred to "Y Spacing" in isometric mode + .value(Some(vec2.y as f64)) + .on_update(update_value(move |x: &NumberInput| TaggedValue::F32(x.value.unwrap() as f32), node_id, index)) + .on_commit(commit_value) + .widget_holder(), + ]), _ => {} } @@ -941,35 +928,62 @@ pub fn color_widget(parameter_widgets_info: ParameterWidgetsInfo, color_button: // Add the color input match &**tagged_value { - TaggedValue::Color(color) => widgets.push( + TaggedValue::ColorNotInTable(color) => widgets.push( color_button .value(FillChoice::Solid(*color)) - .on_update(update_value(|x: &ColorInput| TaggedValue::Color(x.value.as_solid().unwrap_or_default()), node_id, index)) + .allow_none(false) + .on_update(update_value(|input: &ColorInput| TaggedValue::ColorNotInTable(input.value.as_solid().unwrap()), node_id, index)) .on_commit(commit_value) .widget_holder(), ), - TaggedValue::OptionalColor(color) => widgets.push( + TaggedValue::OptionalColorNotInTable(color) => widgets.push( color_button - .value(match color { - Some(color) => FillChoice::Solid(*color), + .value(color.map_or(FillChoice::None, FillChoice::Solid)) + .allow_none(true) + .on_update(update_value(|input: &ColorInput| TaggedValue::OptionalColorNotInTable(input.value.as_solid()), node_id, index)) + .on_commit(commit_value) + .widget_holder(), + ), + TaggedValue::Color(color_table) => widgets.push( + color_button + .value(match color_table.iter().next() { + Some(color) => FillChoice::Solid(*color.element), None => FillChoice::None, }) - .on_update(update_value(|x: &ColorInput| TaggedValue::OptionalColor(x.value.as_solid()), node_id, index)) - .on_commit(commit_value) - .widget_holder(), - ), - TaggedValue::GradientStops(x) => widgets.push( - color_button - .value(FillChoice::Gradient(x.clone())) .on_update(update_value( - |x: &ColorInput| TaggedValue::GradientStops(x.value.as_gradient().cloned().unwrap_or_default()), + |input: &ColorInput| TaggedValue::Color(input.value.as_solid().iter().map(|&color| TableRow::new_from_element(color)).collect()), node_id, index, )) .on_commit(commit_value) .widget_holder(), ), - _ => {} + TaggedValue::GradientTable(gradient_table) => widgets.push( + color_button + .value(match gradient_table.iter().next() { + Some(row) => FillChoice::Gradient(row.element.clone()), + None => FillChoice::None, + }) + .on_update(update_value( + |input: &ColorInput| TaggedValue::GradientTable(input.value.as_gradient().iter().map(|&gradient| TableRow::new_from_element(gradient.clone())).collect()), + node_id, + index, + )) + .on_commit(commit_value) + .widget_holder(), + ), + TaggedValue::GradientStops(gradient_stops) => widgets.push( + color_button + .value(FillChoice::Gradient(gradient_stops.clone())) + .on_update(update_value( + |input: &ColorInput| TaggedValue::GradientStops(input.value.as_gradient().cloned().unwrap_or_default()), + node_id, + index, + )) + .on_commit(commit_value) + .widget_holder(), + ), + x => warn!("Colour {x:?}"), } LayoutGroup::Row { widgets } @@ -1248,7 +1262,7 @@ pub(crate) fn grid_properties(node_id: NodeId, context: &mut NodePropertiesConte if let Some(&TaggedValue::GridType(grid_type)) = grid_type_input.as_non_exposed_value() { match grid_type { GridType::Rectangular => { - let spacing = coordinate_widget(ParameterWidgetsInfo::new(node_id, SpacingInput::::INDEX, true, context), "W", "H", " px", Some(0.), false); + let spacing = vec2_widget(ParameterWidgetsInfo::new(node_id, SpacingInput::::INDEX, true, context), "W", "H", " px", Some(0.), false); widgets.push(spacing); } GridType::Isometric => { @@ -1258,7 +1272,7 @@ pub(crate) fn grid_properties(node_id: NodeId, context: &mut NodePropertiesConte NumberInput::default().label("H").min(0.).unit(" px"), ), }; - let angles = coordinate_widget(ParameterWidgetsInfo::new(node_id, AnglesInput::INDEX, true, context), "", "", "ยฐ", None, false); + let angles = vec2_widget(ParameterWidgetsInfo::new(node_id, AnglesInput::INDEX, true, context), "", "", "ยฐ", None, false); widgets.extend([spacing, angles]); } } @@ -1592,7 +1606,7 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte } }; - let (fill, backup_color, backup_gradient) = if let (Some(TaggedValue::Fill(fill)), &Some(&TaggedValue::OptionalColor(backup_color)), Some(TaggedValue::Gradient(backup_gradient))) = ( + let (fill, backup_color, backup_gradient) = if let (Some(TaggedValue::Fill(fill)), Some(TaggedValue::Color(backup_color)), Some(TaggedValue::Gradient(backup_gradient))) = ( &document_node.inputs[FillInput::::INDEX].as_value(), &document_node.inputs[BackupColorInput::INDEX].as_value(), &document_node.inputs[BackupGradientInput::INDEX].as_value(), @@ -1602,7 +1616,7 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte return vec![LayoutGroup::Row { widgets: widgets_first_row }]; }; let fill2 = fill.clone(); - let backup_color_fill: Fill = backup_color.into(); + let backup_color_fill: Fill = backup_color.clone().into(); let backup_gradient_fill: Fill = backup_gradient.clone().into(); widgets_first_row.push(Separator::new(SeparatorType::Unrelated).widget_holder()); @@ -1615,13 +1629,13 @@ pub(crate) fn fill_properties(node_id: NodeId, context: &mut NodePropertiesConte Fill::None => NodeGraphMessage::SetInputValue { node_id, input_index: BackupColorInput::INDEX, - value: TaggedValue::OptionalColor(None), + value: TaggedValue::Color(Table::new()), } .into(), Fill::Solid(color) => NodeGraphMessage::SetInputValue { node_id, input_index: BackupColorInput::INDEX, - value: TaggedValue::OptionalColor(Some(*color)), + value: TaggedValue::Color(Table::new_from_element(*color)), } .into(), Fill::Gradient(gradient) => NodeGraphMessage::SetInputValue { @@ -1783,7 +1797,7 @@ pub fn stroke_properties(node_id: NodeId, context: &mut NodePropertiesContext) - let miter_limit_disabled = join_value != &StrokeJoin::Miter; let color = color_widget( - ParameterWidgetsInfo::new(node_id, ColorInput::>::INDEX, true, context), + ParameterWidgetsInfo::new(node_id, ColorInput::INDEX, true, context), crate::messages::layout::utility_types::widgets::button_widgets::ColorInput::default(), ); let weight = number_widget(ParameterWidgetsInfo::new(node_id, WeightInput::INDEX, true, context), NumberInput::default().unit(" px").min(0.)); @@ -1877,7 +1891,7 @@ pub fn math_properties(node_id: NodeId, context: &mut NodePropertiesContext) -> let mut expression = x.value.trim().to_string(); if ["+", "-", "*", "/", "^", "%"].iter().any(|&infix| infix == expression) { - expression = format!("A {} B", expression); + expression = format!("A {expression} B"); } else if expression == "^" { expression = String::from("A^B"); } @@ -1938,7 +1952,7 @@ pub mod choice { use super::ParameterWidgetsInfo; use crate::messages::tool::tool_messages::tool_prelude::*; use graph_craft::document::value::TaggedValue; - use graphene_std::registry::{ChoiceTypeStatic, ChoiceWidgetHint}; + use graphene_std::choice_type::{ChoiceTypeStatic, ChoiceWidgetHint}; use std::marker::PhantomData; pub trait WidgetFactory { @@ -1992,16 +2006,13 @@ pub mod choice { { let items = E::list() .iter() - .map(|group| { - group + .map(|section| { + section .iter() .map(|(item, metadata)| { let updater = updater_factory(); let committer = committer_factory(); - MenuListEntry::new(metadata.name.as_ref()) - .label(metadata.label.as_ref()) - .on_update(move |_| updater(item)) - .on_commit(committer) + MenuListEntry::new(metadata.name).label(metadata.label).on_update(move |_| updater(item)).on_commit(committer) }) .collect() }) @@ -2016,15 +2027,15 @@ pub mod choice { { let items = E::list() .iter() - .flat_map(|group| group.iter()) + .flat_map(|section| section.iter()) .map(|(item, var_meta)| { let updater = updater_factory(); let committer = committer_factory(); - let entry = RadioEntryData::new(var_meta.name.as_ref()).on_update(move |_| updater(item)).on_commit(committer); - match (var_meta.icon.as_deref(), var_meta.docstring.as_deref()) { - (None, None) => entry.label(var_meta.label.as_ref()), - (None, Some(doc)) => entry.label(var_meta.label.as_ref()).tooltip(doc), - (Some(icon), None) => entry.icon(icon).tooltip(var_meta.label.as_ref()), + let entry = RadioEntryData::new(var_meta.name).on_update(move |_| updater(item)).on_commit(committer); + match (var_meta.icon, var_meta.docstring) { + (None, None) => entry.label(var_meta.label), + (None, Some(doc)) => entry.label(var_meta.label).tooltip(doc), + (Some(icon), None) => entry.icon(icon).tooltip(var_meta.label), (Some(icon), Some(doc)) => entry.icon(icon).tooltip(format!("{}\n\n{}", var_meta.label, doc)), } }) @@ -2078,7 +2089,7 @@ pub mod choice { pub fn property_row(self) -> LayoutGroup { let ParameterWidgetsInfo { document_node, node_id, index, .. } = self.parameter_info; let Some(document_node) = document_node else { - log::error!("Could not get document node when building property row for node {:?}", node_id); + log::error!("Could not get document node when building property row for node {node_id:?}"); return LayoutGroup::Row { widgets: Vec::new() }; }; diff --git a/editor/src/messages/portfolio/document/node_graph/utility_types.rs b/editor/src/messages/portfolio/document/node_graph/utility_types.rs index 3885aefca4..b3ed877769 100644 --- a/editor/src/messages/portfolio/document/node_graph/utility_types.rs +++ b/editor/src/messages/portfolio/document/node_graph/utility_types.rs @@ -1,4 +1,5 @@ -use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, OutputConnector, TypeSource}; +use crate::messages::portfolio::document::utility_types::network_interface::TypeSource; +use glam::IVec2; use graph_craft::document::NodeId; use graph_craft::document::value::TaggedValue; use graphene_std::Type; @@ -8,29 +9,35 @@ use std::borrow::Cow; pub enum FrontendGraphDataType { #[default] General, - Raster, - VectorData, Number, - Group, Artboard, + Graphic, + Raster, + Vector, + Color, + Gradient, + Typography, } impl FrontendGraphDataType { pub fn from_type(input: &Type) -> Self { match TaggedValue::from_type_or_none(input) { - TaggedValue::Image(_) | TaggedValue::RasterData(_) => Self::Raster, - TaggedValue::Subpaths(_) | TaggedValue::VectorData(_) => Self::VectorData, TaggedValue::U32(_) | TaggedValue::U64(_) + | TaggedValue::F32(_) | TaggedValue::F64(_) | TaggedValue::DVec2(_) - | TaggedValue::OptionalDVec2(_) | TaggedValue::F64Array4(_) | TaggedValue::VecF64(_) | TaggedValue::VecDVec2(_) | TaggedValue::DAffine2(_) => Self::Number, - TaggedValue::GraphicGroup(_) | TaggedValue::GraphicElement(_) => Self::Group, // TODO: Is GraphicElement supposed to be included here? - TaggedValue::ArtboardGroup(_) => Self::Artboard, + TaggedValue::Artboard(_) => Self::Artboard, + TaggedValue::Graphic(_) => Self::Graphic, + TaggedValue::Raster(_) => Self::Raster, + TaggedValue::Vector(_) => Self::Vector, + TaggedValue::Color(_) => Self::Color, + TaggedValue::Gradient(_) | TaggedValue::GradientStops(_) | TaggedValue::GradientTable(_) => Self::Gradient, + TaggedValue::String(_) => Self::Typography, _ => Self::General, } } @@ -54,7 +61,8 @@ pub struct FrontendGraphInput { #[serde(rename = "validTypes")] pub valid_types: Vec, #[serde(rename = "connectedTo")] - pub connected_to: Option, + /// Either "nothing", "import index {index}", or "{node name} output {output_index}". + pub connected_to: String, } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)] @@ -62,11 +70,13 @@ pub struct FrontendGraphOutput { #[serde(rename = "dataType")] pub data_type: FrontendGraphDataType, pub name: String, - pub description: String, #[serde(rename = "resolvedType")] pub resolved_type: String, + pub description: String, + /// If connected to an export, it is "export index {index}". + /// If connected to a node, it is "{node name} input {input_index}". #[serde(rename = "connectedTo")] - pub connected_to: Vec, + pub connected_to: Vec, } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)] @@ -87,13 +97,15 @@ pub struct FrontendNode { pub primary_output: Option, #[serde(rename = "exposedOutputs")] pub exposed_outputs: Vec, - pub position: (i32, i32), + #[serde(rename = "primaryOutputConnectedToLayer")] + pub primary_output_connected_to_layer: bool, + #[serde(rename = "primaryInputConnectedToLayer")] + pub primary_input_connected_to_layer: bool, + pub position: IVec2, pub visible: bool, pub locked: bool, pub previewed: bool, pub errors: Option, - #[serde(rename = "uiOnly")] - pub ui_only: bool, } #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)] @@ -178,8 +190,8 @@ pub struct FrontendClickTargets { pub node_click_targets: Vec, #[serde(rename = "layerClickTargets")] pub layer_click_targets: Vec, - #[serde(rename = "portClickTargets")] - pub port_click_targets: Vec, + #[serde(rename = "connectorClickTargets")] + pub connector_click_targets: Vec, #[serde(rename = "iconClickTargets")] pub icon_click_targets: Vec, #[serde(rename = "allNodesBoundingBox")] diff --git a/editor/src/messages/portfolio/document/overlays/grid_overlays.rs b/editor/src/messages/portfolio/document/overlays/grid_overlays.rs index 97cf2fdf7d..9155e7bce2 100644 --- a/editor/src/messages/portfolio/document/overlays/grid_overlays.rs +++ b/editor/src/messages/portfolio/document/overlays/grid_overlays.rs @@ -200,7 +200,7 @@ pub fn overlay_options(grid: &GridSnapping) -> Vec { move |input: &I| { let mut grid = grid.clone(); update(&mut grid, input); - DocumentMessage::GridOptions(grid).into() + DocumentMessage::GridOptions { options: grid }.into() } } let update_origin = |grid, update: fn(&mut GridSnapping) -> Option<&mut f64>| { diff --git a/editor/src/messages/portfolio/document/overlays/mod.rs b/editor/src/messages/portfolio/document/overlays/mod.rs index 253bec4966..f672374cf6 100644 --- a/editor/src/messages/portfolio/document/overlays/mod.rs +++ b/editor/src/messages/portfolio/document/overlays/mod.rs @@ -2,6 +2,7 @@ pub mod grid_overlays; mod overlays_message; mod overlays_message_handler; pub mod utility_functions; +#[cfg_attr(not(target_family = "wasm"), path = "utility_types_vello.rs")] pub mod utility_types; #[doc(inline)] diff --git a/editor/src/messages/portfolio/document/overlays/overlays_message.rs b/editor/src/messages/portfolio/document/overlays/overlays_message.rs index 5ab1e7773c..8610e25057 100644 --- a/editor/src/messages/portfolio/document/overlays/overlays_message.rs +++ b/editor/src/messages/portfolio/document/overlays/overlays_message.rs @@ -7,14 +7,14 @@ use crate::messages::prelude::*; pub enum OverlaysMessage { Draw, // Serde functionality isn't used but is required by the message system macros - AddProvider( + AddProvider { #[serde(skip, default = "empty_provider")] #[derivative(Debug = "ignore", PartialEq = "ignore")] - OverlayProvider, - ), - RemoveProvider( + provider: OverlayProvider, + }, + RemoveProvider { #[serde(skip, default = "empty_provider")] #[derivative(Debug = "ignore", PartialEq = "ignore")] - OverlayProvider, - ), + provider: OverlayProvider, + }, } diff --git a/editor/src/messages/portfolio/document/overlays/overlays_message_handler.rs b/editor/src/messages/portfolio/document/overlays/overlays_message_handler.rs index a70a3bfa50..e6da0a9bcb 100644 --- a/editor/src/messages/portfolio/document/overlays/overlays_message_handler.rs +++ b/editor/src/messages/portfolio/document/overlays/overlays_message_handler.rs @@ -11,21 +11,24 @@ pub struct OverlaysMessageContext<'a> { #[derive(Debug, Clone, Default, ExtractField)] pub struct OverlaysMessageHandler { pub overlay_providers: HashSet, - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] canvas: Option, - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] context: Option, } #[message_handler_data] impl MessageHandler> for OverlaysMessageHandler { fn process_message(&mut self, message: OverlaysMessage, responses: &mut VecDeque, context: OverlaysMessageContext) { - let OverlaysMessageContext { visibility_settings, ipp, .. } = context; - #[cfg(target_arch = "wasm32")] - let device_pixel_ratio = context.device_pixel_ratio; + let OverlaysMessageContext { + visibility_settings, + ipp, + device_pixel_ratio, + .. + } = context; match message { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] OverlaysMessage::Draw => { use super::utility_functions::overlay_canvas_element; use super::utility_types::OverlayContext; @@ -53,12 +56,14 @@ impl MessageHandler> for OverlaysMes let _ = canvas_context.reset_transform(); if visibility_settings.all() { - responses.add(DocumentMessage::GridOverlays(OverlayContext { - render_context: canvas_context.clone(), - size: size.as_dvec2(), - device_pixel_ratio, - visibility_settings: visibility_settings.clone(), - })); + responses.add(DocumentMessage::GridOverlays { + context: OverlayContext { + render_context: canvas_context.clone(), + size: size.as_dvec2(), + device_pixel_ratio, + visibility_settings: visibility_settings.clone(), + }, + }); for provider in &self.overlay_providers { responses.add(provider(OverlayContext { render_context: canvas_context.clone(), @@ -69,14 +74,31 @@ impl MessageHandler> for OverlaysMes } } } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(all(not(target_family = "wasm"), not(test)))] OverlaysMessage::Draw => { - warn!("Cannot render overlays on non-Wasm targets.\n{responses:?} {visibility_settings:?} {ipp:?}",); + use super::utility_types::OverlayContext; + + let size = ipp.viewport_bounds.size(); + + let overlay_context = OverlayContext::new(size, device_pixel_ratio, visibility_settings); + + if visibility_settings.all() { + responses.add(DocumentMessage::GridOverlays { context: overlay_context.clone() }); + + for provider in &self.overlay_providers { + responses.add(provider(overlay_context.clone())); + } + } + responses.add(FrontendMessage::RenderOverlays { context: overlay_context }); } - OverlaysMessage::AddProvider(message) => { + #[cfg(all(not(target_family = "wasm"), test))] + OverlaysMessage::Draw => { + let _ = (responses, visibility_settings, ipp, device_pixel_ratio); + } + OverlaysMessage::AddProvider { provider: message } => { self.overlay_providers.insert(message); } - OverlaysMessage::RemoveProvider(message) => { + OverlaysMessage::RemoveProvider { provider: message } => { self.overlay_providers.remove(&message); } } diff --git a/editor/src/messages/portfolio/document/overlays/source-sans-pro-regular.ttf b/editor/src/messages/portfolio/document/overlays/source-sans-pro-regular.ttf new file mode 100644 index 0000000000..ffe27865aa Binary files /dev/null and b/editor/src/messages/portfolio/document/overlays/source-sans-pro-regular.ttf differ diff --git a/editor/src/messages/portfolio/document/overlays/utility_functions.rs b/editor/src/messages/portfolio/document/overlays/utility_functions.rs index 463971c65c..fa0f3a0e8e 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_functions.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_functions.rs @@ -1,12 +1,14 @@ use super::utility_types::{DrawHandles, OverlayContext}; use crate::consts::HIDE_HANDLE_DISTANCE; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; use crate::messages::tool::common_functionality::shape_editor::{SelectedLayerState, ShapeState}; use crate::messages::tool::tool_messages::tool_prelude::{DocumentMessageHandler, PreferencesMessageHandler}; -use bezier_rs::{Bezier, BezierHandles}; use glam::{DAffine2, DVec2}; -use graphene_std::vector::ManipulatorPointId; -use graphene_std::vector::{PointId, SegmentId}; +use graphene_std::subpath::{Bezier, BezierHandles}; +use graphene_std::vector::misc::ManipulatorPointId; +use graphene_std::vector::{PointId, SegmentId, Vector}; +use std::collections::HashMap; use wasm_bindgen::JsCast; pub fn overlay_canvas_element() -> Option { @@ -24,33 +26,40 @@ pub fn overlay_canvas_context() -> web_sys::CanvasRenderingContext2d { create_context().expect("Failed to get canvas context") } -pub fn selected_segments(network_interface: &NodeNetworkInterface, shape_editor: &ShapeState) -> Vec { - let selected_points = shape_editor.selected_points(); - let selected_anchors = selected_points - .filter_map(|point_id| if let ManipulatorPointId::Anchor(p) = point_id { Some(*p) } else { None }) +pub fn selected_segments(network_interface: &NodeNetworkInterface, shape_editor: &ShapeState) -> HashMap> { + let mut map = HashMap::new(); + + for (layer, state) in &shape_editor.selected_shape_state { + let Some(vector) = network_interface.compute_modified_vector(*layer) else { continue }; + let selected_segments = selected_segments_for_layer(&vector, state); + + map.insert(*layer, selected_segments); + } + + map +} + +pub fn selected_segments_for_layer(vector: &Vector, state: &SelectedLayerState) -> Vec { + let selected_anchors = state + .selected_points() + .filter_map(|point| if let ManipulatorPointId::Anchor(p) = point { Some(p) } else { None }) .collect::>(); // Collect the segments whose handles are selected - let mut selected_segments = shape_editor + let mut selected_segments = state .selected_points() .filter_map(|point_id| match point_id { - ManipulatorPointId::PrimaryHandle(segment_id) | ManipulatorPointId::EndHandle(segment_id) => Some(*segment_id), + ManipulatorPointId::PrimaryHandle(segment_id) | ManipulatorPointId::EndHandle(segment_id) => Some(segment_id), ManipulatorPointId::Anchor(_) => None, }) .collect::>(); - // TODO: Currently if there are two duplicate layers, both of their segments get overlays // Adding segments which are are connected to selected anchors - for layer in network_interface.selected_nodes().selected_layers(network_interface.document_metadata()) { - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue }; - - for (segment_id, _bezier, start, end) in vector_data.segment_bezier_iter() { - if selected_anchors.contains(&start) || selected_anchors.contains(&end) { - selected_segments.push(segment_id); - } + for (segment_id, _bezier, start, end) in vector.segment_bezier_iter() { + if selected_anchors.contains(&start) || selected_anchors.contains(&end) { + selected_segments.push(segment_id); } } - selected_segments } @@ -118,51 +127,54 @@ pub fn path_overlays(document: &DocumentMessageHandler, draw_handles: DrawHandle let display_anchors = overlay_context.visibility_settings.anchors(); for layer in document.network_interface.selected_nodes().selected_layers(document.metadata()) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let transform = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); if display_path { - overlay_context.outline_vector(&vector_data, transform); + overlay_context.outline_vector(&vector, transform); } - // Get the selected segments and then add a bold line overlay on them - for (segment_id, bezier, _, _) in vector_data.segment_bezier_iter() { - let Some(selected_shape_state) = shape_editor.selected_shape_state.get_mut(&layer) else { - continue; - }; + let Some(selected_shape_state) = shape_editor.selected_shape_state.get_mut(&layer) else { + continue; + }; + // Get the selected segments and then add a bold line overlay on them + for (segment_id, bezier, _, _) in vector.segment_iter() { if selected_shape_state.is_segment_selected(segment_id) { overlay_context.outline_select_bezier(bezier, transform); } } - let selected = shape_editor.selected_shape_state.get(&layer); - let is_selected = |point: ManipulatorPointId| selected.is_some_and(|selected| selected.is_point_selected(point)); + let is_selected = |point: ManipulatorPointId| selected_shape_state.is_point_selected(point); if display_handles { - let opposite_handles_data: Vec<(PointId, SegmentId)> = shape_editor.selected_points().filter_map(|point_id| vector_data.adjacent_segment(point_id)).collect(); + let opposite_handles_data = selected_shape_state.selected_points().filter_map(|point_id| vector.adjacent_segment(&point_id)).collect::>(); match draw_handles { DrawHandles::All => { - vector_data.segment_bezier_iter().for_each(|(segment_id, bezier, _start, _end)| { + vector.segment_bezier_iter().for_each(|(segment_id, bezier, _start, _end)| { overlay_bezier_handles(bezier, segment_id, transform, is_selected, overlay_context); }); } DrawHandles::SelectedAnchors(ref selected_segments) => { - vector_data + let Some(focused_segments) = selected_segments.get(&layer) else { continue }; + + vector .segment_bezier_iter() - .filter(|(segment_id, ..)| selected_segments.contains(segment_id)) + .filter(|(segment_id, ..)| focused_segments.contains(segment_id)) .for_each(|(segment_id, bezier, _start, _end)| { overlay_bezier_handles(bezier, segment_id, transform, is_selected, overlay_context); }); - for (segment_id, bezier, start, end) in vector_data.segment_bezier_iter() { + for (segment_id, bezier, start, end) in vector.segment_bezier_iter() { if let Some((corresponding_anchor, _)) = opposite_handles_data.iter().find(|(_, adj_segment_id)| adj_segment_id == &segment_id) { overlay_bezier_handle_specific_point(bezier, segment_id, (start, end), *corresponding_anchor, transform, is_selected, overlay_context); } } } - DrawHandles::FrontierHandles(ref segment_endpoints) => { - vector_data + DrawHandles::FrontierHandles(ref segment_endpoints_by_layer) => { + let Some(segment_endpoints) = segment_endpoints_by_layer.get(&layer) else { continue }; + + vector .segment_bezier_iter() .filter(|(segment_id, ..)| segment_endpoints.contains_key(segment_id)) .for_each(|(segment_id, bezier, start, end)| { @@ -179,7 +191,7 @@ pub fn path_overlays(document: &DocumentMessageHandler, draw_handles: DrawHandle } if display_anchors { - for (&id, &position) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { + for (&id, &position) in vector.point_domain.ids().iter().zip(vector.point_domain.positions()) { overlay_context.manipulator_anchor(transform.transform_point2(position), is_selected(ManipulatorPointId::Anchor(id)), None); } } @@ -192,7 +204,7 @@ pub fn path_endpoint_overlays(document: &DocumentMessageHandler, shape_editor: & } for layer in document.network_interface.selected_nodes().selected_layers(document.metadata()) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue; }; //let document_to_viewport = document.navigation_handler.calculate_offset_transform(overlay_context.size / 2., &document.document_ptz); @@ -200,8 +212,8 @@ pub fn path_endpoint_overlays(document: &DocumentMessageHandler, shape_editor: & let selected = shape_editor.selected_shape_state.get(&layer); let is_selected = |selected: Option<&SelectedLayerState>, point: ManipulatorPointId| selected.is_some_and(|selected| selected.is_point_selected(point)); - for point in vector_data.extendable_points(preferences.vector_meshes) { - let Some(position) = vector_data.point_domain.position_from_id(point) else { continue }; + for point in vector.extendable_points(preferences.vector_meshes) { + let Some(position) = vector.point_domain.position_from_id(point) else { continue }; let position = transform.transform_point2(position); overlay_context.manipulator_anchor(position, is_selected(selected, ManipulatorPointId::Anchor(point)), None); } diff --git a/editor/src/messages/portfolio/document/overlays/utility_types.rs b/editor/src/messages/portfolio/document/overlays/utility_types.rs index 86cdd85824..f02372ff11 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_types.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_types.rs @@ -1,18 +1,21 @@ use super::utility_functions::overlay_canvas_context; use crate::consts::{ - COLOR_OVERLAY_BLUE, COLOR_OVERLAY_BLUE_50, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, COLOR_OVERLAY_WHITE, COLOR_OVERLAY_YELLOW, COLOR_OVERLAY_YELLOW_DULL, COMPASS_ROSE_ARROW_SIZE, - COMPASS_ROSE_HOVER_RING_DIAMETER, COMPASS_ROSE_MAIN_RING_DIAMETER, COMPASS_ROSE_RING_INNER_DIAMETER, DOWEL_PIN_RADIUS, MANIPULATOR_GROUP_MARKER_SIZE, PIVOT_CROSSHAIR_LENGTH, - PIVOT_CROSSHAIR_THICKNESS, PIVOT_DIAMETER, + ARC_SWEEP_GIZMO_RADIUS, COLOR_OVERLAY_BLUE, COLOR_OVERLAY_BLUE_50, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, COLOR_OVERLAY_WHITE, COLOR_OVERLAY_YELLOW, COLOR_OVERLAY_YELLOW_DULL, + COMPASS_ROSE_ARROW_SIZE, COMPASS_ROSE_HOVER_RING_DIAMETER, COMPASS_ROSE_MAIN_RING_DIAMETER, COMPASS_ROSE_RING_INNER_DIAMETER, DOWEL_PIN_RADIUS, MANIPULATOR_GROUP_MARKER_SIZE, + PIVOT_CROSSHAIR_LENGTH, PIVOT_CROSSHAIR_THICKNESS, PIVOT_DIAMETER, SEGMENT_SELECTED_THICKNESS, }; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::prelude::Message; -use bezier_rs::{Bezier, Subpath}; use core::borrow::Borrow; use core::f64::consts::{FRAC_PI_2, PI, TAU}; use glam::{DAffine2, DVec2}; use graphene_std::Color; use graphene_std::math::quad::Quad; +use graphene_std::subpath::Subpath; use graphene_std::vector::click_target::ClickTargetType; -use graphene_std::vector::{PointId, SegmentId, VectorData}; +use graphene_std::vector::misc::{dvec2_to_point, point_to_dvec2}; +use graphene_std::vector::{PointId, SegmentId, Vector}; +use kurbo::{self, Affine, CubicBez, ParamCurve, PathSeg}; use std::collections::HashMap; use wasm_bindgen::{JsCast, JsValue}; use web_sys::{OffscreenCanvas, OffscreenCanvasRenderingContext2d}; @@ -23,7 +26,7 @@ pub fn empty_provider() -> OverlayProvider { |_| Message::NoOp } -// Types of overlays used by DocumentMessage to enable/disable select group of overlays in the frontend +/// Types of overlays used by DocumentMessage to enable/disable the selected set of viewport overlays. #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub enum OverlaysType { ArtboardName, @@ -294,6 +297,147 @@ impl OverlayContext { self.end_dpi_aware_transform(); } + #[allow(clippy::too_many_arguments)] + pub fn dashed_ellipse( + &mut self, + center: DVec2, + radius_x: f64, + radius_y: f64, + rotation: Option, + start_angle: Option, + end_angle: Option, + counterclockwise: Option, + color_fill: Option<&str>, + color_stroke: Option<&str>, + dash_width: Option, + dash_gap_width: Option, + dash_offset: Option, + ) { + let color_stroke = color_stroke.unwrap_or(COLOR_OVERLAY_BLUE); + let center = center.round(); + + self.start_dpi_aware_transform(); + + if let Some(dash_width) = dash_width { + let dash_gap_width = dash_gap_width.unwrap_or(1.); + let array = js_sys::Array::new(); + array.push(&JsValue::from(dash_width)); + array.push(&JsValue::from(dash_gap_width)); + + if let Some(dash_offset) = dash_offset { + if dash_offset != 0. { + self.render_context.set_line_dash_offset(dash_offset); + } + } + + self.render_context + .set_line_dash(&JsValue::from(array)) + .map_err(|error| log::warn!("Error drawing dashed line: {:?}", error)) + .ok(); + } + + self.render_context.begin_path(); + self.render_context + .ellipse_with_anticlockwise( + center.x, + center.y, + radius_x, + radius_y, + rotation.unwrap_or_default(), + start_angle.unwrap_or_default(), + end_angle.unwrap_or(TAU), + counterclockwise.unwrap_or_default(), + ) + .expect("Failed to draw ellipse"); + self.render_context.set_stroke_style_str(color_stroke); + + if let Some(fill_color) = color_fill { + self.render_context.set_fill_style_str(fill_color); + self.render_context.fill(); + } + self.render_context.stroke(); + + // Reset the dash pattern back to solid + if dash_width.is_some() { + self.render_context + .set_line_dash(&JsValue::from(js_sys::Array::new())) + .map_err(|error| log::warn!("Error drawing dashed line: {:?}", error)) + .ok(); + } + if dash_offset.is_some() && dash_offset != Some(0.) { + self.render_context.set_line_dash_offset(0.); + } + + self.end_dpi_aware_transform(); + } + + pub fn dashed_circle( + &mut self, + position: DVec2, + radius: f64, + color_fill: Option<&str>, + color_stroke: Option<&str>, + dash_width: Option, + dash_gap_width: Option, + dash_offset: Option, + transform: Option, + ) { + let color_stroke = color_stroke.unwrap_or(COLOR_OVERLAY_BLUE); + let position = position.round(); + + self.start_dpi_aware_transform(); + + if let Some(transform) = transform { + let [a, b, c, d, e, f] = transform.to_cols_array(); + self.render_context.transform(a, b, c, d, e, f).expect("Failed to transform circle"); + } + + if let Some(dash_width) = dash_width { + let dash_gap_width = dash_gap_width.unwrap_or(1.); + let array = js_sys::Array::new(); + array.push(&JsValue::from(dash_width)); + array.push(&JsValue::from(dash_gap_width)); + + if let Some(dash_offset) = dash_offset { + if dash_offset != 0. { + self.render_context.set_line_dash_offset(dash_offset); + } + } + + self.render_context + .set_line_dash(&JsValue::from(array)) + .map_err(|error| log::warn!("Error drawing dashed line: {:?}", error)) + .ok(); + } + + self.render_context.begin_path(); + self.render_context.arc(position.x, position.y, radius, 0., TAU).expect("Failed to draw the circle"); + self.render_context.set_stroke_style_str(color_stroke); + + if let Some(fill_color) = color_fill { + self.render_context.set_fill_style_str(fill_color); + self.render_context.fill(); + } + self.render_context.stroke(); + + // Reset the dash pattern back to solid + if dash_width.is_some() { + self.render_context + .set_line_dash(&JsValue::from(js_sys::Array::new())) + .map_err(|error| log::warn!("Error drawing dashed line: {:?}", error)) + .ok(); + } + if dash_offset.is_some() && dash_offset != Some(0.) { + self.render_context.set_line_dash_offset(0.); + } + + self.end_dpi_aware_transform(); + } + + pub fn circle(&mut self, position: DVec2, radius: f64, color_fill: Option<&str>, color_stroke: Option<&str>) { + self.dashed_circle(position, radius, color_fill, color_stroke, None, None, None, None); + } + pub fn manipulator_handle(&mut self, position: DVec2, selected: bool, color: Option<&str>) { self.start_dpi_aware_transform(); @@ -319,6 +463,42 @@ impl OverlayContext { self.square(position, None, Some(color_fill), Some(color_stroke)); } + pub fn hover_manipulator_handle(&mut self, position: DVec2, selected: bool) { + self.start_dpi_aware_transform(); + + let position = position.round() - DVec2::splat(0.5); + + self.render_context.begin_path(); + self.render_context + .arc(position.x, position.y, (MANIPULATOR_GROUP_MARKER_SIZE + 2.) / 2., 0., TAU) + .expect("Failed to draw the circle"); + + self.render_context.set_fill_style_str(COLOR_OVERLAY_BLUE_50); + self.render_context.set_stroke_style_str(COLOR_OVERLAY_BLUE_50); + self.render_context.fill(); + self.render_context.stroke(); + + self.render_context.begin_path(); + self.render_context + .arc(position.x, position.y, MANIPULATOR_GROUP_MARKER_SIZE / 2., 0., TAU) + .expect("Failed to draw the circle"); + + let color_fill = if selected { COLOR_OVERLAY_BLUE } else { COLOR_OVERLAY_WHITE }; + + self.render_context.set_fill_style_str(color_fill); + self.render_context.set_stroke_style_str(COLOR_OVERLAY_BLUE); + self.render_context.fill(); + self.render_context.stroke(); + + self.end_dpi_aware_transform(); + } + + pub fn hover_manipulator_anchor(&mut self, position: DVec2, selected: bool) { + self.square(position, Some(MANIPULATOR_GROUP_MARKER_SIZE + 2.), Some(COLOR_OVERLAY_BLUE_50), Some(COLOR_OVERLAY_BLUE_50)); + let color_fill = if selected { COLOR_OVERLAY_BLUE } else { COLOR_OVERLAY_WHITE }; + self.square(position, None, Some(color_fill), Some(COLOR_OVERLAY_BLUE)); + } + /// Transforms the canvas context to adjust for DPI scaling /// /// Overwrites all existing tranforms. This operation can be reversed with [`Self::reset_transform`]. @@ -374,23 +554,6 @@ impl OverlayContext { self.end_dpi_aware_transform(); } - pub fn circle(&mut self, position: DVec2, radius: f64, color_fill: Option<&str>, color_stroke: Option<&str>) { - let color_fill = color_fill.unwrap_or(COLOR_OVERLAY_WHITE); - let color_stroke = color_stroke.unwrap_or(COLOR_OVERLAY_BLUE); - let position = position.round(); - - self.start_dpi_aware_transform(); - - self.render_context.begin_path(); - self.render_context.arc(position.x, position.y, radius, 0., TAU).expect("Failed to draw the circle"); - self.render_context.set_fill_style_str(color_fill); - self.render_context.set_stroke_style_str(color_stroke); - self.render_context.fill(); - self.render_context.stroke(); - - self.end_dpi_aware_transform(); - } - pub fn draw_arc(&mut self, center: DVec2, radius: f64, start_from: f64, end_at: f64) { let segments = ((end_at - start_from).abs() / (std::f64::consts::PI / 4.)).ceil() as usize; let step = (end_at - start_from) / segments as f64; @@ -411,11 +574,7 @@ impl OverlayContext { let handle_start = start + start_vec.perp() * radius * factor; let handle_end = end - end_vec.perp() * radius * factor; - let bezier = Bezier { - start, - end, - handles: bezier_rs::BezierHandles::Cubic { handle_start, handle_end }, - }; + let bezier = PathSeg::Cubic(CubicBez::new(dvec2_to_point(start), dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(end))); self.bezier_command(bezier, DAffine2::IDENTITY, i == 0); } @@ -423,6 +582,12 @@ impl OverlayContext { self.render_context.stroke(); } + pub fn draw_arc_gizmo_angle(&mut self, pivot: DVec2, bold_radius: f64, arc_radius: f64, offset_angle: f64, angle: f64) { + let end_point1 = pivot + bold_radius * DVec2::from_angle(angle + offset_angle); + self.line(pivot, end_point1, None, None); + self.draw_arc(pivot, arc_radius, offset_angle, (angle) % TAU + offset_angle); + } + pub fn draw_angle(&mut self, pivot: DVec2, radius: f64, arc_radius: f64, offset_angle: f64, angle: f64) { let end_point1 = pivot + radius * DVec2::from_angle(angle + offset_angle); let end_point2 = pivot + radius * DVec2::from_angle(offset_angle); @@ -584,13 +749,19 @@ impl OverlayContext { self.end_dpi_aware_transform(); } + pub fn arc_sweep_angle(&mut self, offset_angle: f64, angle: f64, end_point_position: DVec2, bold_radius: f64, pivot: DVec2, text: &str, transform: DAffine2) { + self.manipulator_handle(end_point_position, true, None); + self.draw_arc_gizmo_angle(pivot, bold_radius, ARC_SWEEP_GIZMO_RADIUS, offset_angle, angle.to_radians()); + self.text(&text, COLOR_OVERLAY_BLUE, None, transform, 16., [Pivot::Middle, Pivot::Middle]); + } + /// Used by the Pen and Path tools to outline the path of the shape. - pub fn outline_vector(&mut self, vector_data: &VectorData, transform: DAffine2) { + pub fn outline_vector(&mut self, vector: &Vector, transform: DAffine2) { self.start_dpi_aware_transform(); self.render_context.begin_path(); let mut last_point = None; - for (_, bezier, start_id, end_id) in vector_data.segment_bezier_iter() { + for (_, bezier, start_id, end_id) in vector.segment_iter() { let move_to = last_point != Some(start_id); last_point = Some(end_id); @@ -604,7 +775,7 @@ impl OverlayContext { } /// Used by the Pen tool in order to show how the bezier curve would look like. - pub fn outline_bezier(&mut self, bezier: Bezier, transform: DAffine2) { + pub fn outline_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { self.start_dpi_aware_transform(); self.render_context.begin_path(); @@ -616,13 +787,13 @@ impl OverlayContext { } /// Used by the path tool segment mode in order to show the selected segments. - pub fn outline_select_bezier(&mut self, bezier: Bezier, transform: DAffine2) { + pub fn outline_select_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { self.start_dpi_aware_transform(); self.render_context.begin_path(); self.bezier_command(bezier, transform, true); self.render_context.set_stroke_style_str(COLOR_OVERLAY_BLUE); - self.render_context.set_line_width(4.); + self.render_context.set_line_width(SEGMENT_SELECTED_THICKNESS); self.render_context.stroke(); self.render_context.set_line_width(1.); @@ -630,13 +801,13 @@ impl OverlayContext { self.end_dpi_aware_transform(); } - pub fn outline_overlay_bezier(&mut self, bezier: Bezier, transform: DAffine2) { + pub fn outline_overlay_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { self.start_dpi_aware_transform(); self.render_context.begin_path(); self.bezier_command(bezier, transform, true); self.render_context.set_stroke_style_str(COLOR_OVERLAY_BLUE_50); - self.render_context.set_line_width(4.); + self.render_context.set_line_width(SEGMENT_SELECTED_THICKNESS); self.render_context.stroke(); self.render_context.set_line_width(1.); @@ -644,18 +815,18 @@ impl OverlayContext { self.end_dpi_aware_transform(); } - fn bezier_command(&self, bezier: Bezier, transform: DAffine2, move_to: bool) { + fn bezier_command(&self, bezier: PathSeg, transform: DAffine2, move_to: bool) { self.start_dpi_aware_transform(); - let Bezier { start, end, handles } = bezier.apply_transformation(|point| transform.transform_point2(point)); + let bezier = Affine::new(transform.to_cols_array()) * bezier; if move_to { - self.render_context.move_to(start.x, start.y); + self.render_context.move_to(bezier.start().x, bezier.start().y); } - - match handles { - bezier_rs::BezierHandles::Linear => self.render_context.line_to(end.x, end.y), - bezier_rs::BezierHandles::Quadratic { handle } => self.render_context.quadratic_curve_to(handle.x, handle.y, end.x, end.y), - bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => self.render_context.bezier_curve_to(handle_start.x, handle_start.y, handle_end.x, handle_end.y, end.x, end.y), + match bezier.as_path_el() { + kurbo::PathEl::LineTo(point) => self.render_context.line_to(point.x, point.y), + kurbo::PathEl::QuadTo(point, point1) => self.render_context.quadratic_curve_to(point.x, point.y, point1.x, point1.y), + kurbo::PathEl::CurveTo(point, point1, point2) => self.render_context.bezier_curve_to(point.x, point.y, point1.x, point1.y, point2.x, point2.y), + _ => unreachable!(), } self.end_dpi_aware_transform(); @@ -669,36 +840,35 @@ impl OverlayContext { let subpath = subpath.borrow(); let mut curves = subpath.iter().peekable(); - let Some(first) = curves.peek() else { + let Some(&first) = curves.peek() else { continue; }; - self.render_context.move_to(transform.transform_point2(first.start()).x, transform.transform_point2(first.start()).y); - for curve in curves { - match curve.handles { - bezier_rs::BezierHandles::Linear => { - let a = transform.transform_point2(curve.end()); - let a = a.round() - DVec2::splat(0.5); + let start_point = transform.transform_point2(point_to_dvec2(first.start())); + self.render_context.move_to(start_point.x, start_point.y); - self.render_context.line_to(a.x, a.y) + for curve in curves { + match curve { + PathSeg::Line(line) => { + let a = transform.transform_point2(point_to_dvec2(line.p1)); + let a = a.round() - DVec2::splat(0.5); + self.render_context.line_to(a.x, a.y); } - bezier_rs::BezierHandles::Quadratic { handle } => { - let a = transform.transform_point2(handle); - let b = transform.transform_point2(curve.end()); + PathSeg::Quad(quad_bez) => { + let a = transform.transform_point2(point_to_dvec2(quad_bez.p1)); + let b = transform.transform_point2(point_to_dvec2(quad_bez.p2)); let a = a.round() - DVec2::splat(0.5); let b = b.round() - DVec2::splat(0.5); - - self.render_context.quadratic_curve_to(a.x, a.y, b.x, b.y) + self.render_context.quadratic_curve_to(a.x, a.y, b.x, b.y); } - bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => { - let a = transform.transform_point2(handle_start); - let b = transform.transform_point2(handle_end); - let c = transform.transform_point2(curve.end()); + PathSeg::Cubic(cubic_bez) => { + let a = transform.transform_point2(point_to_dvec2(cubic_bez.p1)); + let b = transform.transform_point2(point_to_dvec2(cubic_bez.p2)); + let c = transform.transform_point2(point_to_dvec2(cubic_bez.p3)); let a = a.round() - DVec2::splat(0.5); let b = b.round() - DVec2::splat(0.5); let c = c.round() - DVec2::splat(0.5); - - self.render_context.bezier_curve_to(a.x, a.y, b.x, b.y, c.x, c.y) + self.render_context.bezier_curve_to(a.x, a.y, b.x, b.y, c.x, c.y); } } } @@ -713,7 +883,7 @@ impl OverlayContext { /// Used by the Select tool to outline a path or a free point when selected or hovered. pub fn outline(&mut self, target_types: impl Iterator>, transform: DAffine2, color: Option<&str>) { - let mut subpaths: Vec> = vec![]; + let mut subpaths: Vec> = vec![]; target_types.for_each(|target_type| match target_type.borrow() { ClickTargetType::FreePoint(point) => { @@ -855,7 +1025,7 @@ pub enum Pivot { pub enum DrawHandles { All, - SelectedAnchors(Vec), - FrontierHandles(HashMap>), + SelectedAnchors(HashMap>), + FrontierHandles(HashMap>>), None, } diff --git a/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs b/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs new file mode 100644 index 0000000000..6cc9f37ab9 --- /dev/null +++ b/editor/src/messages/portfolio/document/overlays/utility_types_vello.rs @@ -0,0 +1,1197 @@ +use crate::consts::{ + ARC_SWEEP_GIZMO_RADIUS, COLOR_OVERLAY_BLUE, COLOR_OVERLAY_BLUE_50, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, COLOR_OVERLAY_WHITE, COLOR_OVERLAY_YELLOW, COLOR_OVERLAY_YELLOW_DULL, + COMPASS_ROSE_ARROW_SIZE, COMPASS_ROSE_HOVER_RING_DIAMETER, COMPASS_ROSE_MAIN_RING_DIAMETER, COMPASS_ROSE_RING_INNER_DIAMETER, DOWEL_PIN_RADIUS, MANIPULATOR_GROUP_MARKER_SIZE, + PIVOT_CROSSHAIR_LENGTH, PIVOT_CROSSHAIR_THICKNESS, PIVOT_DIAMETER, +}; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; +use crate::messages::prelude::Message; +use core::borrow::Borrow; +use core::f64::consts::{FRAC_PI_2, PI, TAU}; +use glam::{DAffine2, DVec2}; +use graphene_std::Color; +use graphene_std::math::quad::Quad; +use graphene_std::subpath::{self, Subpath}; +use graphene_std::table::Table; +use graphene_std::text::{TextAlign, TypesettingConfig, load_font, to_path}; +use graphene_std::vector::click_target::ClickTargetType; +use graphene_std::vector::misc::point_to_dvec2; +use graphene_std::vector::{PointId, SegmentId, Vector}; +use kurbo::{self, BezPath, ParamCurve}; +use kurbo::{Affine, PathSeg}; +use std::collections::HashMap; +use std::sync::{Arc, Mutex, MutexGuard}; +use vello::Scene; +use vello::peniko; + +pub type OverlayProvider = fn(OverlayContext) -> Message; + +pub fn empty_provider() -> OverlayProvider { + |_| Message::NoOp +} + +/// Types of overlays used by DocumentMessage to enable/disable the selected set of viewport overlays. +#[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] +pub enum OverlaysType { + ArtboardName, + CompassRose, + QuickMeasurement, + TransformMeasurement, + TransformCage, + HoverOutline, + SelectionOutline, + Pivot, + Origin, + Path, + Anchors, + Handles, +} + +#[derive(PartialEq, Copy, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] +#[serde(default)] +pub struct OverlaysVisibilitySettings { + pub all: bool, + pub artboard_name: bool, + pub compass_rose: bool, + pub quick_measurement: bool, + pub transform_measurement: bool, + pub transform_cage: bool, + pub hover_outline: bool, + pub selection_outline: bool, + pub pivot: bool, + pub origin: bool, + pub path: bool, + pub anchors: bool, + pub handles: bool, +} + +impl Default for OverlaysVisibilitySettings { + fn default() -> Self { + Self { + all: true, + artboard_name: true, + compass_rose: true, + quick_measurement: true, + transform_measurement: true, + transform_cage: true, + hover_outline: true, + selection_outline: true, + pivot: true, + origin: true, + path: true, + anchors: true, + handles: true, + } + } +} + +impl OverlaysVisibilitySettings { + pub fn all(&self) -> bool { + self.all + } + + pub fn artboard_name(&self) -> bool { + self.all && self.artboard_name + } + + pub fn compass_rose(&self) -> bool { + self.all && self.compass_rose + } + + pub fn quick_measurement(&self) -> bool { + self.all && self.quick_measurement + } + + pub fn transform_measurement(&self) -> bool { + self.all && self.transform_measurement + } + + pub fn transform_cage(&self) -> bool { + self.all && self.transform_cage + } + + pub fn hover_outline(&self) -> bool { + self.all && self.hover_outline + } + + pub fn selection_outline(&self) -> bool { + self.all && self.selection_outline + } + + pub fn pivot(&self) -> bool { + self.all && self.pivot + } + + pub fn origin(&self) -> bool { + self.all && self.origin + } + + pub fn path(&self) -> bool { + self.all && self.path + } + + pub fn anchors(&self) -> bool { + self.all && self.anchors + } + + pub fn handles(&self) -> bool { + self.all && self.anchors && self.handles + } +} + +#[derive(serde::Serialize, serde::Deserialize, specta::Type)] +pub struct OverlayContext { + // Serde functionality isn't used but is required by the message system macros + #[serde(skip)] + #[specta(skip)] + internal: Arc>, + pub size: DVec2, + // The device pixel ratio is a property provided by the browser window and is the CSS pixel size divided by the physical monitor's pixel size. + // It allows better pixel density of visualizations on high-DPI displays where the OS display scaling is not 100%, or where the browser is zoomed. + pub device_pixel_ratio: f64, + pub visibility_settings: OverlaysVisibilitySettings, +} + +impl Clone for OverlayContext { + fn clone(&self) -> Self { + let internal = self.internal.lock().expect("Failed to lock internal overlay context"); + let size = internal.size; + let device_pixel_ratio = internal.device_pixel_ratio; + let visibility_settings = internal.visibility_settings; + drop(internal); // Explicitly release the lock before cloning the Arc> + Self { + internal: self.internal.clone(), + size, + device_pixel_ratio, + visibility_settings, + } + } +} + +// Manual implementations since Scene doesn't implement PartialEq or Debug +impl PartialEq for OverlayContext { + fn eq(&self, other: &Self) -> bool { + self.size == other.size && self.device_pixel_ratio == other.device_pixel_ratio && self.visibility_settings == other.visibility_settings + } +} + +impl std::fmt::Debug for OverlayContext { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("OverlayContext") + .field("scene", &"Scene { ... }") + .field("size", &self.size) + .field("device_pixel_ratio", &self.device_pixel_ratio) + .field("visibility_settings", &self.visibility_settings) + .finish() + } +} + +// Default implementation for Scene +impl Default for OverlayContext { + fn default() -> Self { + Self { + internal: Mutex::new(OverlayContextInternal::default()).into(), + size: DVec2::ZERO, + device_pixel_ratio: 1.0, + visibility_settings: OverlaysVisibilitySettings::default(), + } + } +} + +// Message hashing isn't used but is required by the message system macros +impl core::hash::Hash for OverlayContext { + fn hash(&self, _state: &mut H) {} +} + +impl OverlayContext { + #[allow(dead_code)] + pub(super) fn new(size: DVec2, device_pixel_ratio: f64, visibility_settings: OverlaysVisibilitySettings) -> Self { + Self { + internal: Arc::new(Mutex::new(OverlayContextInternal::new(size, device_pixel_ratio, visibility_settings))), + size, + device_pixel_ratio, + visibility_settings, + } + } + + pub fn take_scene(self) -> Scene { + let mut internal = self.internal.lock().expect("Failed to lock internal overlay context"); + std::mem::take(&mut *internal).scene + } + + fn internal(&'_ self) -> MutexGuard<'_, OverlayContextInternal> { + self.internal.lock().expect("Failed to lock internal overlay context") + } + + pub fn quad(&mut self, quad: Quad, stroke_color: Option<&str>, color_fill: Option<&str>) { + self.internal().quad(quad, stroke_color, color_fill); + } + + pub fn draw_triangle(&mut self, base: DVec2, direction: DVec2, size: f64, color_fill: Option<&str>, color_stroke: Option<&str>) { + self.internal().draw_triangle(base, direction, size, color_fill, color_stroke); + } + + pub fn dashed_quad(&mut self, quad: Quad, stroke_color: Option<&str>, color_fill: Option<&str>, dash_width: Option, dash_gap_width: Option, dash_offset: Option) { + self.internal().dashed_quad(quad, stroke_color, color_fill, dash_width, dash_gap_width, dash_offset); + } + + pub fn polygon(&mut self, polygon: &[DVec2], stroke_color: Option<&str>, color_fill: Option<&str>) { + self.internal().polygon(polygon, stroke_color, color_fill); + } + + pub fn dashed_polygon(&mut self, polygon: &[DVec2], stroke_color: Option<&str>, color_fill: Option<&str>, dash_width: Option, dash_gap_width: Option, dash_offset: Option) { + self.internal().dashed_polygon(polygon, stroke_color, color_fill, dash_width, dash_gap_width, dash_offset); + } + + pub fn line(&mut self, start: DVec2, end: DVec2, color: Option<&str>, thickness: Option) { + self.internal().line(start, end, color, thickness); + } + + #[allow(clippy::too_many_arguments)] + pub fn dashed_line(&mut self, start: DVec2, end: DVec2, color: Option<&str>, thickness: Option, dash_width: Option, dash_gap_width: Option, dash_offset: Option) { + self.internal().dashed_line(start, end, color, thickness, dash_width, dash_gap_width, dash_offset); + } + + pub fn hover_manipulator_handle(&mut self, position: DVec2, selected: bool) { + self.internal().hover_manipulator_handle(position, selected); + } + + pub fn hover_manipulator_anchor(&mut self, position: DVec2, selected: bool) { + self.internal().hover_manipulator_anchor(position, selected); + } + + pub fn manipulator_handle(&mut self, position: DVec2, selected: bool, color: Option<&str>) { + self.internal().manipulator_handle(position, selected, color); + } + + pub fn manipulator_anchor(&mut self, position: DVec2, selected: bool, color: Option<&str>) { + self.internal().manipulator_anchor(position, selected, color); + } + + pub fn square(&mut self, position: DVec2, size: Option, color_fill: Option<&str>, color_stroke: Option<&str>) { + self.internal().square(position, size, color_fill, color_stroke); + } + + pub fn pixel(&mut self, position: DVec2, color: Option<&str>) { + self.internal().pixel(position, color); + } + + pub fn circle(&mut self, position: DVec2, radius: f64, color_fill: Option<&str>, color_stroke: Option<&str>) { + self.internal().circle(position, radius, color_fill, color_stroke); + } + + pub fn dashed_ellipse( + &mut self, + center: DVec2, + radius_x: f64, + radius_y: f64, + rotation: Option, + start_angle: Option, + end_angle: Option, + counterclockwise: Option, + color_fill: Option<&str>, + color_stroke: Option<&str>, + dash_width: Option, + dash_gap_width: Option, + dash_offset: Option, + ) { + self.internal().dashed_ellipse( + center, + radius_x, + radius_y, + rotation, + start_angle, + end_angle, + counterclockwise, + color_fill, + color_stroke, + dash_width, + dash_gap_width, + dash_offset, + ); + } + + pub fn draw_arc(&mut self, center: DVec2, radius: f64, start_from: f64, end_at: f64) { + self.internal().draw_arc(center, radius, start_from, end_at); + } + + pub fn draw_arc_gizmo_angle(&mut self, pivot: DVec2, bold_radius: f64, arc_radius: f64, offset_angle: f64, angle: f64) { + self.internal().draw_arc_gizmo_angle(pivot, bold_radius, arc_radius, offset_angle, angle); + } + + pub fn draw_angle(&mut self, pivot: DVec2, radius: f64, arc_radius: f64, offset_angle: f64, angle: f64) { + self.internal().draw_angle(pivot, radius, arc_radius, offset_angle, angle); + } + + pub fn draw_scale(&mut self, start: DVec2, scale: f64, radius: f64, text: &str) { + self.internal().draw_scale(start, scale, radius, text); + } + + pub fn compass_rose(&mut self, compass_center: DVec2, angle: f64, show_compass_with_hover_ring: Option) { + self.internal().compass_rose(compass_center, angle, show_compass_with_hover_ring); + } + + pub fn pivot(&mut self, position: DVec2, angle: f64) { + self.internal().pivot(position, angle); + } + + pub fn dowel_pin(&mut self, position: DVec2, angle: f64, color: Option<&str>) { + self.internal().dowel_pin(position, angle, color); + } + + #[allow(clippy::too_many_arguments)] + pub fn arc_sweep_angle(&mut self, offset_angle: f64, angle: f64, end_point_position: DVec2, bold_radius: f64, pivot: DVec2, text: &str, transform: DAffine2) { + self.internal().arc_sweep_angle(offset_angle, angle, end_point_position, bold_radius, pivot, text, transform); + } + + /// Used by the Pen and Path tools to outline the path of the shape. + pub fn outline_vector(&mut self, vector: &Vector, transform: DAffine2) { + self.internal().outline_vector(vector, transform); + } + + /// Used by the Pen tool in order to show how the bezier curve would look like. + pub fn outline_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { + self.internal().outline_bezier(bezier, transform); + } + + /// Used by the path tool segment mode in order to show the selected segments. + pub fn outline_select_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { + self.internal().outline_select_bezier(bezier, transform); + } + + pub fn outline_overlay_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { + self.internal().outline_overlay_bezier(bezier, transform); + } + + /// Used by the Select tool to outline a path or a free point when selected or hovered. + pub fn outline(&mut self, target_types: impl Iterator>, transform: DAffine2, color: Option<&str>) { + self.internal().outline(target_types, transform, color); + } + + /// Fills the area inside the path. Assumes `color` is in gamma space. + /// Used by the Pen tool to show the path being closed. + pub fn fill_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { + self.internal().fill_path(subpaths, transform, color); + } + + /// Fills the area inside the path with a pattern. Assumes `color` is in gamma space. + /// Used by the fill tool to show the area to be filled. + pub fn fill_path_pattern(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &Color) { + self.internal().fill_path_pattern(subpaths, transform, color); + } + + pub fn get_width(&self, text: &str) -> f64 { + self.internal().get_width(text) + } + + pub fn text(&self, text: &str, font_color: &str, background_color: Option<&str>, transform: DAffine2, padding: f64, pivot: [Pivot; 2]) { + let mut internal = self.internal(); + internal.text(text, font_color, background_color, transform, padding, pivot); + } + + pub fn translation_box(&mut self, translation: DVec2, quad: Quad, typed_string: Option) { + self.internal().translation_box(translation, quad, typed_string); + } +} + +pub enum Pivot { + Start, + Middle, + End, +} + +pub enum DrawHandles { + All, + SelectedAnchors(HashMap>), + FrontierHandles(HashMap>>), + None, +} + +pub(super) struct OverlayContextInternal { + scene: Scene, + size: DVec2, + device_pixel_ratio: f64, + visibility_settings: OverlaysVisibilitySettings, +} + +impl Default for OverlayContextInternal { + fn default() -> Self { + Self { + scene: Scene::new(), + size: DVec2::ZERO, + device_pixel_ratio: 1.0, + visibility_settings: OverlaysVisibilitySettings::default(), + } + } +} + +impl OverlayContextInternal { + pub(super) fn new(size: DVec2, device_pixel_ratio: f64, visibility_settings: OverlaysVisibilitySettings) -> Self { + Self { + scene: Scene::new(), + size, + device_pixel_ratio, + visibility_settings, + } + } + + fn parse_color(color: &str) -> peniko::Color { + let hex = color.trim_start_matches('#'); + let r = u8::from_str_radix(&hex[0..2], 16).unwrap_or(0); + let g = u8::from_str_radix(&hex[2..4], 16).unwrap_or(0); + let b = u8::from_str_radix(&hex[4..6], 16).unwrap_or(0); + let a = if hex.len() >= 8 { u8::from_str_radix(&hex[6..8], 16).unwrap_or(255) } else { 255 }; + peniko::Color::from_rgba8(r, g, b, a) + } + + fn quad(&mut self, quad: Quad, stroke_color: Option<&str>, color_fill: Option<&str>) { + self.dashed_polygon(&quad.0, stroke_color, color_fill, None, None, None); + } + + fn draw_triangle(&mut self, base: DVec2, direction: DVec2, size: f64, color_fill: Option<&str>, color_stroke: Option<&str>) { + let color_fill = color_fill.unwrap_or(COLOR_OVERLAY_WHITE); + let color_stroke = color_stroke.unwrap_or(COLOR_OVERLAY_BLUE); + let normal = direction.perp(); + let top = base + direction * size; + let edge1 = base + normal * size / 2.; + let edge2 = base - normal * size / 2.; + + let transform = self.get_transform(); + + let mut path = BezPath::new(); + path.move_to(kurbo::Point::new(top.x, top.y)); + path.line_to(kurbo::Point::new(edge1.x, edge1.y)); + path.line_to(kurbo::Point::new(edge2.x, edge2.y)); + path.close_path(); + + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color_fill), None, &path); + + self.scene.stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(color_stroke), None, &path); + } + + fn dashed_quad(&mut self, quad: Quad, stroke_color: Option<&str>, color_fill: Option<&str>, dash_width: Option, dash_gap_width: Option, dash_offset: Option) { + self.dashed_polygon(&quad.0, stroke_color, color_fill, dash_width, dash_gap_width, dash_offset); + } + + fn polygon(&mut self, polygon: &[DVec2], stroke_color: Option<&str>, color_fill: Option<&str>) { + self.dashed_polygon(polygon, stroke_color, color_fill, None, None, None); + } + + fn dashed_polygon(&mut self, polygon: &[DVec2], stroke_color: Option<&str>, color_fill: Option<&str>, dash_width: Option, dash_gap_width: Option, dash_offset: Option) { + if polygon.len() < 2 { + return; + } + + let transform = self.get_transform(); + + let mut path = BezPath::new(); + if let Some(first) = polygon.last() { + path.move_to(kurbo::Point::new(first.x.round() - 0.5, first.y.round() - 0.5)); + } + + for point in polygon { + path.line_to(kurbo::Point::new(point.x.round() - 0.5, point.y.round() - 0.5)); + } + path.close_path(); + + if let Some(color_fill) = color_fill { + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color_fill), None, &path); + } + + let stroke_color = stroke_color.unwrap_or(COLOR_OVERLAY_BLUE); + let mut stroke = kurbo::Stroke::new(1.0); + + if let Some(dash_width) = dash_width { + let dash_gap = dash_gap_width.unwrap_or(1.); + stroke = stroke.with_dashes(dash_offset.unwrap_or(0.), [dash_width, dash_gap]); + } + + self.scene.stroke(&stroke, transform, Self::parse_color(stroke_color), None, &path); + } + + fn line(&mut self, start: DVec2, end: DVec2, color: Option<&str>, thickness: Option) { + self.dashed_line(start, end, color, thickness, None, None, None) + } + + #[allow(clippy::too_many_arguments)] + fn dashed_line(&mut self, start: DVec2, end: DVec2, color: Option<&str>, thickness: Option, dash_width: Option, dash_gap_width: Option, dash_offset: Option) { + let transform = self.get_transform(); + + let start = start.round() - DVec2::splat(0.5); + let end = end.round() - DVec2::splat(0.5); + + let mut path = BezPath::new(); + path.move_to(kurbo::Point::new(start.x, start.y)); + path.line_to(kurbo::Point::new(end.x, end.y)); + + let mut stroke = kurbo::Stroke::new(thickness.unwrap_or(1.)); + + if let Some(dash_width) = dash_width { + let dash_gap = dash_gap_width.unwrap_or(1.); + stroke = stroke.with_dashes(dash_offset.unwrap_or(0.), [dash_width, dash_gap]); + } + + self.scene.stroke(&stroke, transform, Self::parse_color(color.unwrap_or(COLOR_OVERLAY_BLUE)), None, &path); + } + + fn manipulator_handle(&mut self, position: DVec2, selected: bool, color: Option<&str>) { + let transform = self.get_transform(); + let position = position.round() - DVec2::splat(0.5); + + let circle = kurbo::Circle::new((position.x, position.y), MANIPULATOR_GROUP_MARKER_SIZE / 2.); + + let fill = if selected { COLOR_OVERLAY_BLUE } else { COLOR_OVERLAY_WHITE }; + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(fill), None, &circle); + + self.scene + .stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(color.unwrap_or(COLOR_OVERLAY_BLUE)), None, &circle); + } + + fn hover_manipulator_handle(&mut self, position: DVec2, selected: bool) { + let transform = self.get_transform(); + + let position = position.round() - DVec2::splat(0.5); + + let circle = kurbo::Circle::new((position.x, position.y), (MANIPULATOR_GROUP_MARKER_SIZE + 2.) / 2.); + + let fill = COLOR_OVERLAY_BLUE_50; + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(fill), None, &circle); + self.scene.stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(COLOR_OVERLAY_BLUE_50), None, &circle); + + let inner_circle = kurbo::Circle::new((position.x, position.y), MANIPULATOR_GROUP_MARKER_SIZE / 2.); + + let color_fill = if selected { COLOR_OVERLAY_BLUE } else { COLOR_OVERLAY_WHITE }; + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color_fill), None, &circle); + self.scene.stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(COLOR_OVERLAY_BLUE), None, &inner_circle); + } + + fn manipulator_anchor(&mut self, position: DVec2, selected: bool, color: Option<&str>) { + let color_stroke = color.unwrap_or(COLOR_OVERLAY_BLUE); + let color_fill = if selected { color_stroke } else { COLOR_OVERLAY_WHITE }; + self.square(position, None, Some(color_fill), Some(color_stroke)); + } + + fn hover_manipulator_anchor(&mut self, position: DVec2, selected: bool) { + self.square(position, Some(MANIPULATOR_GROUP_MARKER_SIZE + 2.), Some(COLOR_OVERLAY_BLUE_50), Some(COLOR_OVERLAY_BLUE_50)); + let color_fill = if selected { COLOR_OVERLAY_BLUE } else { COLOR_OVERLAY_WHITE }; + self.square(position, None, Some(color_fill), Some(COLOR_OVERLAY_BLUE)); + } + + fn get_transform(&self) -> kurbo::Affine { + kurbo::Affine::scale(self.device_pixel_ratio) + } + + fn square(&mut self, position: DVec2, size: Option, color_fill: Option<&str>, color_stroke: Option<&str>) { + let size = size.unwrap_or(MANIPULATOR_GROUP_MARKER_SIZE); + let color_fill = color_fill.unwrap_or(COLOR_OVERLAY_WHITE); + let color_stroke = color_stroke.unwrap_or(COLOR_OVERLAY_BLUE); + + let position = position.round() - DVec2::splat(0.5); + let corner = position - DVec2::splat(size) / 2.; + + let transform = self.get_transform(); + let rect = kurbo::Rect::new(corner.x, corner.y, corner.x + size, corner.y + size); + + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color_fill), None, &rect); + + self.scene.stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(color_stroke), None, &rect); + } + + fn pixel(&mut self, position: DVec2, color: Option<&str>) { + let size = 1.; + let color_fill = color.unwrap_or(COLOR_OVERLAY_WHITE); + + let position = position.round() - DVec2::splat(0.5); + let corner = position - DVec2::splat(size) / 2.; + + let transform = self.get_transform(); + let rect = kurbo::Rect::new(corner.x, corner.y, corner.x + size, corner.y + size); + + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color_fill), None, &rect); + } + + fn circle(&mut self, position: DVec2, radius: f64, color_fill: Option<&str>, color_stroke: Option<&str>) { + let color_fill = color_fill.unwrap_or(COLOR_OVERLAY_WHITE); + let color_stroke = color_stroke.unwrap_or(COLOR_OVERLAY_BLUE); + let position = position.round(); + + let transform = self.get_transform(); + let circle = kurbo::Circle::new((position.x, position.y), radius); + + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color_fill), None, &circle); + + self.scene.stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(color_stroke), None, &circle); + } + + fn dashed_ellipse( + &mut self, + _center: DVec2, + _radius_x: f64, + _radius_y: f64, + _rotation: Option, + _start_angle: Option, + _end_angle: Option, + _counterclockwise: Option, + _color_fill: Option<&str>, + _color_stroke: Option<&str>, + _dash_width: Option, + _dash_gap_width: Option, + _dash_offset: Option, + ) { + } + + fn draw_arc(&mut self, center: DVec2, radius: f64, start_from: f64, end_at: f64) { + let segments = ((end_at - start_from).abs() / (std::f64::consts::PI / 4.)).ceil() as usize; + let step = (end_at - start_from) / segments as f64; + let half_step = step / 2.; + let factor = 4. / 3. * half_step.sin() / (1. + half_step.cos()); + + let mut path = BezPath::new(); + + for i in 0..segments { + let start_angle = start_from + step * i as f64; + let end_angle = start_angle + step; + let start_vec = DVec2::from_angle(start_angle); + let end_vec = DVec2::from_angle(end_angle); + + let start = center + radius * start_vec; + let end = center + radius * end_vec; + + let handle_start = start + start_vec.perp() * radius * factor; + let handle_end = end - end_vec.perp() * radius * factor; + + if i == 0 { + path.move_to(kurbo::Point::new(start.x, start.y)); + } + + path.curve_to( + kurbo::Point::new(handle_start.x, handle_start.y), + kurbo::Point::new(handle_end.x, handle_end.y), + kurbo::Point::new(end.x, end.y), + ); + } + + self.scene.stroke(&kurbo::Stroke::new(1.0), self.get_transform(), Self::parse_color(COLOR_OVERLAY_BLUE), None, &path); + } + + fn draw_arc_gizmo_angle(&mut self, pivot: DVec2, bold_radius: f64, arc_radius: f64, offset_angle: f64, angle: f64) { + let end_point1 = pivot + bold_radius * DVec2::from_angle(angle + offset_angle); + self.line(pivot, end_point1, None, None); + self.draw_arc(pivot, arc_radius, offset_angle, (angle) % TAU + offset_angle); + } + + fn draw_angle(&mut self, pivot: DVec2, radius: f64, arc_radius: f64, offset_angle: f64, angle: f64) { + let end_point1 = pivot + radius * DVec2::from_angle(angle + offset_angle); + let end_point2 = pivot + radius * DVec2::from_angle(offset_angle); + self.line(pivot, end_point1, None, None); + self.dashed_line(pivot, end_point2, None, None, Some(2.), Some(2.), Some(0.5)); + self.draw_arc(pivot, arc_radius, offset_angle, (angle) % TAU + offset_angle); + } + + fn draw_scale(&mut self, start: DVec2, scale: f64, radius: f64, text: &str) { + let sign = scale.signum(); + let mut fill_color = Color::from_rgb_str(COLOR_OVERLAY_WHITE.strip_prefix('#').unwrap()).unwrap().with_alpha(0.05).to_rgba_hex_srgb(); + fill_color.insert(0, '#'); + let fill_color = Some(fill_color.as_str()); + self.line(start + DVec2::X * radius * sign, start + DVec2::X * (radius * scale), None, None); + self.circle(start, radius, fill_color, None); + self.circle(start, radius * scale.abs(), fill_color, None); + self.text( + text, + COLOR_OVERLAY_BLUE, + None, + DAffine2::from_translation(start + sign * DVec2::X * radius * (1. + scale.abs()) / 2.), + 2., + [Pivot::Middle, Pivot::End], + ) + } + + fn compass_rose(&mut self, compass_center: DVec2, angle: f64, show_compass_with_hover_ring: Option) { + const HOVER_RING_OUTER_RADIUS: f64 = COMPASS_ROSE_HOVER_RING_DIAMETER / 2.; + const MAIN_RING_OUTER_RADIUS: f64 = COMPASS_ROSE_MAIN_RING_DIAMETER / 2.; + const MAIN_RING_INNER_RADIUS: f64 = COMPASS_ROSE_RING_INNER_DIAMETER / 2.; + const ARROW_RADIUS: f64 = COMPASS_ROSE_ARROW_SIZE / 2.; + const HOVER_RING_STROKE_WIDTH: f64 = HOVER_RING_OUTER_RADIUS - MAIN_RING_INNER_RADIUS; + const HOVER_RING_CENTERLINE_RADIUS: f64 = (HOVER_RING_OUTER_RADIUS + MAIN_RING_INNER_RADIUS) / 2.; + const MAIN_RING_STROKE_WIDTH: f64 = MAIN_RING_OUTER_RADIUS - MAIN_RING_INNER_RADIUS; + const MAIN_RING_CENTERLINE_RADIUS: f64 = (MAIN_RING_OUTER_RADIUS + MAIN_RING_INNER_RADIUS) / 2.; + + let Some(show_hover_ring) = show_compass_with_hover_ring else { return }; + + let transform = self.get_transform(); + let center = compass_center.round() - DVec2::splat(0.5); + + // Hover ring + if show_hover_ring { + let mut fill_color = Color::from_rgb_str(COLOR_OVERLAY_BLUE.strip_prefix('#').unwrap()).unwrap().with_alpha(0.5).to_rgba_hex_srgb(); + fill_color.insert(0, '#'); + + let circle = kurbo::Circle::new((center.x, center.y), HOVER_RING_CENTERLINE_RADIUS); + self.scene + .stroke(&kurbo::Stroke::new(HOVER_RING_STROKE_WIDTH), transform, Self::parse_color(&fill_color), None, &circle); + } + + // Arrows + for i in 0..4 { + let direction = DVec2::from_angle(i as f64 * FRAC_PI_2 + angle); + let color = if i % 2 == 0 { COLOR_OVERLAY_RED } else { COLOR_OVERLAY_GREEN }; + + let tip = center + direction * HOVER_RING_OUTER_RADIUS; + let base = center + direction * (MAIN_RING_INNER_RADIUS + MAIN_RING_OUTER_RADIUS) / 2.; + + let r = (ARROW_RADIUS.powi(2) + MAIN_RING_INNER_RADIUS.powi(2)).sqrt(); + let (cos, sin) = (MAIN_RING_INNER_RADIUS / r, ARROW_RADIUS / r); + let side1 = center + r * DVec2::new(cos * direction.x - sin * direction.y, sin * direction.x + direction.y * cos); + let side2 = center + r * DVec2::new(cos * direction.x + sin * direction.y, -sin * direction.x + direction.y * cos); + + let mut path = BezPath::new(); + path.move_to(kurbo::Point::new(tip.x, tip.y)); + path.line_to(kurbo::Point::new(side1.x, side1.y)); + path.line_to(kurbo::Point::new(base.x, base.y)); + path.line_to(kurbo::Point::new(side2.x, side2.y)); + path.close_path(); + + let color_parsed = Self::parse_color(color); + self.scene.fill(peniko::Fill::NonZero, transform, color_parsed, None, &path); + self.scene.stroke(&kurbo::Stroke::new(0.01), transform, color_parsed, None, &path); + } + + // Main ring + let circle = kurbo::Circle::new((center.x, center.y), MAIN_RING_CENTERLINE_RADIUS); + self.scene + .stroke(&kurbo::Stroke::new(MAIN_RING_STROKE_WIDTH), transform, Self::parse_color(COLOR_OVERLAY_BLUE), None, &circle); + } + + fn pivot(&mut self, position: DVec2, angle: f64) { + let uv = DVec2::from_angle(angle); + let (x, y) = (position.round() - DVec2::splat(0.5)).into(); + + let transform = self.get_transform(); + + // Circle + let circle = kurbo::Circle::new((x, y), PIVOT_DIAMETER / 2.); + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(COLOR_OVERLAY_YELLOW), None, &circle); + + // Crosshair + const CROSSHAIR_RADIUS: f64 = (PIVOT_CROSSHAIR_LENGTH - PIVOT_CROSSHAIR_THICKNESS) / 2.; + + let mut stroke = kurbo::Stroke::new(PIVOT_CROSSHAIR_THICKNESS); + stroke = stroke.with_caps(kurbo::Cap::Round); + + // Horizontal line + let mut path = BezPath::new(); + path.move_to(kurbo::Point::new(x + CROSSHAIR_RADIUS * uv.x, y + CROSSHAIR_RADIUS * uv.y)); + path.line_to(kurbo::Point::new(x - CROSSHAIR_RADIUS * uv.x, y - CROSSHAIR_RADIUS * uv.y)); + + self.scene.stroke(&stroke, transform, Self::parse_color(COLOR_OVERLAY_YELLOW), None, &path); + + // Vertical line + let mut path = BezPath::new(); + path.move_to(kurbo::Point::new(x - CROSSHAIR_RADIUS * uv.y, y + CROSSHAIR_RADIUS * uv.x)); + path.line_to(kurbo::Point::new(x + CROSSHAIR_RADIUS * uv.y, y - CROSSHAIR_RADIUS * uv.x)); + + self.scene.stroke(&stroke, transform, Self::parse_color(COLOR_OVERLAY_YELLOW), None, &path); + } + + fn dowel_pin(&mut self, position: DVec2, angle: f64, color: Option<&str>) { + let (x, y) = (position.round() - DVec2::splat(0.5)).into(); + let color = color.unwrap_or(COLOR_OVERLAY_YELLOW_DULL); + + let transform = self.get_transform(); + + // Draw the background circle with a white fill and colored outline + let circle = kurbo::Circle::new((x, y), DOWEL_PIN_RADIUS); + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(COLOR_OVERLAY_WHITE), None, &circle); + self.scene.stroke(&kurbo::Stroke::new(1.0), transform, Self::parse_color(color), None, &circle); + + // Draw the two filled sectors using paths + let mut path = BezPath::new(); + + // Top-left sector + path.move_to(kurbo::Point::new(x, y)); + let end_x = x + DOWEL_PIN_RADIUS * (FRAC_PI_2 + angle).cos(); + let end_y = y + DOWEL_PIN_RADIUS * (FRAC_PI_2 + angle).sin(); + path.line_to(kurbo::Point::new(end_x, end_y)); + // Draw arc manually + let arc = kurbo::Arc::new((x, y), (DOWEL_PIN_RADIUS, DOWEL_PIN_RADIUS), FRAC_PI_2 + angle, FRAC_PI_2, 0.0); + arc.to_cubic_beziers(0.1, |p1, p2, p| { + path.curve_to(p1, p2, p); + }); + path.close_path(); + + // Bottom-right sector + path.move_to(kurbo::Point::new(x, y)); + let end_x = x + DOWEL_PIN_RADIUS * (PI + FRAC_PI_2 + angle).cos(); + let end_y = y + DOWEL_PIN_RADIUS * (PI + FRAC_PI_2 + angle).sin(); + path.line_to(kurbo::Point::new(end_x, end_y)); + // Draw arc manually + let arc = kurbo::Arc::new((x, y), (DOWEL_PIN_RADIUS, DOWEL_PIN_RADIUS), PI + FRAC_PI_2 + angle, FRAC_PI_2, 0.0); + arc.to_cubic_beziers(0.1, |p1, p2, p| { + path.curve_to(p1, p2, p); + }); + path.close_path(); + + self.scene.fill(peniko::Fill::NonZero, transform, Self::parse_color(color), None, &path); + } + + #[allow(clippy::too_many_arguments)] + fn arc_sweep_angle(&mut self, offset_angle: f64, angle: f64, end_point_position: DVec2, bold_radius: f64, pivot: DVec2, text: &str, transform: DAffine2) { + self.manipulator_handle(end_point_position, true, None); + self.draw_arc_gizmo_angle(pivot, bold_radius, ARC_SWEEP_GIZMO_RADIUS, offset_angle, angle.to_radians()); + self.text(text, COLOR_OVERLAY_BLUE, None, transform, 16., [Pivot::Middle, Pivot::Middle]); + } + + /// Used by the Pen and Path tools to outline the path of the shape. + fn outline_vector(&mut self, vector: &Vector, transform: DAffine2) { + let vello_transform = self.get_transform(); + let mut path = BezPath::new(); + + let mut last_point = None; + for (_, bezier, start_id, end_id) in vector.segment_iter() { + let move_to = last_point != Some(start_id); + last_point = Some(end_id); + + self.bezier_to_path(bezier, transform, move_to, &mut path); + } + + self.scene.stroke(&kurbo::Stroke::new(1.0), vello_transform, Self::parse_color(COLOR_OVERLAY_BLUE), None, &path); + } + + /// Used by the Pen tool in order to show how the bezier curve would look like. + fn outline_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { + let vello_transform = self.get_transform(); + let mut path = BezPath::new(); + self.bezier_to_path(bezier, transform, true, &mut path); + + self.scene.stroke(&kurbo::Stroke::new(1.0), vello_transform, Self::parse_color(COLOR_OVERLAY_BLUE), None, &path); + } + + /// Used by the path tool segment mode in order to show the selected segments. + fn outline_select_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { + let vello_transform = self.get_transform(); + let mut path = BezPath::new(); + self.bezier_to_path(bezier, transform, true, &mut path); + + self.scene.stroke(&kurbo::Stroke::new(4.0), vello_transform, Self::parse_color(COLOR_OVERLAY_BLUE), None, &path); + } + + fn outline_overlay_bezier(&mut self, bezier: PathSeg, transform: DAffine2) { + let vello_transform = self.get_transform(); + let mut path = BezPath::new(); + self.bezier_to_path(bezier, transform, true, &mut path); + + self.scene.stroke(&kurbo::Stroke::new(4.0), vello_transform, Self::parse_color(COLOR_OVERLAY_BLUE_50), None, &path); + } + + fn bezier_to_path(&self, bezier: PathSeg, transform: DAffine2, move_to: bool, path: &mut BezPath) { + let bezier = Affine::new(transform.to_cols_array()) * bezier; + if move_to { + path.move_to(bezier.start()); + } + path.push(bezier.as_path_el()); + } + + fn push_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2) -> BezPath { + let mut path = BezPath::new(); + + for subpath in subpaths { + let subpath = subpath.borrow(); + let mut curves = subpath.iter().peekable(); + + let Some(first) = curves.peek() else { + continue; + }; + + let start_point = transform.transform_point2(point_to_dvec2(first.start())); + path.move_to(kurbo::Point::new(start_point.x, start_point.y)); + + for curve in curves { + match curve { + PathSeg::Line(line) => { + let a = transform.transform_point2(point_to_dvec2(line.p1)); + let a = a.round() - DVec2::splat(0.5); + path.line_to(kurbo::Point::new(a.x, a.y)); + } + PathSeg::Quad(quad_bez) => { + let a = transform.transform_point2(point_to_dvec2(quad_bez.p1)); + let b = transform.transform_point2(point_to_dvec2(quad_bez.p2)); + let a = a.round() - DVec2::splat(0.5); + let b = b.round() - DVec2::splat(0.5); + path.quad_to(kurbo::Point::new(a.x, a.y), kurbo::Point::new(b.x, b.y)); + } + PathSeg::Cubic(cubic_bez) => { + let a = transform.transform_point2(point_to_dvec2(cubic_bez.p1)); + let b = transform.transform_point2(point_to_dvec2(cubic_bez.p2)); + let c = transform.transform_point2(point_to_dvec2(cubic_bez.p3)); + let a = a.round() - DVec2::splat(0.5); + let b = b.round() - DVec2::splat(0.5); + let c = c.round() - DVec2::splat(0.5); + path.curve_to(kurbo::Point::new(a.x, a.y), kurbo::Point::new(b.x, b.y), kurbo::Point::new(c.x, c.y)); + } + } + } + + if subpath.closed() { + path.close_path(); + } + } + + path + } + + /// Used by the Select tool to outline a path or a free point when selected or hovered. + fn outline(&mut self, target_types: impl Iterator>, transform: DAffine2, color: Option<&str>) { + let mut subpaths: Vec> = vec![]; + + for target_type in target_types { + match target_type.borrow() { + ClickTargetType::FreePoint(point) => { + self.manipulator_anchor(transform.transform_point2(point.position), false, None); + } + ClickTargetType::Subpath(subpath) => subpaths.push(subpath.clone()), + } + } + + if !subpaths.is_empty() { + let path = self.push_path(subpaths.iter(), transform); + let color = color.unwrap_or(COLOR_OVERLAY_BLUE); + + self.scene.stroke(&kurbo::Stroke::new(1.0), self.get_transform(), Self::parse_color(color), None, &path); + } + } + + /// Fills the area inside the path. Assumes `color` is in gamma space. + /// Used by the Pen tool to show the path being closed. + fn fill_path(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &str) { + let path = self.push_path(subpaths, transform); + + self.scene.fill(peniko::Fill::NonZero, self.get_transform(), Self::parse_color(color), None, &path); + } + + /// Fills the area inside the path with a pattern. Assumes `color` is in gamma space. + /// Used by the fill tool to show the area to be filled. + fn fill_path_pattern(&mut self, subpaths: impl Iterator>>, transform: DAffine2, color: &Color) { + const PATTERN_WIDTH: u32 = 4; + const PATTERN_HEIGHT: u32 = 4; + + // Create a 4x4 pixel pattern with colored pixels at (0,0) and (2,2) + // This matches the Canvas2D checkerboard pattern + let mut data = vec![0u8; (PATTERN_WIDTH * PATTERN_HEIGHT * 4) as usize]; + let rgba = color.to_rgba8_srgb(); + + // โ”Œโ–„โ–„โ”ฌโ”€โ”€โ”ฌโ”€โ”€โ”ฌโ”€โ”€โ” + // โ”œโ–€โ–€โ”ผโ”€โ”€โ”ผโ”€โ”€โ”ผโ”€โ”€โ”ค + // โ”œโ”€โ”€โ”ผโ”€โ”€โ”ผโ–„โ–„โ”ผโ”€โ”€โ”ค + // โ”œโ”€โ”€โ”ผโ”€โ”€โ”ผโ–€โ–€โ”ผโ”€โ”€โ”ค + // โ””โ”€โ”€โ”ดโ”€โ”€โ”ดโ”€โ”€โ”ดโ”€โ”€โ”˜ + // Set pixels at (0,0) and (2,2) to the specified color + let pixels = [(0, 0), (2, 2)]; + for &(x, y) in &pixels { + let index = ((y * PATTERN_WIDTH + x) * 4) as usize; + data[index..index + 4].copy_from_slice(&rgba); + } + + let image = peniko::Image { + data: data.into(), + format: peniko::ImageFormat::Rgba8, + width: PATTERN_WIDTH, + height: PATTERN_HEIGHT, + x_extend: peniko::Extend::Repeat, + y_extend: peniko::Extend::Repeat, + alpha: 1.0, + quality: peniko::ImageQuality::default(), + }; + + let path = self.push_path(subpaths, transform); + let brush = peniko::Brush::Image(image); + + self.scene.fill(peniko::Fill::NonZero, self.get_transform(), &brush, None, &path); + } + + fn get_width(&self, text: &str) -> f64 { + // Use the actual text-to-path system to get precise text width + const FONT_SIZE: f64 = 12.0; + + let typesetting = TypesettingConfig { + font_size: FONT_SIZE, + line_height_ratio: 1.2, + character_spacing: 0.0, + max_width: None, + max_height: None, + tilt: 0.0, + align: TextAlign::Left, + }; + + // Load Source Sans Pro font data + // TODO: Grab this from the node_modules folder (either with `include_bytes!` or ideally at runtime) instead of checking the font file into the repo. + // TODO: And maybe use the WOFF2 version (if it's supported) for its smaller, compressed file size. + const FONT_DATA: &[u8] = include_bytes!("source-sans-pro-regular.ttf"); + let font_blob = Some(load_font(FONT_DATA)); + + // Convert text to paths and calculate actual bounds + let text_table = to_path(text, font_blob, typesetting, false); + let text_bounds = self.calculate_text_bounds(&text_table); + text_bounds.width() + } + + fn text(&mut self, text: &str, font_color: &str, background_color: Option<&str>, transform: DAffine2, padding: f64, pivot: [Pivot; 2]) { + // Use the proper text-to-path system for accurate text rendering + const FONT_SIZE: f64 = 12.0; + + // Create typesetting configuration + let typesetting = TypesettingConfig { + font_size: FONT_SIZE, + line_height_ratio: 1.2, + character_spacing: 0.0, + max_width: None, + max_height: None, + tilt: 0.0, + align: TextAlign::Left, // We'll handle alignment manually via pivot + }; + + // Load Source Sans Pro font data + // TODO: Grab this from the node_modules folder (either with `include_bytes!` or ideally at runtime) instead of checking the font file into the repo. + // TODO: And maybe use the WOFF2 version (if it's supported) for its smaller, compressed file size. + const FONT_DATA: &[u8] = include_bytes!("source-sans-pro-regular.ttf"); + let font_blob = Some(load_font(FONT_DATA)); + + // Convert text to vector paths using the existing text system + let text_table = to_path(text, font_blob, typesetting, false); + // Calculate text bounds from the generated paths + let text_bounds = self.calculate_text_bounds(&text_table); + let text_width = text_bounds.width(); + let text_height = text_bounds.height(); + + // Calculate position based on pivot + let mut position = DVec2::ZERO; + match pivot[0] { + Pivot::Start => position.x = padding, + Pivot::Middle => position.x = -text_width / 2.0, + Pivot::End => position.x = -padding - text_width, + } + match pivot[1] { + Pivot::Start => position.y = padding, + Pivot::Middle => position.y -= text_height * 0.5, + Pivot::End => position.y = -padding - text_height, + } + + let text_transform = transform * DAffine2::from_translation(position); + let device_transform = self.get_transform(); + let combined_transform = kurbo::Affine::new(text_transform.to_cols_array()); + let vello_transform = device_transform * combined_transform; + + // Draw background if specified + if let Some(bg_color) = background_color { + let bg_rect = kurbo::Rect::new( + text_bounds.min_x() - padding, + text_bounds.min_y() - padding, + text_bounds.max_x() + padding, + text_bounds.max_y() + padding, + ); + self.scene.fill(peniko::Fill::NonZero, vello_transform, Self::parse_color(bg_color), None, &bg_rect); + } + + // Render the actual text paths + self.render_text_paths(&text_table, font_color, vello_transform); + } + + // Calculate bounds of text from vector table + fn calculate_text_bounds(&self, text_table: &Table) -> kurbo::Rect { + let mut min_x = f64::INFINITY; + let mut min_y = f64::INFINITY; + let mut max_x = f64::NEG_INFINITY; + let mut max_y = f64::NEG_INFINITY; + + for row in text_table.iter() { + // Use the existing segment_bezier_iter to get all bezier curves + for (_, bezier, _, _) in row.element.segment_bezier_iter() { + let transformed_bezier = bezier.apply_transformation(|point| row.transform.transform_point2(point)); + + // Add start and end points to bounds + let points = [transformed_bezier.start, transformed_bezier.end]; + for point in points { + min_x = min_x.min(point.x); + min_y = min_y.min(point.y); + max_x = max_x.max(point.x); + max_y = max_y.max(point.y); + } + + // Add handle points if they exist + match transformed_bezier.handles { + subpath::BezierHandles::Quadratic { handle } => { + min_x = min_x.min(handle.x); + min_y = min_y.min(handle.y); + max_x = max_x.max(handle.x); + max_y = max_y.max(handle.y); + } + subpath::BezierHandles::Cubic { handle_start, handle_end } => { + for handle in [handle_start, handle_end] { + min_x = min_x.min(handle.x); + min_y = min_y.min(handle.y); + max_x = max_x.max(handle.x); + max_y = max_y.max(handle.y); + } + } + _ => {} + } + } + } + + if min_x.is_finite() && min_y.is_finite() && max_x.is_finite() && max_y.is_finite() { + kurbo::Rect::new(min_x, min_y, max_x, max_y) + } else { + // Fallback for empty text + kurbo::Rect::new(0.0, 0.0, 0.0, 12.0) + } + } + + // Render text paths to the vello scene using existing infrastructure + fn render_text_paths(&mut self, text_table: &Table, font_color: &str, base_transform: kurbo::Affine) { + let color = Self::parse_color(font_color); + + for row in text_table.iter() { + // Use the existing bezier_to_path infrastructure to convert Vector to BezPath + let mut path = BezPath::new(); + let mut last_point = None; + + for (_, bezier, start_id, end_id) in row.element.segment_iter() { + let move_to = last_point != Some(start_id); + last_point = Some(end_id); + + self.bezier_to_path(bezier, *row.transform, move_to, &mut path); + } + + // Render the path + self.scene.fill(peniko::Fill::NonZero, base_transform, color, None, &path); + } + } + + fn translation_box(&mut self, translation: DVec2, quad: Quad, typed_string: Option) { + if translation.x.abs() > 1e-3 { + self.dashed_line(quad.top_left(), quad.top_right(), None, None, Some(2.), Some(2.), Some(0.5)); + + let width = match typed_string { + Some(ref typed_string) => typed_string, + None => &format!("{:.2}", translation.x).trim_end_matches('0').trim_end_matches('.').to_string(), + }; + let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); + self.text(width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [Pivot::Middle, Pivot::End]); + } + + if translation.y.abs() > 1e-3 { + self.dashed_line(quad.top_left(), quad.bottom_left(), None, None, Some(2.), Some(2.), Some(0.5)); + + let height = match typed_string { + Some(ref typed_string) => typed_string, + None => &format!("{:.2}", translation.y).trim_end_matches('0').trim_end_matches('.').to_string(), + }; + let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); + let height_pivot = if translation.x > -1e-3 { Pivot::Start } else { Pivot::End }; + self.text(height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, Pivot::Middle]); + } + + if translation.x.abs() > 1e-3 && translation.y.abs() > 1e-3 { + self.line(quad.top_right(), quad.bottom_right(), None, None); + self.line(quad.bottom_left(), quad.bottom_right(), None, None); + } + } +} diff --git a/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs b/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs index 4c659f7540..6e7aea73ae 100644 --- a/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs +++ b/editor/src/messages/portfolio/document/properties_panel/properties_panel_message_handler.rs @@ -14,6 +14,7 @@ pub struct PropertiesPanelMessageContext<'a> { pub document_name: &'a str, pub executor: &'a mut NodeGraphExecutor, pub persistent_data: &'a PersistentData, + pub properties_panel_open: bool, } #[derive(Debug, Clone, Default, ExtractField)] @@ -28,16 +29,22 @@ impl MessageHandler> f document_name, executor, persistent_data, + properties_panel_open, } = context; match message { PropertiesPanelMessage::Clear => { responses.add(LayoutMessage::SendLayout { layout: Layout::WidgetLayout(WidgetLayout::new(vec![])), - layout_target: LayoutTarget::PropertiesSections, + layout_target: LayoutTarget::PropertiesPanel, }); } PropertiesPanelMessage::Refresh => { + if !properties_panel_open { + responses.add(PropertiesPanelMessage::Clear); + return; + } + let mut node_properties_context = NodePropertiesContext { persistent_data, responses, @@ -50,7 +57,7 @@ impl MessageHandler> f node_properties_context.responses.add(LayoutMessage::SendLayout { layout: Layout::WidgetLayout(WidgetLayout::new(properties_sections)), - layout_target: LayoutTarget::PropertiesSections, + layout_target: LayoutTarget::PropertiesPanel, }); } } diff --git a/editor/src/messages/portfolio/document/utility_types/document_metadata.rs b/editor/src/messages/portfolio/document/utility_types/document_metadata.rs index 600d4958f6..acef970228 100644 --- a/editor/src/messages/portfolio/document/utility_types/document_metadata.rs +++ b/editor/src/messages/portfolio/document/utility_types/document_metadata.rs @@ -6,9 +6,10 @@ use crate::messages::tool::common_functionality::graph_modification_utils; use glam::{DAffine2, DVec2}; use graph_craft::document::NodeId; use graphene_std::math::quad::Quad; +use graphene_std::subpath; use graphene_std::transform::Footprint; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; -use graphene_std::vector::{PointId, VectorData}; +use graphene_std::vector::{PointId, Vector}; use std::collections::{HashMap, HashSet}; use std::num::NonZeroU64; @@ -22,11 +23,11 @@ use std::num::NonZeroU64; pub struct DocumentMetadata { pub upstream_footprints: HashMap, pub local_transforms: HashMap, - pub first_instance_source_ids: HashMap>, + pub first_element_source_ids: HashMap>, pub structure: HashMap, pub click_targets: HashMap>, pub clip_targets: HashSet, - pub vector_modify: HashMap, + pub vector_modify: HashMap, /// Transform from document space to viewport space. pub document_to_viewport: DAffine2, } @@ -90,8 +91,8 @@ impl DocumentMetadata { let mut use_local = true; let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, network_interface); - if let Some(path_node) = graph_layer.upstream_node_id_from_name("Path") { - if let Some(&source) = self.first_instance_source_ids.get(&layer.to_node()) { + if let Some(path_node) = graph_layer.upstream_visible_node_id_from_name_in_layer("Path") { + if let Some(&source) = self.first_element_source_ids.get(&layer.to_node()) { if !network_interface .upstream_flow_back_from_nodes(vec![path_node], &[], FlowType::HorizontalFlow) .any(|upstream| Some(upstream) == source) @@ -160,6 +161,17 @@ impl DocumentMetadata { .reduce(Quad::combine_bounds) } + /// Get the loose bounding box of the click target of the specified layer in the specified transform space + pub fn loose_bounding_box_with_transform(&self, layer: LayerNodeIdentifier, transform: DAffine2) -> Option<[DVec2; 2]> { + self.click_targets(layer)? + .iter() + .filter_map(|click_target| match click_target.target_type() { + ClickTargetType::Subpath(subpath) => subpath.loose_bounding_box_with_transform(transform), + ClickTargetType::FreePoint(_) => click_target.bounding_box_with_transform(transform), + }) + .reduce(Quad::combine_bounds) + } + /// Calculate the corners of the bounding box but with a nonzero size. /// /// If the layer bounds are `0` in either axis then they are changed to be `1`. @@ -196,7 +208,7 @@ impl DocumentMetadata { self.all_layers().filter_map(|layer| self.bounding_box_viewport(layer)).reduce(Quad::combine_bounds) } - pub fn layer_outline(&self, layer: LayerNodeIdentifier) -> impl Iterator> { + pub fn layer_outline(&self, layer: LayerNodeIdentifier) -> impl Iterator> { static EMPTY: Vec = Vec::new(); let click_targets = self.click_targets.get(&layer).unwrap_or(&EMPTY); click_targets.iter().filter_map(|target| match target.target_type() { @@ -303,10 +315,10 @@ impl LayerNodeIdentifier { child.ancestors(metadata).any(|ancestor| ancestor == self) } - /// Is the layer last child of parent group? Used for clipping + /// Is the layer the last child of its stack? Used for clipping pub fn can_be_clipped(self, metadata: &DocumentMetadata) -> bool { self.parent(metadata) - .map_or(false, |layer| layer.last_child(metadata).expect("Parent accessed via child should have children") != self) + .is_some_and(|layer| layer.last_child(metadata).expect("Parent accessed via child should have children") != self) } /// Iterator over all direct children (excluding self and recursive children) diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface.rs b/editor/src/messages/portfolio/document/utility_types/network_interface.rs index 290247f621..16e4ed2af7 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface.rs @@ -1,3 +1,5 @@ +mod deserialization; + use super::document_metadata::{DocumentMetadata, LayerNodeIdentifier, NodeRelations}; use super::misc::PTZ; use super::nodes::SelectedNodes; @@ -8,20 +10,25 @@ use crate::messages::portfolio::document::node_graph::utility_types::{Direction, use crate::messages::portfolio::document::utility_types::wires::{GraphWireStyle, WirePath, WirePathUpdate, build_vector_wire}; use crate::messages::tool::common_functionality::graph_modification_utils; use crate::messages::tool::tool_messages::tool_prelude::NumberInputMode; -use bezier_rs::Subpath; +use deserialization::deserialize_node_persistent_metadata; use glam::{DAffine2, DVec2, IVec2}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{DocumentNode, DocumentNodeImplementation, NodeId, NodeInput, NodeNetwork, OldDocumentNodeImplementation, OldNodeNetwork}; use graph_craft::{Type, concrete}; +use graphene_std::Artboard; use graphene_std::math::quad::Quad; +use graphene_std::subpath::Subpath; +use graphene_std::table::Table; use graphene_std::transform::Footprint; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; -use graphene_std::vector::{PointId, VectorData, VectorModificationType}; +use graphene_std::vector::{PointId, Vector, VectorModificationType}; use interpreted_executor::dynamic_executor::ResolvedDocumentNodeTypes; use interpreted_executor::node_registry::NODE_REGISTRY; +use kurbo::BezPath; use serde_json::{Value, json}; use std::collections::{HashMap, HashSet, VecDeque}; use std::hash::{DefaultHasher, Hash, Hasher}; +use std::ops::Deref; /// All network modifications should be done through this API, so the fields cannot be public. However, all fields within this struct can be public since it it not possible to have a public mutable reference. #[derive(Debug, Default, serde::Serialize, serde::Deserialize)] @@ -70,10 +77,8 @@ impl NodeNetworkInterface { fix_network(network); } if let DocumentNodeImplementation::ProtoNode(protonode) = &node.implementation { - if protonode.name.contains("PathModifyNode") { - if node.inputs.len() < 3 { - node.inputs.push(NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath)); - } + if protonode.name.contains("PathModifyNode") && node.inputs.len() < 3 { + node.inputs.push(NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::DocumentNodePath)); } } } @@ -83,15 +88,11 @@ impl NodeNetworkInterface { // Public immutable getters for the network interface impl NodeNetworkInterface { - // TODO: Make private and use .field_name getter methods /// Gets the network of the root document pub fn document_network(&self) -> &NodeNetwork { - self.network - .nested_network(&[]) - .expect("Could not get root document network in NodeNetworkInterface::document_network()") + &self.network } - // TODO: Make private and use .field_name getter methods /// Gets the nested network based on network_path pub fn nested_network(&self, network_path: &[NodeId]) -> Option<&NodeNetwork> { let Some(network) = self.network.nested_network(network_path) else { @@ -111,21 +112,6 @@ impl NodeNetworkInterface { Some(node_metadata) } - pub fn document_network_metadata(&self) -> &NodeNetworkMetadata { - &self.network_metadata - } - - // TODO: Make private and use .field_name getter methods - /// The network metadata should always exist for the current network - pub fn network_metadata(&self, network_path: &[NodeId]) -> Option<&NodeNetworkMetadata> { - let Some(network_metadata) = self.network_metadata.nested_metadata(network_path) else { - log::error!("Could not get nested network_metadata with path {network_path:?}"); - return None; - }; - Some(network_metadata) - } - - // TODO: Make private and use .field_name getter methods pub fn node_metadata(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&DocumentNodeMetadata> { let network_metadata = self.network_metadata(network_path)?; let Some(node_metadata) = network_metadata.persistent_metadata.node_metadata.get(node_id) else { @@ -135,6 +121,19 @@ impl NodeNetworkInterface { Some(node_metadata) } + pub fn document_network_metadata(&self) -> &NodeNetworkMetadata { + &self.network_metadata + } + + /// The network metadata should always exist for the current network + pub fn network_metadata(&self, network_path: &[NodeId]) -> Option<&NodeNetworkMetadata> { + let Some(network_metadata) = self.network_metadata.nested_metadata(network_path) else { + log::error!("Could not get nested network_metadata with path {network_path:?}"); + return None; + }; + Some(network_metadata) + } + pub fn document_metadata(&self) -> &DocumentMetadata { &self.document_metadata } @@ -307,25 +306,17 @@ impl NodeNetworkInterface { false } - fn number_of_imports(&self, network_path: &[NodeId]) -> usize { + pub fn number_of_imports(&self, network_path: &[NodeId]) -> usize { // TODO: Use network.import_types.len() if let Some(encapsulating_node) = self.encapsulating_node(network_path) { encapsulating_node.inputs.len() } else { - // There is one(?) import to the document network, but the imports are not displayed - // I think this is zero now that the scope system has been added - 1 + 0 } } - fn number_of_displayed_imports(&self, network_path: &[NodeId]) -> usize { - // TODO: Use network.import_types.len() - if let Some(encapsulating_node) = self.encapsulating_node(network_path) { - encapsulating_node.inputs.len() - } else { - // There is one(?) import to the document network, but the imports are not displayed - 0 - } + pub fn number_of_exports(&self, network_path: &[NodeId]) -> usize { + if let Some(network) = self.nested_network(network_path) { network.exports.len() } else { 0 } } fn number_of_displayed_inputs(&self, node_id: &NodeId, network_path: &[NodeId]) -> usize { @@ -457,13 +448,9 @@ impl NodeNetworkInterface { /// If the node is not in the hashmap then a default input is found based on the compiled network, using the node_id passed as a parameter pub fn map_ids(&mut self, mut node_template: NodeTemplate, node_id: &NodeId, new_ids: &HashMap, network_path: &[NodeId]) -> NodeTemplate { for (input_index, input) in node_template.document_node.inputs.iter_mut().enumerate() { - if let &mut NodeInput::Node { node_id: id, output_index, lambda } = input { + if let &mut NodeInput::Node { node_id: id, output_index } = input { if let Some(&new_id) = new_ids.get(&id) { - *input = NodeInput::Node { - node_id: new_id, - output_index, - lambda, - }; + *input = NodeInput::Node { node_id: new_id, output_index }; } else { // Disconnect node input if it is not connected to another node in new_ids let tagged_value = TaggedValue::from_type_or_none(&self.input_type(&InputConnector::node(*node_id, input_index), network_path).0); @@ -507,11 +494,11 @@ impl NodeNetworkInterface { InputConnector::Node { node_id, input_index } => (node_id, input_index), InputConnector::Export(export_index) => { let Some((encapsulating_node_id, encapsulating_node_id_path)) = network_path.split_last() else { - // The outermost network export defaults to an ArtboardGroupTable. - return Some((concrete!(graphene_std::ArtboardGroupTable), TypeSource::OuterMostExportDefault)); + // The outermost network export defaults to a Table. + return Some((concrete!(Table), TypeSource::OuterMostExportDefault)); }; - let output_type = self.output_type(encapsulating_node_id, export_index, encapsulating_node_id_path); + let output_type = self.output_type(&OutputConnector::node(*encapsulating_node_id, export_index), encapsulating_node_id_path); return Some(output_type); } }; @@ -544,12 +531,11 @@ impl NodeNetworkInterface { } } DocumentNodeImplementation::ProtoNode(_) => { - // If a node has manual composition, then offset the input index by 1 since the proto node also includes the type of the input passed through manual composition. - let manual_composition_offset = if node.manual_composition.is_some() { 1 } else { 0 }; + // Offset the input index by 1 since the proto node also includes the type of the input passed as a call argument. self.resolved_types .types .get(node_id_path.as_slice()) - .and_then(|node_types| node_types.inputs.get(input_index + manual_composition_offset).cloned()) + .and_then(|node_types| node_types.inputs.get(input_index + 1).cloned()) .map(|node_types| (node_types, TypeSource::Compiled)) } DocumentNodeImplementation::Extract => None, @@ -578,10 +564,10 @@ impl NodeNetworkInterface { return (concrete!(()), TypeSource::Error("could not resolve protonode")); }; - let skip_footprint = if node.manual_composition.is_some() { 1 } else { 0 }; + let skip_footprint = 1; let Some(input_type) = std::iter::once(node_types.call_argument.clone()).chain(node_types.inputs.clone()).nth(input_index + skip_footprint) else { - log::error!("Could not get type"); + log::error!("Could not get type for {node_id_path:?}, input: {input_index}"); return (concrete!(()), TypeSource::Error("could not get the protonode's input")); }; @@ -622,8 +608,6 @@ impl NodeNetworkInterface { return (concrete!(()), TypeSource::Error("input connector is not a node")); }; - // TODO: Once there is type inference (#1621), replace this workaround approach when disconnecting node inputs with NodeInput::Node(ToDefaultNode), - // TODO: which would be a new node that implements the Default trait (i.e. `Default::default()`) self.guess_type_from_node(&mut network_path.to_vec(), node_id, input_connector.input_index()) } @@ -673,7 +657,7 @@ impl NodeNetworkInterface { let valid_implementation = (0..number_of_inputs).filter(|iterator_index| iterator_index != input_index).all(|iterator_index| { let input_type = self.input_type(&InputConnector::node(*node_id, iterator_index), network_path).0; // Value inputs are stored as concrete, so they are compared to the nested type. Node inputs are stored as fn, so they are compared to the entire type. - // For example a node input of (Footprint) -> VectorData would not be compatible with () -> VectorData + // For example a node input of (Footprint) -> Vector would not be compatible with () -> Vector node_io.inputs.get(iterator_index).map(|ty| ty.nested_type().clone()).as_ref() == Some(&input_type) || node_io.inputs.get(iterator_index) == Some(&input_type) }); if valid_implementation { node_io.inputs.get(*input_index).cloned() } else { None } @@ -719,49 +703,60 @@ impl NodeNetworkInterface { /// This function assumes that export indices and node IDs always exist within their respective /// collections. It will panic if these assumptions are violated. /// - pub fn output_type(&self, node_id: &NodeId, output_index: usize, network_path: &[NodeId]) -> (Type, TypeSource) { - let Some(implementation) = self.implementation(node_id, network_path) else { - log::error!("Could not get output type for node {node_id} output index {output_index}. This node is no longer supported, and needs to be upgraded."); - return (concrete!(()), TypeSource::Error("Could not get implementation")); - }; - - // If the node is not a protonode, get types by traversing across exports until a proto node is reached. - match &implementation { - graph_craft::document::DocumentNodeImplementation::Network(internal_network) => { - let Some(export) = internal_network.exports.get(output_index) else { - return (concrete!(()), TypeSource::Error("Could not get export index")); + pub fn output_type(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> (Type, TypeSource) { + match output_connector { + OutputConnector::Node { node_id, output_index } => { + let Some(implementation) = self.implementation(node_id, network_path) else { + log::error!("Could not get output type for node {node_id} output index {output_index}. This node is no longer supported, and needs to be upgraded."); + return (concrete!(()), TypeSource::Error("Could not get implementation")); }; - match export { - NodeInput::Node { - node_id: nested_node_id, - output_index, - .. - } => self.output_type(nested_node_id, *output_index, &[network_path, &[*node_id]].concat()), - NodeInput::Value { tagged_value, .. } => (tagged_value.ty(), TypeSource::TaggedValue), - NodeInput::Network { .. } => { - // let mut encapsulating_path = network_path.to_vec(); - // let encapsulating_node = encapsulating_path.pop().expect("No imports exist in document network"); - // self.input_type(&InputConnector::node(encapsulating_node, *import_index), network_path) - (concrete!(()), TypeSource::Error("Could not type from network")) + + // If the node is not a protonode, get types by traversing across exports until a proto node is reached. + match &implementation { + graph_craft::document::DocumentNodeImplementation::Network(internal_network) => { + let Some(export) = internal_network.exports.get(*output_index) else { + return (concrete!(()), TypeSource::Error("Could not get export index")); + }; + match export { + NodeInput::Node { + node_id: nested_node_id, + output_index, + .. + } => self.output_type(&OutputConnector::node(*nested_node_id, *output_index), &[network_path, &[*node_id]].concat()), + NodeInput::Value { tagged_value, .. } => (tagged_value.ty(), TypeSource::TaggedValue), + NodeInput::Network { .. } => { + // let mut encapsulating_path = network_path.to_vec(); + // let encapsulating_node = encapsulating_path.pop().expect("No imports exist in document network"); + // self.input_type(&InputConnector::node(encapsulating_node, *import_index), network_path) + (concrete!(()), TypeSource::Error("Could not type from network")) + } + NodeInput::Scope(_) => todo!(), + NodeInput::Inline(_) => todo!(), + NodeInput::Reflection(_) => todo!(), + } } - NodeInput::Scope(_) => todo!(), - NodeInput::Inline(_) => todo!(), - NodeInput::Reflection(_) => todo!(), + graph_craft::document::DocumentNodeImplementation::ProtoNode(protonode) => { + let node_id_path = &[network_path, &[*node_id]].concat(); + self.resolved_types + .types + .get(node_id_path) + .map(|ty| (ty.output.clone(), TypeSource::Compiled)) + .or_else(|| { + let node_types = random_protonode_implementation(protonode)?; + Some((node_types.return_value.clone(), TypeSource::RandomProtonodeImplementation)) + }) + .unwrap_or((concrete!(()), TypeSource::Error("Could not get protonode implementation"))) + } + graph_craft::document::DocumentNodeImplementation::Extract => (concrete!(()), TypeSource::Error("extract node")), } } - graph_craft::document::DocumentNodeImplementation::ProtoNode(protonode) => { - let node_id_path = &[network_path, &[*node_id]].concat(); - self.resolved_types - .types - .get(node_id_path) - .map(|ty| (ty.output.clone(), TypeSource::Compiled)) - .or_else(|| { - let node_types = random_protonode_implementation(protonode)?; - Some((node_types.return_value.clone(), TypeSource::RandomProtonodeImplementation)) - }) - .unwrap_or((concrete!(()), TypeSource::Error("Could not get protonode implementation"))) + OutputConnector::Import(import_index) => { + let Some((encapsulating_node, encapsulating_path)) = network_path.split_last() else { + log::error!("Cannot get type of import in document network"); + return (concrete!(()), TypeSource::Error("Cannot get import type in document network")); + }; + self.input_type(&InputConnector::node(*encapsulating_node, *import_index), encapsulating_path) } - graph_craft::document::DocumentNodeImplementation::Extract => (concrete!(()), TypeSource::Error("extract node")), } } @@ -784,111 +779,247 @@ impl NodeNetworkInterface { }) } - pub fn frontend_imports(&mut self, network_path: &[NodeId]) -> Option> { - self.import_export_ports(network_path).cloned().map(|import_export_ports| { - import_export_ports - .output_ports - .iter() - .filter_map(|(import_index, click_target)| { - // Get import name from parent node metadata input, which must match the number of imports. - // Empty string means to use type, or "Import + index" if type can't be determined + pub fn frontend_imports(&mut self, network_path: &[NodeId]) -> Vec> { + match network_path.split_last() { + Some((node_id, encapsulating_network_path)) => { + let Some(node) = self.document_node(node_id, encapsulating_network_path) else { + log::error!("Could not get node {node_id} in network {encapsulating_network_path:?}"); + return Vec::new(); + }; + let mut frontend_imports = (0..node.inputs.len()) + .map(|import_index| self.frontend_output_from_connector(&OutputConnector::Import(import_index), network_path)) + .collect::>(); + if frontend_imports.is_empty() { + frontend_imports.push(None); + } + frontend_imports + } + // In the document network display no imports + None => Vec::new(), + } + } - let mut import_metadata = None; + pub fn frontend_exports(&mut self, network_path: &[NodeId]) -> Vec> { + let Some(network) = self.nested_network(network_path) else { return Vec::new() }; + let mut frontend_exports = ((0..network.exports.len()).map(|export_index| self.frontend_input_from_connector(&InputConnector::Export(export_index), network_path))).collect::>(); + if frontend_exports.is_empty() { + frontend_exports.push(None); + } + frontend_exports + } - if !network_path.is_empty() { - let mut encapsulating_path = network_path.to_vec(); - let encapsulating_node_id = encapsulating_path.pop().unwrap(); + pub fn import_export_position(&mut self, network_path: &[NodeId]) -> Option<(IVec2, IVec2)> { + let Some(all_nodes_bounding_box) = self.all_nodes_bounding_box(network_path).cloned() else { + log::error!("Could not get all nodes bounding box in load_export_ports"); + return None; + }; + let Some(network) = self.nested_network(network_path) else { + log::error!("Could not get current network in load_export_ports"); + return None; + }; - let (input_type, type_source) = self.input_type(&InputConnector::node(encapsulating_node_id, *import_index), &encapsulating_path); - let data_type = FrontendGraphDataType::displayed_type(&input_type, &type_source); + let Some(network_metadata) = self.network_metadata(network_path) else { + log::error!("Could not get nested network_metadata in load_export_ports"); + return None; + }; + let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport; + let target_viewport_top_left = DVec2::new(IMPORTS_TO_LEFT_EDGE_PIXEL_GAP as f64, IMPORTS_TO_TOP_EDGE_PIXEL_GAP as f64); - let (name, description) = self.displayed_input_name_and_description(&encapsulating_node_id, *import_index, &encapsulating_path); + let node_graph_pixel_offset_top_left = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_left); - let connected_to = self - .outward_wires(network_path) - .and_then(|outward_wires| outward_wires.get(&OutputConnector::Import(*import_index))) - .cloned() - .unwrap_or_else(|| { - log::error!("Could not get OutputConnector::Import({import_index}) in outward wires"); - Vec::new() - }); + // A 5x5 grid offset from the top left corner + let node_graph_grid_space_offset_top_left = node_graph_to_viewport.inverse().transform_point2(DVec2::ZERO) + DVec2::new(5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64); - import_metadata = Some(( - FrontendGraphOutput { - data_type, - name, - description, - resolved_type: format!("{:?}", input_type), - connected_to, - }, - click_target, - )); + // The inner bound of the import is the highest/furthest left of the two offsets + let top_left_inner_bound = DVec2::new( + node_graph_pixel_offset_top_left.x.min(node_graph_grid_space_offset_top_left.x), + node_graph_pixel_offset_top_left.y.min(node_graph_grid_space_offset_top_left.y), + ); + + let offset_from_top_left = if network + .exports + .first() + .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) + { + DVec2::new(-4. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) + } else { + DVec2::new(-4. * GRID_SIZE as f64, 0.) + }; + + let bounding_box_top_left = DVec2::new((all_nodes_bounding_box[0].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_left; + let import_top_left = DVec2::new(top_left_inner_bound.x.min(bounding_box_top_left.x), top_left_inner_bound.y.min(bounding_box_top_left.y)); + let rounded_import_top_left = DVec2::new((import_top_left.x / 24.).round() * 24., (import_top_left.y / 24.).round() * 24.); + + let viewport_top_right = network_metadata.persistent_metadata.navigation_metadata.node_graph_top_right; + let target_viewport_top_right = DVec2::new( + viewport_top_right.x - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64, + viewport_top_right.y + EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64, + ); + + // An offset from the right edge in viewport pixels + let node_graph_pixel_offset_top_right = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_right); + + // A 5x5 grid offset from the right corner + let node_graph_grid_space_offset_top_right = node_graph_to_viewport.inverse().transform_point2(viewport_top_right) + DVec2::new(-5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64); + + // The inner bound of the export is the highest/furthest right of the two offsets + let top_right_inner_bound = DVec2::new( + node_graph_pixel_offset_top_right.x.max(node_graph_grid_space_offset_top_right.x), + node_graph_pixel_offset_top_right.y.min(node_graph_grid_space_offset_top_right.y), + ); + + let offset_from_top_right = if network + .exports + .first() + .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) + { + DVec2::new(2. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) + } else { + DVec2::new(4. * GRID_SIZE as f64, 0.) + }; + + let mut bounding_box_top_right = DVec2::new((all_nodes_bounding_box[1].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.); + bounding_box_top_right += offset_from_top_right; + let export_top_right = DVec2::new(top_right_inner_bound.x.max(bounding_box_top_right.x), top_right_inner_bound.y.min(bounding_box_top_right.y)); + let rounded_export_top_right = DVec2::new((export_top_right.x / 24.).round() * 24., (export_top_right.y / 24.).round() * 24.); + + Some((rounded_import_top_left.as_ivec2(), rounded_export_top_right.as_ivec2())) + } + + /// Returns None if there is an error, it is a hidden primary export, or a hidden input + pub fn frontend_input_from_connector(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { + // Return None if it is a hidden input + if self.input_from_connector(input_connector, network_path).is_some_and(|input| !input.is_exposed()) { + return None; + } + let (export_type, source) = self.input_type(input_connector, network_path); + let data_type = FrontendGraphDataType::displayed_type(&export_type, &source); + let connected_to = self + .upstream_output_connector(input_connector, network_path) + .map(|output_connector| match output_connector { + OutputConnector::Node { node_id, output_index } => { + let mut name = self.display_name(&node_id, network_path); + if cfg!(debug_assertions) { + name.push_str(&format!(" (id: {node_id})")); } - import_metadata - }) - .filter_map(|(import_index, output_port)| output_port.bounding_box().map(|bounding_box| (import_index, bounding_box[0].x as i32, bounding_box[0].y as i32))) - .collect::>() - }) - } - - pub fn frontend_exports(&mut self, network_path: &[NodeId]) -> Option> { - self.import_export_ports(network_path).cloned().map(|import_export_ports| { - import_export_ports - .input_ports - .iter() - .map(|(export_index, click_target)| { - let export_type = self.input_type(&InputConnector::Export(*export_index), network_path); - let data_type = FrontendGraphDataType::displayed_type(&export_type.0, &TypeSource::TaggedValue); - - let connected_to = self.upstream_output_connector(&InputConnector::Export(*export_index), network_path); - - // Get export name from parent node metadata input, which must match the number of exports. - // Empty string means to use type, or "Export + index" if type is empty determined - let export_name = if network_path.is_empty() { - "Canvas".to_string() - } else { - self.encapsulating_node_metadata(network_path) - .and_then(|encapsulating_metadata| encapsulating_metadata.persistent_metadata.output_names.get(*export_index).cloned()) - .unwrap_or_default() - }; - - let export_name = if !export_name.is_empty() { - export_name - } else if *export_type.0.nested_type() != concrete!(()) { - export_type.0.nested_type().to_string() - } else { - format!("Export {}", *export_index + 1) - }; - - ( - FrontendGraphInput { - data_type, - name: export_name, - description: String::new(), - resolved_type: format!("{:?}", export_type.0), - valid_types: self.valid_input_types(&InputConnector::Export(*export_index), network_path).iter().map(|ty| ty.to_string()).collect(), - connected_to, - }, - click_target, - ) - }) - .filter_map(|(export_metadata, output_port)| output_port.bounding_box().map(|bounding_box| (export_metadata, bounding_box[0].x as i32, bounding_box[0].y as i32))) - .collect::>() - }) - } - - pub fn frontend_import_export_modify(&mut self, get_ports: F, network_path: &[NodeId]) -> Vec<(i32, i32)> - where - F: FnOnce(&ModifyImportExportClickTarget) -> Vec<&(usize, ClickTarget)>, - { - self.modify_import_export(network_path) - .map(|modify_import_export_click_target| { - get_ports(modify_import_export_click_target) - .iter() - .filter_map(|(_, click_target)| click_target.bounding_box().map(|bounding_box| (bounding_box[0].x as i32, bounding_box[0].y as i32))) - .collect() + format!("{name} output {output_index}") + } + OutputConnector::Import(import_index) => format!("Import index {import_index}"), }) - .unwrap_or_default() + .unwrap_or("nothing".to_string()); + + let (name, description) = match input_connector { + InputConnector::Node { node_id, input_index } => self.displayed_input_name_and_description(node_id, *input_index, network_path), + InputConnector::Export(export_index) => { + // Get export name from parent node metadata input, which must match the number of exports. + // Empty string means to use type, or "Export + index" if type is empty determined + let export_name = if network_path.is_empty() { + "Canvas".to_string() + } else { + self.encapsulating_node_metadata(network_path) + .and_then(|encapsulating_metadata| encapsulating_metadata.persistent_metadata.output_names.get(*export_index).cloned()) + .unwrap_or_default() + }; + + let export_name = if !export_name.is_empty() { + export_name + } else if *export_type.nested_type() != concrete!(()) { + export_type.nested_type().to_string() + } else { + format!("Export index {}", export_index) + }; + + (export_name, String::new()) + } + }; + Some(FrontendGraphInput { + data_type, + name, + description, + resolved_type: format!("{export_type:?}"), + valid_types: self.valid_input_types(input_connector, network_path).iter().map(|ty| ty.to_string()).collect(), + connected_to, + }) + } + + /// Returns None if there is an error, it is the document network, a hidden primary output or import + pub fn frontend_output_from_connector(&mut self, output_connector: &OutputConnector, network_path: &[NodeId]) -> Option { + let (output_type, type_source) = self.output_type(output_connector, network_path); + let (name, description) = match output_connector { + OutputConnector::Node { node_id, output_index } => { + // Do not display the primary output port for a node if it is a network node with a hidden primary export + if *output_index == 0 && self.hidden_primary_output(node_id, network_path) { + return None; + }; + // Get the output name from the interior network export name + let node_metadata = self.node_metadata(node_id, network_path)?; + let output_name = node_metadata.persistent_metadata.output_names.get(*output_index).cloned().unwrap_or_default(); + + let output_name = if !output_name.is_empty() { + output_name + } else if *output_type.nested_type() != concrete!(()) { + output_type.nested_type().to_string() + } else { + format!("Output {}", *output_index + 1) + }; + + (output_name, String::new()) + } + OutputConnector::Import(import_index) => { + // Get the import name from the encapsulating node input metadata + let Some((encapsulating_node_id, encapsulating_path)) = network_path.split_last() else { + // Return None if it is an import in the document network + return None; + }; + // Return None if the primary input is hidden and this is the primary import + if *import_index == 0 && self.hidden_primary_import(network_path) { + return None; + }; + let (import_name, description) = self.displayed_input_name_and_description(encapsulating_node_id, *import_index, encapsulating_path); + + let import_name = if *output_type.nested_type() != concrete!(()) { + import_name + } else { + format!("Import index {}", *import_index) + }; + (import_name, description) + } + }; + + let data_type = FrontendGraphDataType::displayed_type(&output_type, &type_source); + + let mut connected_to = self + .outward_wires(network_path) + .and_then(|outward_wires| outward_wires.get(output_connector)) + .cloned() + .unwrap_or_else(|| { + log::error!("Could not get {output_connector:?} in outward wires"); + Vec::new() + }) + .iter() + .map(|input| match input { + InputConnector::Node { node_id, input_index } => { + let mut name = self.display_name(node_id, network_path); + if cfg!(debug_assertions) { + name.push_str(&format!(" (id: {node_id})")); + } + format!("{name} input {input_index}") + } + InputConnector::Export(export_index) => format!("Export index {export_index}"), + }) + .collect::>(); + + if connected_to.is_empty() { + connected_to.push("nothing".to_string()); + } + + Some(FrontendGraphOutput { + data_type, + name, + resolved_type: format!("{:?}", output_type), + description, + connected_to, + }) } pub fn height_from_click_target(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> Option { @@ -1066,7 +1197,7 @@ impl NodeNetworkInterface { pub fn reference(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&Option> { let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get reference for node: {:?}", node_id); + log::error!("Could not get reference for node: {node_id:?}"); return None; }; Some(&node_metadata.persistent_metadata.reference) @@ -1186,12 +1317,46 @@ impl NodeNetworkInterface { node_metadata.persistent_metadata.is_layer() } - pub fn has_primary_output(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { - let Some(node_metadata) = self.node_metadata(node_id, network_path) else { - log::error!("Could not get node_metadata in has_primary_output"); + pub fn primary_output_connected_to_layer(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + let Some(outward_wires) = self.outward_wires(network_path) else { + log::error!("Could not get outward_wires in primary_output_connected_to_layer"); return false; }; - node_metadata.persistent_metadata.has_primary_output + let Some(downstream_connectors) = outward_wires.get(&OutputConnector::node(*node_id, 0)) else { + log::error!("Could not get downstream_connectors in primary_output_connected_to_layer"); + return false; + }; + let downstream_nodes = downstream_connectors.iter().filter_map(|connector| connector.node_id()).collect::>(); + downstream_nodes.iter().any(|node_id| self.is_layer(node_id, network_path)) + } + + pub fn primary_input_connected_to_layer(&mut self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + self.input_from_connector(&InputConnector::node(*node_id, 0), network_path) + .and_then(|input| input.as_node()) + .is_some_and(|node_id| self.is_layer(&node_id, network_path)) + } + + pub fn hidden_primary_export(&self, network_path: &[NodeId]) -> bool { + let Some((node_id, network_path)) = network_path.split_last() else { + // The document network does not have a hidden primary export + return false; + }; + self.hidden_primary_output(node_id, network_path) + } + + pub fn hidden_primary_output(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { + match self.implementation(node_id, network_path) { + Some(DocumentNodeImplementation::Network(network)) => network.exports.first().is_none_or(|input| !input.is_exposed()), + _ => false, + } + } + + pub fn hidden_primary_import(&self, network_path: &[NodeId]) -> bool { + let Some((encapsulating_node_id, encapsulating_path)) = network_path.split_last() else { + return false; + }; + self.input_from_connector(&InputConnector::node(*encapsulating_node_id, 0), encapsulating_path) + .is_some_and(|input| !input.is_exposed()) } pub fn is_absolute(&self, node_id: &NodeId, network_path: &[NodeId]) -> bool { @@ -1284,7 +1449,7 @@ impl NodeNetworkInterface { let artboard = self.document_node(&artboard_node_identifier.to_node(), &[]); let clip_input = artboard.unwrap().inputs.get(5).unwrap(); if let NodeInput::Value { tagged_value, .. } = clip_input { - if tagged_value.to_primitive_string() == "true" { + if tagged_value.clone().deref() == &TaggedValue::Bool(true) { return Some(Quad::clip( self.document_metadata.bounding_box_document(layer).unwrap_or_default(), self.document_metadata.bounding_box_document(artboard_node_identifier).unwrap_or_default(), @@ -1424,13 +1589,13 @@ impl NodeNetworkInterface { .any(|id| id == potentially_upstream_node) } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] fn text_width(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { warn!("Failed to find width of {node_id:#?} in network_path {network_path:?} due to non-wasm arch"); Some(0.) } - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] fn text_width(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option { let document = web_sys::window().unwrap().document().unwrap(); let div = match document.create_element("div") { @@ -1496,13 +1661,12 @@ impl NodeNetworkInterface { let mut node_metadata = DocumentNodeMetadata::default(); node.inputs = old_node.inputs; - node.manual_composition = old_node.manual_composition; + node.call_argument = old_node.manual_composition.unwrap(); node.visible = old_node.visible; node.skip_deduplication = old_node.skip_deduplication; node.original_location = old_node.original_location; node_metadata.persistent_metadata.display_name = old_node.alias; node_metadata.persistent_metadata.reference = if old_node.name.is_empty() { None } else { Some(old_node.name) }; - node_metadata.persistent_metadata.has_primary_output = old_node.has_primary_output; node_metadata.persistent_metadata.locked = old_node.locked; node_metadata.persistent_metadata.node_type_metadata = if old_node.is_layer { NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { @@ -1928,70 +2092,25 @@ impl NodeNetworkInterface { } pub fn load_import_export_ports(&mut self, network_path: &[NodeId]) { - //let point = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport.inverse().transform_point2(); - let Some(all_nodes_bounding_box) = self.all_nodes_bounding_box(network_path).cloned() else { - log::error!("Could not get all nodes bounding box in load_export_ports"); + let Some(import_export_position) = self.import_export_position(network_path) else { + log::error!("Could not get import_export_position"); return; }; - let Some(rounded_network_edge_distance) = self.rounded_network_edge_distance(network_path).cloned() else { - log::error!("Could not get rounded_network_edge_distance in load_export_ports"); - return; - }; - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in load_export_ports"); - return; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get current network in load_export_ports"); - return; - }; - + let Some(network) = self.nested_network(network_path) else { return }; let mut import_export_ports = Ports::new(); - let viewport_top_right = network_metadata - .persistent_metadata - .navigation_metadata - .node_graph_to_viewport - .inverse() - .transform_point2(rounded_network_edge_distance.exports_to_edge_distance); - let offset_from_top_right = if network - .exports - .first() - .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) - { - DVec2::new(2. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) - } else { - DVec2::new(4. * GRID_SIZE as f64, 0.) - }; - - let bounding_box_top_right = DVec2::new((all_nodes_bounding_box[1].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_right; - let export_top_right = DVec2::new(viewport_top_right.x.max(bounding_box_top_right.x), viewport_top_right.y.min(bounding_box_top_right.y)); - for input_index in 0..network.exports.len() { - import_export_ports.insert_input_port_at_center(input_index, export_top_right + DVec2::new(0., input_index as f64 * 24.)); + if !network_path.is_empty() { + let import_start_index = if self.hidden_primary_import(network_path) { 1 } else { 0 }; + for import_index in import_start_index..self.number_of_imports(network_path) { + import_export_ports.insert_output_port_at_center(import_index, import_export_position.0.as_dvec2() + DVec2::new(0., import_index as f64 * 24.)); + } } - let viewport_top_left = network_metadata - .persistent_metadata - .navigation_metadata - .node_graph_to_viewport - .inverse() - .transform_point2(rounded_network_edge_distance.imports_to_edge_distance); - - let offset_from_top_left = if network - .exports - .first() - .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) - { - DVec2::new(-4. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) - } else { - DVec2::new(-4. * GRID_SIZE as f64, 0.) - }; - - let bounding_box_top_left = DVec2::new((all_nodes_bounding_box[0].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_left; - let import_top_left = DVec2::new(viewport_top_left.x.min(bounding_box_top_left.x), viewport_top_left.y.min(bounding_box_top_left.y)); - for output_index in 0..self.number_of_displayed_imports(network_path) { - import_export_ports.insert_output_port_at_center(output_index, import_top_left + DVec2::new(0., output_index as f64 * 24.)); + let export_start_index = if self.hidden_primary_export(network_path) { 1 } else { 0 }; + for export_index in export_start_index..network.exports.len() { + import_export_ports.insert_input_port_at_center(export_index, import_export_position.1.as_dvec2() + DVec2::new(0., export_index as f64 * 24.)); } + let Some(network_metadata) = self.network_metadata_mut(network_path) else { log::error!("Could not get current network in load_export_ports"); return; @@ -2052,79 +2171,10 @@ impl NodeNetworkInterface { } pub fn load_modify_import_export(&mut self, network_path: &[NodeId]) { - let Some(all_nodes_bounding_box) = self.all_nodes_bounding_box(network_path).cloned() else { - log::error!("Could not get all nodes bounding box in load_export_ports"); - return; - }; - let Some(rounded_network_edge_distance) = self.rounded_network_edge_distance(network_path).cloned() else { - log::error!("Could not get rounded_network_edge_distance in load_export_ports"); - return; - }; - let Some(network_metadata) = self.network_metadata(network_path) else { - log::error!("Could not get nested network_metadata in load_export_ports"); - return; - }; - let Some(network) = self.nested_network(network_path) else { - log::error!("Could not get current network in load_export_ports"); - return; - }; - let mut reorder_imports_exports = Ports::new(); - let mut add_import_export = Ports::new(); let mut remove_imports_exports = Ports::new(); if !network_path.is_empty() { - let viewport_top_right = network_metadata - .persistent_metadata - .navigation_metadata - .node_graph_to_viewport - .inverse() - .transform_point2(rounded_network_edge_distance.exports_to_edge_distance); - let offset_from_top_right = if network - .exports - .first() - .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) - { - DVec2::new(2. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) - } else { - DVec2::new(4. * GRID_SIZE as f64, 0.) - }; - - let bounding_box_top_right = DVec2::new((all_nodes_bounding_box[1].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_right; - let export_top_right: DVec2 = DVec2::new(viewport_top_right.x.max(bounding_box_top_right.x), viewport_top_right.y.min(bounding_box_top_right.y)); - let add_export_center = export_top_right + DVec2::new(0., network.exports.len() as f64 * 24.); - let add_export = ClickTarget::new_with_subpath( - Subpath::new_rounded_rect(add_export_center - DVec2::new(12., 12.), add_export_center + DVec2::new(12., 12.), [3.; 4]), - 0., - ); - add_import_export.insert_custom_input_port(0, add_export); - - let viewport_top_left = network_metadata - .persistent_metadata - .navigation_metadata - .node_graph_to_viewport - .inverse() - .transform_point2(rounded_network_edge_distance.imports_to_edge_distance); - - let offset_from_top_left = if network - .exports - .first() - .is_some_and(|export| export.as_node().is_some_and(|export_node| self.is_layer(&export_node, network_path))) - { - DVec2::new(-4. * GRID_SIZE as f64, -2. * GRID_SIZE as f64) - } else { - DVec2::new(-4. * GRID_SIZE as f64, 0.) - }; - - let bounding_box_top_left = DVec2::new((all_nodes_bounding_box[0].x / 24. + 0.5).floor() * 24., (all_nodes_bounding_box[0].y / 24. + 0.5).floor() * 24.) + offset_from_top_left; - let import_top_left = DVec2::new(viewport_top_left.x.min(bounding_box_top_left.x), viewport_top_left.y.min(bounding_box_top_left.y)); - let add_import_center = import_top_left + DVec2::new(0., self.number_of_displayed_imports(network_path) as f64 * 24.); - let add_import = ClickTarget::new_with_subpath( - Subpath::new_rounded_rect(add_import_center - DVec2::new(12., 12.), add_import_center + DVec2::new(12., 12.), [3.; 4]), - 0., - ); - add_import_export.insert_custom_output_port(0, add_import); - let Some(import_exports) = self.import_export_ports(network_path) else { log::error!("Could not get import_export_ports in load_modify_import_export"); return; @@ -2136,13 +2186,18 @@ impl NodeNetworkInterface { continue; }; let reorder_import_center = (import_bounding_box[0] + import_bounding_box[1]) / 2. + DVec2::new(-12., 0.); - let remove_import_center = reorder_import_center + DVec2::new(-12., 0.); - let reorder_import = ClickTarget::new_with_subpath(Subpath::new_rect(reorder_import_center - DVec2::new(3., 4.), reorder_import_center + DVec2::new(3., 4.)), 0.); - let remove_import = ClickTarget::new_with_subpath(Subpath::new_rect(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); - - reorder_imports_exports.insert_custom_output_port(*import_index, reorder_import); - remove_imports_exports.insert_custom_output_port(*import_index, remove_import); + if *import_index == 0 { + let remove_import_center = reorder_import_center + DVec2::new(-4., 0.); + let remove_import = ClickTarget::new_with_subpath(Subpath::new_rect(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); + remove_imports_exports.insert_custom_output_port(*import_index, remove_import); + } else { + let remove_import_center = reorder_import_center + DVec2::new(-12., 0.); + let reorder_import = ClickTarget::new_with_subpath(Subpath::new_rect(reorder_import_center - DVec2::new(3., 4.), reorder_import_center + DVec2::new(3., 4.)), 0.); + let remove_import = ClickTarget::new_with_subpath(Subpath::new_rect(remove_import_center - DVec2::new(8., 8.), remove_import_center + DVec2::new(8., 8.)), 0.); + reorder_imports_exports.insert_custom_output_port(*import_index, reorder_import); + remove_imports_exports.insert_custom_output_port(*import_index, remove_import); + } } for (export_index, export_click_target) in import_exports.input_ports() { @@ -2151,13 +2206,18 @@ impl NodeNetworkInterface { continue; }; let reorder_export_center = (export_bounding_box[0] + export_bounding_box[1]) / 2. + DVec2::new(12., 0.); - let remove_export_center = reorder_export_center + DVec2::new(12., 0.); - let reorder_export = ClickTarget::new_with_subpath(Subpath::new_rect(reorder_export_center - DVec2::new(3., 4.), reorder_export_center + DVec2::new(3., 4.)), 0.); - let remove_export = ClickTarget::new_with_subpath(Subpath::new_rect(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); - - reorder_imports_exports.insert_custom_input_port(*export_index, reorder_export); - remove_imports_exports.insert_custom_input_port(*export_index, remove_export); + if *export_index == 0 { + let remove_export_center = reorder_export_center + DVec2::new(4., 0.); + let remove_export = ClickTarget::new_with_subpath(Subpath::new_rect(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); + remove_imports_exports.insert_custom_input_port(*export_index, remove_export); + } else { + let remove_export_center = reorder_export_center + DVec2::new(12., 0.); + let reorder_export = ClickTarget::new_with_subpath(Subpath::new_rect(reorder_export_center - DVec2::new(3., 4.), reorder_export_center + DVec2::new(3., 4.)), 0.); + let remove_export = ClickTarget::new_with_subpath(Subpath::new_rect(remove_export_center - DVec2::new(8., 8.), remove_export_center + DVec2::new(8., 8.)), 0.); + reorder_imports_exports.insert_custom_input_port(*export_index, reorder_export); + remove_imports_exports.insert_custom_input_port(*export_index, remove_export); + } } } @@ -2167,7 +2227,6 @@ impl NodeNetworkInterface { }; network_metadata.transient_metadata.modify_import_export = TransientMetadata::Loaded(ModifyImportExportClickTarget { - add_import_export, remove_imports_exports, reorder_imports_exports, }); @@ -2519,7 +2578,7 @@ impl NodeNetworkInterface { InputConnector::Node { node_id, input_index } => { let input_metadata = self.transient_input_metadata(node_id, *input_index, network_path)?; let TransientMetadata::Loaded(wire) = &input_metadata.wire else { - log::error!("Could not load wire for input: {:?}", input); + log::error!("Could not load wire for input: {input:?}"); return None; }; wire.clone() @@ -2527,7 +2586,7 @@ impl NodeNetworkInterface { InputConnector::Export(export_index) => { let network_metadata = self.network_metadata(network_path)?; let Some(TransientMetadata::Loaded(wire)) = network_metadata.transient_metadata.wires.get(*export_index) else { - log::error!("Could not load wire for input: {:?}", input); + log::error!("Could not load wire for input: {input:?}"); return None; }; wire.clone() @@ -2566,6 +2625,7 @@ impl NodeNetworkInterface { Previewing::No => false, }; let Some(wire) = self.wire_path_from_input(input, graph_wire_style, dashed, network_path) else { + log::error!("Could not load wire path from input"); return; }; match input { @@ -2632,7 +2692,7 @@ impl NodeNetworkInterface { InputConnector::Node { node_id, input_index } => (*node_id, *input_index), InputConnector::Export(export_index) => (NodeId(u64::MAX), *export_index), }) - .chain(std::iter::once((NodeId(u64::MAX), usize::MAX))) + .chain(std::iter::once((NodeId(u64::MAX), u32::MAX as usize))) .collect() } @@ -2698,12 +2758,12 @@ impl NodeNetworkInterface { return None; } let Some(input_position) = self.get_input_center(&input, network_path) else { - log::error!("Could not get dom rect for wire end in root node: {:?}", input); + log::error!("Could not get input position for wire end in root node: {input:?}"); return None; }; let upstream_output = OutputConnector::node(root_node.node_id, root_node.output_index); let Some(output_position) = self.get_output_center(&upstream_output, network_path) else { - log::error!("Could not get dom rect for wire start in root node: {:?}", upstream_output); + log::error!("Could not get output position for wire start in root node: {upstream_output:?}"); return None; }; let vertical_end = input.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path) && input.input_index() == 0); @@ -2711,8 +2771,7 @@ impl NodeNetworkInterface { let thick = vertical_end && vertical_start; let vector_wire = build_vector_wire(output_position, input_position, vertical_start, vertical_end, graph_wire_style); - let mut path_string = String::new(); - let _ = vector_wire.subpath_to_svg(&mut path_string, DAffine2::IDENTITY); + let path_string = vector_wire.to_svg(); let data_type = FrontendGraphDataType::from_type(&self.input_type(&input, network_path).0); let wire_path_update = Some(WirePath { path_string, @@ -2723,23 +2782,23 @@ impl NodeNetworkInterface { Some(WirePathUpdate { id: NodeId(u64::MAX), - input_index: usize::MAX, + input_index: u32::MAX as usize, wire_path_update, }) } /// Returns the vector subpath and a boolean of whether the wire should be thick. - pub fn vector_wire_from_input(&mut self, input: &InputConnector, wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option<(Subpath, bool)> { + pub fn vector_wire_from_input(&mut self, input: &InputConnector, wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option<(BezPath, bool)> { let Some(input_position) = self.get_input_center(input, network_path) else { - log::error!("Could not get dom rect for wire end: {:?}", input); + log::error!("Could not get dom rect for wire end: {input:?}"); return None; }; // An upstream output could not be found, so the wire does not exist, but it should still be loaded as as empty vector let Some(upstream_output) = self.upstream_output_connector(input, network_path) else { - return Some((Subpath::from_anchors(std::iter::empty(), false), false)); + return Some((BezPath::new(), false)); }; let Some(output_position) = self.get_output_center(&upstream_output, network_path) else { - log::error!("Could not get dom rect for wire start: {:?}", upstream_output); + log::error!("Could not get output port for wire start: {:?}", upstream_output); return None; }; let vertical_end = input.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path) && input.input_index() == 0); @@ -2750,8 +2809,7 @@ impl NodeNetworkInterface { pub fn wire_path_from_input(&mut self, input: &InputConnector, graph_wire_style: GraphWireStyle, dashed: bool, network_path: &[NodeId]) -> Option { let (vector_wire, thick) = self.vector_wire_from_input(input, graph_wire_style, network_path)?; - let mut path_string = String::new(); - let _ = vector_wire.subpath_to_svg(&mut path_string, DAffine2::IDENTITY); + let path_string = vector_wire.to_svg(); let data_type = FrontendGraphDataType::from_type(&self.input_type(input, network_path).0); Some(WirePath { path_string, @@ -2818,20 +2876,19 @@ impl NodeNetworkInterface { DocumentNodeImplementation::Network(network) => network.exports.len(), _ => 1, }; - // If the node does not have a primary output, shift all ports down a row - let mut output_row_count = if !node_metadata.persistent_metadata.has_primary_output { 1 } else { 0 }; - for output_index in 0..number_of_outputs { - port_click_targets.insert_node_output(output_index, output_row_count, node_top_left); - output_row_count += 1; + // If the node has a hidden primary output, do not display the first output + let start_index = if self.hidden_primary_output(node_id, network_path) { 1 } else { 0 }; + for output_index in start_index..number_of_outputs { + port_click_targets.insert_node_output(output_index, node_top_left); } - let height = input_row_count.max(output_row_count).max(1) as u32 * crate::consts::GRID_SIZE; + let height = input_row_count.max(number_of_outputs).max(1) as u32 * crate::consts::GRID_SIZE; let width = 5 * crate::consts::GRID_SIZE; let node_click_target_top_left = node_top_left + DVec2::new(0., 12.); let node_click_target_bottom_right = node_click_target_top_left + DVec2::new(width as f64, height as f64); let radius = 3.; - let subpath = bezier_rs::Subpath::new_rounded_rect(node_click_target_top_left, node_click_target_bottom_right, [radius; 4]); + let subpath = Subpath::new_rounded_rect(node_click_target_top_left, node_click_target_bottom_right, [radius; 4]); let node_click_target = ClickTarget::new_with_subpath(subpath, 0.); DocumentNodeClickTargets { @@ -2870,7 +2927,7 @@ impl NodeNetworkInterface { let node_bottom_right = node_top_left + DVec2::new(width as f64, height as f64); let chain_top_left = node_top_left - DVec2::new((chain_width_grid_spaces * crate::consts::GRID_SIZE) as f64, 0.); let radius = 10.; - let subpath = bezier_rs::Subpath::new_rounded_rect(chain_top_left, node_bottom_right, [radius; 4]); + let subpath = Subpath::new_rounded_rect(chain_top_left, node_bottom_right, [radius; 4]); let node_click_target = ClickTarget::new_with_subpath(subpath, 0.); DocumentNodeClickTargets { @@ -3047,7 +3104,7 @@ impl NodeNetworkInterface { pub fn collect_frontend_click_targets(&mut self, network_path: &[NodeId]) -> FrontendClickTargets { let mut all_node_click_targets = Vec::new(); - let mut port_click_targets = Vec::new(); + let mut connector_click_targets = Vec::new(); let mut icon_click_targets = Vec::new(); let Some(network_metadata) = self.network_metadata(network_path) else { log::error!("Could not get nested network_metadata in collect_frontend_click_targets"); @@ -3058,27 +3115,21 @@ impl NodeNetworkInterface { let mut node_path = String::new(); if let ClickTargetType::Subpath(subpath) = node_click_targets.node_click_target.target_type() { - let _ = subpath.subpath_to_svg(&mut node_path, DAffine2::IDENTITY); + node_path.push_str(subpath.to_bezpath().to_svg().as_str()) } all_node_click_targets.push((node_id, node_path)); for port in node_click_targets.port_click_targets.click_targets().chain(import_export_click_targets.click_targets()) { if let ClickTargetType::Subpath(subpath) = port.target_type() { - let mut port_path = String::new(); - let _ = subpath.subpath_to_svg(&mut port_path, DAffine2::IDENTITY); - port_click_targets.push(port_path); + connector_click_targets.push(subpath.to_bezpath().to_svg()); } } if let NodeTypeClickTargets::Layer(layer_metadata) = &node_click_targets.node_type_metadata { if let ClickTargetType::Subpath(subpath) = layer_metadata.visibility_click_target.target_type() { - let mut port_path = String::new(); - let _ = subpath.subpath_to_svg(&mut port_path, DAffine2::IDENTITY); - icon_click_targets.push(port_path); + icon_click_targets.push(subpath.to_bezpath().to_svg()); } if let ClickTargetType::Subpath(subpath) = layer_metadata.grip_click_target.target_type() { - let mut port_path = String::new(); - let _ = subpath.subpath_to_svg(&mut port_path, DAffine2::IDENTITY); - icon_click_targets.push(port_path); + icon_click_targets.push(subpath.to_bezpath().to_svg()); } } } @@ -3094,9 +3145,8 @@ impl NodeNetworkInterface { }); let bounds = self.all_nodes_bounding_box(network_path).cloned().unwrap_or([DVec2::ZERO, DVec2::ZERO]); - let rect = bezier_rs::Subpath::::new_rect(bounds[0], bounds[1]); - let mut all_nodes_bounding_box = String::new(); - let _ = rect.subpath_to_svg(&mut all_nodes_bounding_box, DAffine2::IDENTITY); + let rect = Subpath::::new_rect(bounds[0], bounds[1]); + let all_nodes_bounding_box = rect.to_bezpath().to_svg(); let Some(rounded_network_edge_distance) = self.rounded_network_edge_distance(network_path).cloned() else { log::error!("Could not get rounded_network_edge_distance in collect_frontend_click_targets"); @@ -3122,29 +3172,25 @@ impl NodeNetworkInterface { .inverse() .transform_point2(import_exports_viewport_bottom_right); - let import_exports_target = bezier_rs::Subpath::::new_rect(node_graph_top_left, node_graph_bottom_right); - let mut import_exports_bounding_box = String::new(); - let _ = import_exports_target.subpath_to_svg(&mut import_exports_bounding_box, DAffine2::IDENTITY); + let import_exports_target = Subpath::::new_rect(node_graph_top_left, node_graph_bottom_right); + let import_exports_bounding_box = import_exports_target.to_bezpath().to_svg(); let mut modify_import_export = Vec::new(); if let Some(modify_import_export_click_targets) = self.modify_import_export(network_path) { for click_target in modify_import_export_click_targets - .add_import_export + .remove_imports_exports .click_targets() - .chain(modify_import_export_click_targets.remove_imports_exports.click_targets()) .chain(modify_import_export_click_targets.reorder_imports_exports.click_targets()) { if let ClickTargetType::Subpath(subpath) = click_target.target_type() { - let mut remove_string = String::new(); - let _ = subpath.subpath_to_svg(&mut remove_string, DAffine2::IDENTITY); - modify_import_export.push(remove_string); + modify_import_export.push(subpath.to_bezpath().to_svg()); } } } FrontendClickTargets { node_click_targets, layer_click_targets, - port_click_targets, + connector_click_targets, icon_click_targets, all_nodes_bounding_box, import_exports_bounding_box, @@ -3165,11 +3211,7 @@ impl NodeNetworkInterface { let parameters_hidden = node.inputs.iter().skip(2).all(|input| !input.is_exposed()); let output_count = self.number_of_outputs(node_id, network_path); - self.node_metadata(node_id, network_path) - .is_some_and(|node_metadata| node_metadata.persistent_metadata.has_primary_output) - && output_count == 1 - && (input_count <= 2) - && parameters_hidden + !self.hidden_primary_output(node_id, network_path) && output_count == 1 && (input_count <= 2) && parameters_hidden } pub fn node_graph_ptz(&self, network_path: &[NodeId]) -> Option<&PTZ> { @@ -3318,21 +3360,9 @@ impl NodeNetworkInterface { pub fn input_position(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) -> Option { match input_connector { - InputConnector::Node { node_id, input_index } => { - // Get the displayed index from the input index - let Some(node) = self.document_node(node_id, network_path) else { - log::error!("Could not get node in input_position"); - return None; - }; - let mut displayed_index = 0; - for i in 0..*input_index { - if node.inputs[i].is_exposed() { - displayed_index += 1; - } - } - self.node_click_targets(node_id, network_path) - .and_then(|transient_node_metadata| transient_node_metadata.port_click_targets.input_port_position(displayed_index)) - } + InputConnector::Node { node_id, input_index } => self + .node_click_targets(node_id, network_path) + .and_then(|transient_node_metadata| transient_node_metadata.port_click_targets.input_port_position(*input_index)), InputConnector::Export(export_index) => self .import_export_ports(network_path) .and_then(|import_export_ports| import_export_ports.input_port_position(*export_index)), @@ -3366,7 +3396,7 @@ impl NodeNetworkInterface { self.selected_nodes() .0 .iter() - .filter(|node| self.is_layer(&node, &[])) + .filter(|node| self.is_layer(node, &[])) .filter_map(|layer| self.document_metadata.bounding_box_viewport(LayerNodeIdentifier::new(*layer, self))) .reduce(Quad::combine_bounds) } @@ -3375,7 +3405,7 @@ impl NodeNetworkInterface { self.selected_nodes() .0 .iter() - .filter(|node| self.is_layer(&node, &[]) && !self.is_layer(&node, &[])) + .filter(|node| self.is_layer(node, &[]) && !self.is_locked(node, &[])) .filter_map(|layer| self.document_metadata.bounding_box_viewport(LayerNodeIdentifier::new(*layer, self))) .reduce(Quad::combine_bounds) } @@ -3406,7 +3436,7 @@ impl NodeNetworkInterface { return None; }; - let bounding_box_subpath = bezier_rs::Subpath::::new_rect(bounds[0], bounds[1]); + let bounding_box_subpath = Subpath::::new_rect(bounds[0], bounds[1]); bounding_box_subpath.bounding_box_with_transform(network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport) } @@ -3442,22 +3472,27 @@ impl NodeNetworkInterface { (layer_widths, chain_widths, has_left_input_wire) } - pub fn compute_modified_vector(&self, layer: LayerNodeIdentifier) -> Option { + pub fn compute_modified_vector(&self, layer: LayerNodeIdentifier) -> Option { let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, self); - if let Some(vector_data) = graph_layer.upstream_node_id_from_name("Path").and_then(|node| self.document_metadata.vector_modify.get(&node)) { - let mut modified = vector_data.clone(); - if let Some(TaggedValue::VectorModification(modification)) = graph_layer.find_input("Path", 1) { - modification.apply(&mut modified); + if let Some(path_node) = graph_layer.upstream_visible_node_id_from_name_in_layer("Path") { + if let Some(vector) = self.document_metadata.vector_modify.get(&path_node) { + let mut modified = vector.clone(); + + let path_node = self.document_network().nodes.get(&path_node); + let modification_input = path_node.and_then(|node: &DocumentNode| node.inputs.get(1)).and_then(|input| input.as_value()); + if let Some(TaggedValue::VectorModification(modification)) = modification_input { + modification.apply(&mut modified); + } + return Some(modified); } - return Some(modified); } self.document_metadata .click_targets .get(&layer) .map(|click| click.iter().map(ClickTarget::target_type)) - .map(|target_types| VectorData::from_target_types(target_types, true)) + .map(|target_types| Vector::from_target_types(target_types, true)) } /// Loads the structure of layer nodes from a node graph. @@ -3553,8 +3588,8 @@ impl NodeNetworkInterface { } /// Update the cached first instance source id of the layers - pub fn update_first_instance_source_id(&mut self, new: HashMap>) { - self.document_metadata.first_instance_source_ids = new; + pub fn update_first_element_source_id(&mut self, new: HashMap>) { + self.document_metadata.first_element_source_ids = new; } /// Update the cached click targets of the layers @@ -3568,7 +3603,7 @@ impl NodeNetworkInterface { } /// Update the vector modify of the layers - pub fn update_vector_modify(&mut self, new_vector_modify: HashMap) { + pub fn update_vector_modify(&mut self, new_vector_modify: HashMap) { self.document_metadata.vector_modify = new_vector_modify; } } @@ -3817,13 +3852,12 @@ impl NodeNetworkInterface { // First disconnects the import, then removes it pub fn remove_import(&mut self, import_index: usize, network_path: &[NodeId]) { - let mut encapsulating_network_path = network_path.to_vec(); - let Some(parent_id) = encapsulating_network_path.pop() else { + let Some((parent_id, encapsulating_network_path)) = network_path.split_last() else { log::error!("Cannot remove export for document network"); return; }; - let number_of_inputs = self.number_of_inputs(&parent_id, &encapsulating_network_path); + let number_of_inputs = self.number_of_inputs(parent_id, encapsulating_network_path); let Some(outward_wires) = self.outward_wires(network_path) else { log::error!("Could not get outward wires in remove_import"); return; @@ -3852,11 +3886,11 @@ impl NodeNetworkInterface { self.create_wire(&output_connector, &input_wire, network_path); } - let Some(network) = self.network_mut(&encapsulating_network_path) else { + let Some(network) = self.network_mut(encapsulating_network_path) else { log::error!("Could not get parent node in remove_import"); return; }; - let Some(node) = network.nodes.get_mut(&parent_id) else { + let Some(node) = network.nodes.get_mut(parent_id) else { log::error!("Could not get node in remove_import"); return; }; @@ -3866,7 +3900,7 @@ impl NodeNetworkInterface { self.transaction_modified(); // There will not be an encapsulating node if the network is the document network - let Some(encapsulating_node_metadata) = self.node_metadata_mut(&parent_id, &encapsulating_network_path) else { + let Some(encapsulating_node_metadata) = self.node_metadata_mut(parent_id, encapsulating_network_path) else { log::error!("Could not get encapsulating node metadata in remove_export"); return; }; @@ -3874,11 +3908,11 @@ impl NodeNetworkInterface { encapsulating_node_metadata.persistent_metadata.reference = None; // Update the metadata for the encapsulating node - self.unload_outward_wires(&encapsulating_network_path); - self.unload_node_click_targets(&parent_id, &encapsulating_network_path); - self.unload_all_nodes_bounding_box(&encapsulating_network_path); - if !self.is_eligible_to_be_layer(&parent_id, &encapsulating_network_path) && self.is_layer(&parent_id, &encapsulating_network_path) { - self.set_to_node_or_layer(&parent_id, &encapsulating_network_path, false); + self.unload_outward_wires(encapsulating_network_path); + self.unload_node_click_targets(parent_id, encapsulating_network_path); + self.unload_all_nodes_bounding_box(encapsulating_network_path); + if !self.is_eligible_to_be_layer(parent_id, encapsulating_network_path) && self.is_layer(parent_id, encapsulating_network_path) { + self.set_to_node_or_layer(parent_id, encapsulating_network_path, false); } if encapsulating_network_path.is_empty() { self.load_structure(); @@ -4142,7 +4176,7 @@ impl NodeNetworkInterface { if let DocumentNodeImplementation::Network(network) = &node.implementation { let number_of_exports = network.exports.len(); let Some(metadata) = self.node_metadata_mut(node_id, network_path) else { - log::error!("Could not get metadata for node: {:?}", node_id); + log::error!("Could not get metadata for node: {node_id:?}"); return; }; metadata.persistent_metadata.output_names.resize(number_of_exports, "".to_string()); @@ -4159,7 +4193,7 @@ impl NodeNetworkInterface { } /// Keep metadata in sync with the new implementation if this is used by anything other than the upgrade scripts - pub fn set_manual_compostion(&mut self, node_id: &NodeId, network_path: &[NodeId], manual_composition: Option) { + pub fn set_call_argument(&mut self, node_id: &NodeId, network_path: &[NodeId], call_argument: Type) { let Some(network) = self.network_mut(network_path) else { log::error!("Could not get nested network in set_implementation"); return; @@ -4168,7 +4202,7 @@ impl NodeNetworkInterface { log::error!("Could not get node in set_implementation"); return; }; - node.manual_composition = manual_composition; + node.call_argument = call_argument; } pub fn set_input(&mut self, input_connector: &InputConnector, new_input: NodeInput, network_path: &[NodeId]) { @@ -4246,10 +4280,16 @@ impl NodeNetworkInterface { self.transaction_modified(); // Ensure layer is toggled to non layer if it is no longer eligible to be a layer - if let InputConnector::Node { node_id, .. } = &input_connector { - if !self.is_eligible_to_be_layer(node_id, network_path) && self.is_layer(node_id, network_path) { - self.set_to_node_or_layer(node_id, network_path, false); - } + let layer_node_path = match input_connector { + InputConnector::Node { node_id, .. } => Some((node_id, network_path)), + InputConnector::Export(_) => network_path.split_last(), + }; + + if let Some((layer_id, layer_path)) = layer_node_path + && !self.is_eligible_to_be_layer(layer_id, layer_path) + && self.is_layer(layer_id, layer_path) + { + self.set_to_node_or_layer(layer_id, layer_path, false); } // Side effects @@ -4260,7 +4300,15 @@ impl NodeNetworkInterface { if new_exposed != old_exposed { self.unload_upstream_node_click_targets(vec![*node_id], network_path); self.unload_all_nodes_bounding_box(network_path); + + // Unload the interior imports ports + let nested_path = [network_path, &[*node_id]].concat(); + self.unload_import_export_ports(&nested_path); + self.unload_modify_import_export(&nested_path); } + } else { + self.unload_import_export_ports(network_path); + self.unload_modify_import_export(network_path); } } (_, NodeInput::Node { node_id: upstream_node_id, .. }) => { @@ -5160,10 +5208,7 @@ impl NodeNetworkInterface { .skip(1) .collect::>() { - if self.is_layer(&upstream_node, network_path) { - break; - } - if !self.has_primary_output(&upstream_node, network_path) { + if self.is_layer(&upstream_node, network_path) || self.hidden_primary_output(&upstream_node, network_path) { break; } let Some(outward_wires) = self.outward_wires(network_path).and_then(|outward_wires| outward_wires.get(&OutputConnector::node(upstream_node, 0))) else { @@ -5196,12 +5241,12 @@ impl NodeNetworkInterface { /// Input connector is the input to the layer pub fn try_set_upstream_to_chain(&mut self, input_connector: &InputConnector, network_path: &[NodeId]) { // If the new input is to a non layer node on the same y position as the input connector, or the input connector is the side input of a layer, then set it to chain position - let valid_upstream_chain_nodes = self.valid_upstream_chain_nodes(input_connector, network_path); for node_id in &valid_upstream_chain_nodes { self.set_chain_position(node_id, network_path); } + // Reload click target of the layer which used to encapsulate the node if !valid_upstream_chain_nodes.is_empty() { let mut downstream_layer = Some(input_connector.node_id().unwrap()); @@ -5240,7 +5285,6 @@ impl NodeNetworkInterface { pub fn force_set_upstream_to_chain(&mut self, node_id: &NodeId, network_path: &[NodeId]) { for upstream_id in self.upstream_flow_back_from_nodes(vec![*node_id], network_path, FlowType::HorizontalFlow).collect::>().iter() { if !self.is_layer(upstream_id, network_path) - && self.has_primary_output(node_id, network_path) && self .outward_wires(network_path) .is_some_and(|outward_wires| outward_wires.get(&OutputConnector::node(*upstream_id, 0)).is_some_and(|outward_wires| outward_wires.len() == 1)) @@ -6041,7 +6085,7 @@ impl Iterator for FlowIter<'_> { } else { 0 }; - let take = if self.flow_type == FlowType::UpstreamFlow { usize::MAX } else { 1 }; + let take = if self.flow_type == FlowType::UpstreamFlow { u32::MAX as usize } else { 1 }; let inputs = document_node.inputs.iter().skip(skip).take(take); let node_ids = inputs.filter_map(|input| match input { @@ -6074,12 +6118,6 @@ pub enum TypeSource { Error(&'static str), } -impl Default for TypeSource { - fn default() -> Self { - Self::Error("no source") - } -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, specta::Type)] pub enum ImportOrExport { Import(usize), @@ -6233,9 +6271,9 @@ impl Ports { self.insert_input_port_at_center(input_index, center); } - fn insert_node_output(&mut self, output_index: usize, row_index: usize, node_top_left: DVec2) { + fn insert_node_output(&mut self, output_index: usize, node_top_left: DVec2) { // The center of the click target is always 24 px down from the top left corner of the node - let center = node_top_left + DVec2::new(5. * 24., 24. + 24. * row_index as f64); + let center = node_top_left + DVec2::new(5. * 24., 24. + 24. * output_index as f64); self.insert_output_port_at_center(output_index, center); } @@ -6263,15 +6301,23 @@ impl Ports { } pub fn input_port_position(&self, index: usize) -> Option { - self.input_ports - .get(index) - .and_then(|(_, click_target)| click_target.bounding_box().map(|bounds| bounds[0] + DVec2::new(8., 8.))) + self.input_ports.iter().find_map(|(port_index, click_target)| { + if *port_index == index { + click_target.bounding_box().map(|bounds| bounds[0] + DVec2::new(8., 8.)) + } else { + None + } + }) } pub fn output_port_position(&self, index: usize) -> Option { - self.output_ports - .get(index) - .and_then(|(_, click_target)| click_target.bounding_box().map(|bounds| bounds[0] + DVec2::new(8., 8.))) + self.output_ports.iter().find_map(|(port_index, click_target)| { + if *port_index == index { + click_target.bounding_box().map(|bounds| bounds[0] + DVec2::new(8., 8.)) + } else { + None + } + }) } } @@ -6405,14 +6451,13 @@ pub struct NodeNetworkTransientMetadata { pub modify_import_export: TransientMetadata, // Distance to the edges of the network, where the import/export ports are displayed. Rounded to nearest grid space when the panning ends. pub rounded_network_edge_distance: TransientMetadata, + // Wires from the exports pub wires: Vec>, } #[derive(Debug, Clone)] pub struct ModifyImportExportClickTarget { - // Plus icon that appears below all imports/exports, except in the document network - pub add_import_export: Ports, // Subtract icon that appears when hovering over an import/export pub remove_imports_exports: Ports, // Grip drag icon that appears when hovering over an import/export @@ -6435,12 +6480,6 @@ pub enum LayerOwner { None(i32), } -/// Utility function for providing a default boolean value to serde. -#[inline(always)] -fn return_true() -> bool { - true -} - #[derive(Debug, Default, serde::Serialize, serde::Deserialize)] pub struct DocumentNodeMetadata { #[serde(deserialize_with = "deserialize_node_persistent_metadata")] @@ -6600,30 +6639,6 @@ struct InputTransientMetadata { // types: populated for each protonode after each } -// TODO: Eventually remove this migration document upgrade code -fn migrate_output_names<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { - use serde::Deserialize; - - const REPLACEMENTS: [(&str, &str); 4] = [ - ("VectorData", "Instances"), - ("GraphicGroup", "Instances"), - ("ImageFrame", "Instances"), - ("Instances", "Instances"), - ]; - - let mut names = Vec::::deserialize(deserializer)?; - - for name in names.iter_mut() { - for (old, new) in REPLACEMENTS.iter() { - if name == old { - *name = new.to_string(); - } - } - } - - Ok(names) -} - /// Persistent metadata for each node in the network, which must be included when creating, serializing, and deserializing saving a node. #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub struct DocumentNodePersistentMetadata { @@ -6638,12 +6653,7 @@ pub struct DocumentNodePersistentMetadata { /// Stores metadata to override the properties in the properties panel for each input. These can either be generated automatically based on the type, or with a custom function. /// Must match the length of node inputs pub input_metadata: Vec, - #[serde(deserialize_with = "migrate_output_names")] pub output_names: Vec, - /// Indicates to the UI if a primary output should be drawn for this node. - /// True for most nodes, but the Split Channels node is an example of a node that has multiple secondary outputs but no primary output. - #[serde(default = "return_true")] - pub has_primary_output: bool, /// Represents the lock icon for locking/unlocking the node in the graph UI. When locked, a node cannot be moved in the graph UI. #[serde(default)] pub locked: bool, @@ -6664,7 +6674,6 @@ impl Default for DocumentNodePersistentMetadata { display_name: String::new(), input_metadata: Vec::new(), output_names: Vec::new(), - has_primary_output: true, pinned: false, locked: false, node_type_metadata: NodeTypePersistentMetadata::default(), @@ -6721,108 +6730,6 @@ impl InputMetadata { } } -/// Persistent metadata for each node in the network, which must be included when creating, serializing, and deserializing saving a node. -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct DocumentNodePersistentMetadataInputNames { - pub reference: Option, - #[serde(default)] - pub display_name: String, - pub input_names: Vec, - pub output_names: Vec, - #[serde(default = "return_true")] - pub has_primary_output: bool, - #[serde(default)] - pub locked: bool, - #[serde(default)] - pub pinned: bool, - pub node_type_metadata: NodeTypePersistentMetadata, - pub network_metadata: Option, -} - -impl From for DocumentNodePersistentMetadata { - fn from(old: DocumentNodePersistentMetadataInputNames) -> Self { - DocumentNodePersistentMetadata { - input_metadata: Vec::new(), - ..old.into() - } - } -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct DocumentNodePersistentMetadataPropertiesRow { - pub reference: Option, - #[serde(default)] - pub display_name: String, - pub input_properties: Vec, - #[serde(deserialize_with = "migrate_output_names")] - pub output_names: Vec, - #[serde(default = "return_true")] - pub has_primary_output: bool, - #[serde(default)] - pub locked: bool, - #[serde(default)] - pub pinned: bool, - pub node_type_metadata: NodeTypePersistentMetadata, - pub network_metadata: Option, -} - -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct PropertiesRow { - pub input_data: HashMap, - pub widget_override: Option, - #[serde(skip)] - pub input_name: String, - #[serde(skip)] - pub input_description: String, -} - -impl From for DocumentNodePersistentMetadata { - fn from(old: DocumentNodePersistentMetadataPropertiesRow) -> Self { - let mut input_metadata = Vec::new(); - for properties_row in old.input_properties { - input_metadata.push(InputMetadata { - persistent_metadata: InputPersistentMetadata { - input_data: properties_row.input_data, - widget_override: properties_row.widget_override, - input_name: properties_row.input_name, - input_description: properties_row.input_description, - }, - ..Default::default() - }) - } - DocumentNodePersistentMetadata { - reference: old.reference, - display_name: old.display_name, - input_metadata: Vec::new(), - output_names: old.output_names, - has_primary_output: old.has_primary_output, - locked: old.locked, - pinned: old.pinned, - node_type_metadata: old.node_type_metadata, - network_metadata: old.network_metadata, - } - } -} - -fn deserialize_node_persistent_metadata<'de, D>(deserializer: D) -> Result -where - D: serde::Deserializer<'de>, -{ - use serde::Deserialize; - - let value = Value::deserialize(deserializer)?; - if let Ok(document) = serde_json::from_value::(value.clone()) { - return Ok(document); - }; - if let Ok(document) = serde_json::from_value::(value.clone()) { - return Ok(document.into()); - }; - match serde_json::from_value::(value.clone()) { - Ok(document) => Ok(document.into()), - Err(e) => Err(serde::de::Error::custom(e)), - } -} - #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum NodeTypePersistentMetadata { Layer(LayerPersistentMetadata), diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs b/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs new file mode 100644 index 0000000000..3b416713b7 --- /dev/null +++ b/editor/src/messages/portfolio/document/utility_types/network_interface/deserialization.rs @@ -0,0 +1,136 @@ +use crate::messages::portfolio::document::utility_types::network_interface::{DocumentNodePersistentMetadata, InputMetadata, InputPersistentMetadata, NodeNetworkMetadata, NodeTypePersistentMetadata}; +use serde_json::Value; +use std::collections::HashMap; + +/// Persistent metadata for each node in the network, which must be included when creating, serializing, and deserializing saving a node. +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct DocumentNodePersistentMetadataInputNames { + pub reference: Option, + #[serde(default)] + pub display_name: String, + pub input_names: Vec, + pub output_names: Vec, + pub has_primary_output: bool, + #[serde(default)] + pub locked: bool, + #[serde(default)] + pub pinned: bool, + pub node_type_metadata: NodeTypePersistentMetadata, + pub network_metadata: Option, +} + +impl From for DocumentNodePersistentMetadata { + fn from(old: DocumentNodePersistentMetadataInputNames) -> Self { + DocumentNodePersistentMetadata { + input_metadata: Vec::new(), + ..old.into() + } + } +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct DocumentNodePersistentMetadataPropertiesRow { + pub reference: Option, + #[serde(default)] + pub display_name: String, + pub input_properties: Vec, + pub output_names: Vec, + pub has_primary_output: bool, + #[serde(default)] + pub locked: bool, + #[serde(default)] + pub pinned: bool, + pub node_type_metadata: NodeTypePersistentMetadata, + pub network_metadata: Option, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct PropertiesRow { + pub input_data: HashMap, + pub widget_override: Option, + #[serde(skip)] + pub input_name: String, + #[serde(skip)] + pub input_description: String, +} + +impl From for DocumentNodePersistentMetadata { + fn from(old: DocumentNodePersistentMetadataPropertiesRow) -> Self { + let mut input_metadata = Vec::new(); + for properties_row in old.input_properties { + input_metadata.push(InputMetadata { + persistent_metadata: InputPersistentMetadata { + input_data: properties_row.input_data, + widget_override: properties_row.widget_override, + input_name: properties_row.input_name, + input_description: properties_row.input_description, + }, + ..Default::default() + }) + } + DocumentNodePersistentMetadata { + reference: old.reference, + display_name: old.display_name, + input_metadata: Vec::new(), + output_names: old.output_names, + locked: old.locked, + pinned: old.pinned, + node_type_metadata: old.node_type_metadata, + network_metadata: old.network_metadata, + } + } +} + +/// Persistent metadata for each node in the network, which must be included when creating, serializing, and deserializing saving a node. +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct DocumentNodePersistentMetadataHasPrimaryOutput { + pub reference: Option, + #[serde(default)] + pub display_name: String, + pub input_metadata: Vec, + pub output_names: Vec, + pub has_primary_output: bool, + #[serde(default)] + pub locked: bool, + #[serde(default)] + pub pinned: bool, + pub node_type_metadata: NodeTypePersistentMetadata, + pub network_metadata: Option, +} + +impl From for DocumentNodePersistentMetadata { + fn from(old: DocumentNodePersistentMetadataHasPrimaryOutput) -> Self { + DocumentNodePersistentMetadata { + reference: old.reference, + display_name: old.display_name, + input_metadata: old.input_metadata, + output_names: old.output_names, + locked: old.locked, + pinned: old.pinned, + node_type_metadata: old.node_type_metadata, + network_metadata: old.network_metadata, + } + } +} + +pub fn deserialize_node_persistent_metadata<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + use serde::Deserialize; + + let value = Value::deserialize(deserializer)?; + if let Ok(document) = serde_json::from_value::(value.clone()) { + return Ok(document.into()); + }; + if let Ok(document) = serde_json::from_value::(value.clone()) { + return Ok(document); + }; + if let Ok(document) = serde_json::from_value::(value.clone()) { + return Ok(document.into()); + }; + match serde_json::from_value::(value.clone()) { + Ok(document) => Ok(document.into()), + Err(e) => Err(serde::de::Error::custom(e)), + } +} diff --git a/editor/src/messages/portfolio/document/utility_types/nodes.rs b/editor/src/messages/portfolio/document/utility_types/nodes.rs index 66369026b3..c120938a80 100644 --- a/editor/src/messages/portfolio/document/utility_types/nodes.rs +++ b/editor/src/messages/portfolio/document/utility_types/nodes.rs @@ -61,6 +61,7 @@ pub struct LayerPanelEntry { pub clippable: bool, } +/// IMPORTANT: the same node may appear multiple times. #[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize, PartialEq, Eq, specta::Type)] pub struct SelectedNodes(pub Vec); @@ -129,6 +130,7 @@ impl SelectedNodes { self.selected_layers(metadata).any(|selected| selected == layer) } + /// IMPORTANT: the same node may appear multiple times. pub fn selected_nodes(&self) -> impl Iterator + '_ { self.0.iter() } diff --git a/editor/src/messages/portfolio/document/utility_types/transformation.rs b/editor/src/messages/portfolio/document/utility_types/transformation.rs index cefcb61418..36d7d734ad 100644 --- a/editor/src/messages/portfolio/document/utility_types/transformation.rs +++ b/editor/src/messages/portfolio/document/utility_types/transformation.rs @@ -8,7 +8,8 @@ use crate::messages::tool::common_functionality::shape_editor::ShapeState; use crate::messages::tool::utility_types::ToolType; use glam::{DAffine2, DMat2, DVec2}; use graphene_std::renderer::Quad; -use graphene_std::vector::{HandleExt, HandleId, ManipulatorPointId, PointId, VectorModificationType}; +use graphene_std::vector::misc::{HandleId, ManipulatorPointId}; +use graphene_std::vector::{HandleExt, PointId, VectorModificationType}; use std::collections::{HashMap, VecDeque}; use std::f64::consts::PI; @@ -79,7 +80,7 @@ impl OriginalTransforms { if path_map.contains_key(&layer) { continue; } - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue; }; let Some(selected_points) = shape_editor.selected_points_in_layer(layer) else { @@ -91,7 +92,7 @@ impl OriginalTransforms { let mut selected_points = selected_points.clone(); - for (segment_id, _, start, end) in vector_data.segment_bezier_iter() { + for (segment_id, _, start, end) in vector.segment_bezier_iter() { if selected_segments.contains(&segment_id) { selected_points.insert(ManipulatorPointId::Anchor(start)); selected_points.insert(ManipulatorPointId::Anchor(end)); @@ -100,23 +101,23 @@ impl OriginalTransforms { // Anchors also move their handles let anchor_ids = selected_points.iter().filter_map(|point| point.as_anchor()); - let anchors = anchor_ids.filter_map(|id| vector_data.point_domain.position_from_id(id).map(|pos| (id, AnchorPoint { initial: pos, current: pos }))); + let anchors = anchor_ids.filter_map(|id| vector.point_domain.position_from_id(id).map(|pos| (id, AnchorPoint { initial: pos, current: pos }))); let anchors = anchors.collect(); let selected_handles = selected_points.iter().filter_map(|point| point.as_handle()); let anchor_ids = selected_points.iter().filter_map(|point| point.as_anchor()); - let connected_handles = anchor_ids.flat_map(|point| vector_data.all_connected(point)); + let connected_handles = anchor_ids.flat_map(|point| vector.all_connected(point)); let all_handles = selected_handles.chain(connected_handles); let handles = all_handles .filter_map(|id| { - let anchor = id.to_manipulator_point().get_anchor(&vector_data)?; - let initial = id.to_manipulator_point().get_position(&vector_data)?; - let relative = vector_data.point_domain.position_from_id(anchor)?; - let other_handle = vector_data + let anchor = id.to_manipulator_point().get_anchor(&vector)?; + let initial = id.to_manipulator_point().get_position(&vector)?; + let relative = vector.point_domain.position_from_id(anchor)?; + let other_handle = vector .other_colinear_handle(id) .filter(|other| !selected_points.contains(&other.to_manipulator_point()) && !selected_points.contains(&ManipulatorPointId::Anchor(anchor))); - let mirror = other_handle.and_then(|id| Some((id, id.to_manipulator_point().get_position(&vector_data)?))); + let mirror = other_handle.and_then(|id| Some((id, id.to_manipulator_point().get_position(&vector)?))); Some((id, HandlePoint { initial, relative, anchor, mirror })) }) @@ -517,8 +518,8 @@ impl<'a> Selected<'a> { tool_type: &'a ToolType, pen_handle: Option<&'a mut DVec2>, ) -> Self { - // If user is using the Select tool then use the original layer transforms - if (*tool_type == ToolType::Select) && (*original_transforms == OriginalTransforms::Path(HashMap::new())) { + // If user is using the Select tool or Shape tool then use the original layer transforms + if (*tool_type == ToolType::Select || *tool_type == ToolType::Shape) && (*original_transforms == OriginalTransforms::Path(HashMap::new())) { *original_transforms = OriginalTransforms::Layer(HashMap::new()); } diff --git a/editor/src/messages/portfolio/document/utility_types/wires.rs b/editor/src/messages/portfolio/document/utility_types/wires.rs index 9f85c82670..ad6ab32843 100644 --- a/editor/src/messages/portfolio/document/utility_types/wires.rs +++ b/editor/src/messages/portfolio/document/utility_types/wires.rs @@ -1,8 +1,7 @@ use crate::messages::portfolio::document::node_graph::utility_types::FrontendGraphDataType; -use bezier_rs::{ManipulatorGroup, Subpath}; use glam::{DVec2, IVec2}; -use graphene_std::uuid::NodeId; -use graphene_std::vector::PointId; +use graphene_std::{uuid::NodeId, vector::misc::dvec2_to_point}; +use kurbo::{BezPath, DEFAULT_ACCURACY, Line, Point, Shape}; #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)] pub struct WirePath { @@ -53,7 +52,7 @@ impl GraphWireStyle { } } -pub fn build_vector_wire(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool, graph_wire_style: GraphWireStyle) -> Subpath { +pub fn build_vector_wire(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool, graph_wire_style: GraphWireStyle) -> BezPath { let grid_spacing = 24.; match graph_wire_style { GraphWireStyle::Direct => { @@ -85,44 +84,21 @@ pub fn build_vector_wire(output_position: DVec2, input_position: DVec2, vertical let delta01 = DVec2::new((locations[1].x - locations[0].x) * smoothing, (locations[1].y - locations[0].y) * smoothing); let delta23 = DVec2::new((locations[3].x - locations[2].x) * smoothing, (locations[3].y - locations[2].y) * smoothing); - Subpath::new( - vec![ - ManipulatorGroup { - anchor: locations[0], - in_handle: None, - out_handle: None, - id: PointId::generate(), - }, - ManipulatorGroup { - anchor: locations[1], - in_handle: None, - out_handle: Some(locations[1] + delta01), - id: PointId::generate(), - }, - ManipulatorGroup { - anchor: locations[2], - in_handle: Some(locations[2] - delta23), - out_handle: None, - id: PointId::generate(), - }, - ManipulatorGroup { - anchor: locations[3], - in_handle: None, - out_handle: None, - id: PointId::generate(), - }, - ], - false, - ) + let mut wire = BezPath::new(); + wire.move_to(dvec2_to_point(locations[0])); + wire.line_to(dvec2_to_point(locations[1])); + wire.curve_to(dvec2_to_point(locations[1] + delta01), dvec2_to_point(locations[2] - delta23), dvec2_to_point(locations[2])); + wire.line_to(dvec2_to_point(locations[3])); + wire } GraphWireStyle::GridAligned => { - let locations = straight_wire_paths(output_position, input_position, vertical_out, vertical_in); - straight_wire_subpath(locations) + let locations = straight_wire_path(output_position, input_position, vertical_out, vertical_in); + straight_wire_to_bezpath(locations) } } } -fn straight_wire_paths(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool) -> Vec { +fn straight_wire_path(output_position: DVec2, input_position: DVec2, vertical_out: bool, vertical_in: bool) -> Vec { let grid_spacing = 24; let line_width = 2; @@ -446,40 +422,24 @@ fn straight_wire_paths(output_position: DVec2, input_position: DVec2, vertical_o vec![IVec2::new(x1, y1), IVec2::new(x20, y1), IVec2::new(x20, y3), IVec2::new(x4, y3)] } -fn straight_wire_subpath(locations: Vec) -> Subpath { +fn straight_wire_to_bezpath(locations: Vec) -> BezPath { if locations.is_empty() { - return Subpath::new(Vec::new(), false); + return BezPath::new(); } + let to_point = |location: IVec2| Point::new(location.x as f64, location.y as f64); + if locations.len() == 2 { - return Subpath::new( - vec![ - ManipulatorGroup { - anchor: locations[0].into(), - in_handle: None, - out_handle: None, - id: PointId::generate(), - }, - ManipulatorGroup { - anchor: locations[1].into(), - in_handle: None, - out_handle: None, - id: PointId::generate(), - }, - ], - false, - ); + let p1 = to_point(locations[0]); + let p2 = to_point(locations[1]); + Line::new(p1, p2).to_path(DEFAULT_ACCURACY); } let corner_radius = 10; // Create path with rounded corners - let mut path = vec![ManipulatorGroup { - anchor: locations[0].into(), - in_handle: None, - out_handle: None, - id: PointId::generate(), - }]; + let mut path = BezPath::new(); + path.move_to(to_point(locations[0])); for i in 1..(locations.len() - 1) { let prev = locations[i - 1]; @@ -563,27 +523,9 @@ fn straight_wire_subpath(locations: Vec) -> Subpath { }, ); - path.extend(vec![ - ManipulatorGroup { - anchor: corner_start.into(), - in_handle: None, - out_handle: Some(corner_start_mid.into()), - id: PointId::generate(), - }, - ManipulatorGroup { - anchor: corner_end.into(), - in_handle: Some(corner_end_mid.into()), - out_handle: None, - id: PointId::generate(), - }, - ]) + path.line_to(to_point(corner_start)); + path.curve_to(to_point(corner_start_mid), to_point(corner_end_mid), to_point(corner_end)); } - - path.push(ManipulatorGroup { - anchor: (*locations.last().unwrap()).into(), - in_handle: None, - out_handle: None, - id: PointId::generate(), - }); - Subpath::new(path, false) + path.line_to(to_point(*locations.last().unwrap())); + path } diff --git a/editor/src/messages/portfolio/document_migration.rs b/editor/src/messages/portfolio/document_migration.rs index 96213b4ee8..63d4eac69e 100644 --- a/editor/src/messages/portfolio/document_migration.rs +++ b/editor/src/messages/portfolio/document_migration.rs @@ -5,20 +5,22 @@ use crate::messages::portfolio::document::node_graph::document_node_definitions: use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeTemplate, OutputConnector}; use crate::messages::prelude::DocumentMessageHandler; -use bezier_rs::Subpath; use glam::IVec2; use graph_craft::document::DocumentNode; use graph_craft::document::{DocumentNodeImplementation, NodeInput, value::TaggedValue}; use graphene_std::ProtoNodeIdentifier; -use graphene_std::text::TypesettingConfig; +use graphene_std::subpath::Subpath; +use graphene_std::table::Table; +use graphene_std::text::{TextAlign, TypesettingConfig}; use graphene_std::uuid::NodeId; +use graphene_std::vector::Vector; use graphene_std::vector::style::{PaintOrder, StrokeAlign}; -use graphene_std::vector::{VectorData, VectorDataTable}; use std::collections::HashMap; const TEXT_REPLACEMENTS: &[(&str, &str)] = &[ ("graphene_core::vector::vector_nodes::SamplePointsNode", "graphene_core::vector::SamplePolylineNode"), ("graphene_core::vector::vector_nodes::SubpathSegmentLengthsNode", "graphene_core::vector::SubpathSegmentLengthsNode"), + ("\"manual_composition\":null", "\"manual_composition\":{\"Generic\":\"T\"}"), ]; pub struct NodeReplacement<'a> { @@ -27,22 +29,56 @@ pub struct NodeReplacement<'a> { } const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ - // graphic element + // artboard NodeReplacement { - node: graphene_std::graphic_element::append_artboard::IDENTIFIER, - aliases: &["graphene_core::AddArtboardNode"], + node: graphene_std::artboard::create_artboard::IDENTIFIER, + aliases: &[ + "graphene_core::ConstructArtboardNode", + "graphene_core::graphic_element::ToArtboardNode", + "graphene_core::artboard::ToArtboardNode", + ], + }, + // graphic + NodeReplacement { + node: graphene_std::graphic::to_graphic::IDENTIFIER, + aliases: &[ + "graphene_core::ToGraphicGroupNode", + "graphene_core::graphic_element::ToGroupNode", + "graphene_core::graphic::ToGroupNode", + ], }, NodeReplacement { - node: graphene_std::graphic_element::to_artboard::IDENTIFIER, - aliases: &["graphene_core::ConstructArtboardNode"], + node: graphene_std::graphic::wrap_graphic::IDENTIFIER, + aliases: &[ + // Converted from "To Element" + "graphene_core::ToGraphicElementNode", + "graphene_core::graphic_element::ToElementNode", + "graphene_core::graphic::ToElementNode", + ], }, NodeReplacement { - node: graphene_std::graphic_element::to_element::IDENTIFIER, - aliases: &["graphene_core::ToGraphicElementNode"], + node: graphene_std::graphic::legacy_layer_extend::IDENTIFIER, + aliases: &[ + "graphene_core::graphic_element::LayerNode", + "graphene_core::graphic::LayerNode", + // Converted from "Append Artboard" + "graphene_core::AddArtboardNode", + "graphene_core::graphic_element::AppendArtboardNode", + "graphene_core::graphic::AppendArtboardNode", + "graphene_core::artboard::AppendArtboardNode", + ], }, NodeReplacement { - node: graphene_std::graphic_element::to_group::IDENTIFIER, - aliases: &["graphene_core::ToGraphicGroupNode"], + node: graphene_std::graphic::flatten_graphic::IDENTIFIER, + aliases: &["graphene_core::graphic_element::FlattenGroupNode", "graphene_core::graphic::FlattenGroupNode"], + }, + NodeReplacement { + node: graphene_std::graphic::flatten_vector::IDENTIFIER, + aliases: &["graphene_core::graphic_element::FlattenVectorNode"], + }, + NodeReplacement { + node: graphene_std::graphic::index::IDENTIFIER, + aliases: &["graphene_core::graphic_element::IndexNode"], }, // math_nodes NodeReplacement { @@ -186,13 +222,26 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ aliases: &["graphene_core::ops::PercentageValueNode"], }, NodeReplacement { - node: graphene_std::math_nodes::coordinate_value::IDENTIFIER, + node: graphene_std::math_nodes::vec_2_value::IDENTIFIER, aliases: &[ - "graphene_core::ops::CoordinateValueNode", "graphene_core::ops::ConstructVector2", "graphene_core::ops::Vector2ValueNode", + "graphene_core::ops::CoordinateValueNode", + "graphene_math_nodes::CoordinateValueNode", ], }, + NodeReplacement { + node: graphene_std::vector::cut_segments::IDENTIFIER, + aliases: &["graphene_core::vector::SplitSegmentsNode"], + }, + NodeReplacement { + node: graphene_std::vector::cut_path::IDENTIFIER, + aliases: &["graphene_core::vector::SplitPathNode"], + }, + NodeReplacement { + node: graphene_std::vector::vec_2_to_point::IDENTIFIER, + aliases: &["graphene_core::vector::PositionToPointNode"], + }, NodeReplacement { node: graphene_std::math_nodes::color_value::IDENTIFIER, aliases: &["graphene_core::ops::ColorValueNode"], @@ -223,8 +272,8 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ aliases: &["graphene_core::ops::SomeNode"], }, NodeReplacement { - node: graphene_std::debug::unwrap::IDENTIFIER, - aliases: &["graphene_core::ops::UnwrapNode"], + node: graphene_std::debug::unwrap_option::IDENTIFIER, + aliases: &["graphene_core::ops::UnwrapNode", "graphene_core::debug::UnwrapNode"], }, NodeReplacement { node: graphene_std::debug::clone::IDENTIFIER, @@ -251,7 +300,24 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::vector::auto_tangents::IDENTIFIER, aliases: &["graphene_core::vector::GenerateHandlesNode", "graphene_core::vector::RemoveHandlesNode"], }, - // raster::adjustments + // graphene_raster_nodes::blending_nodes + NodeReplacement { + node: graphene_std::raster_nodes::blending_nodes::blend::IDENTIFIER, + aliases: &[ + "graphene_raster_nodes::adjustments::BlendNode", + "graphene_core::raster::adjustments::BlendNode", + "graphene_core::raster::BlendNode", + ], + }, + NodeReplacement { + node: graphene_std::raster_nodes::blending_nodes::color_overlay::IDENTIFIER, + aliases: &[ + "graphene_raster_nodes::adjustments::ColorOverlayNode", + "graphene_core::raster::adjustments::ColorOverlayNode", + "graphene_raster_nodes::generate_curves::ColorOverlayNode", + ], + }, + // graphene_raster_nodes::adjustments NodeReplacement { node: graphene_std::raster_nodes::adjustments::luminance::IDENTIFIER, aliases: &["graphene_core::raster::adjustments::LuminanceNode", "graphene_core::raster::LuminanceNode"], @@ -292,20 +358,6 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::raster_nodes::adjustments::threshold::IDENTIFIER, aliases: &["graphene_core::raster::adjustments::ThresholdNode", "graphene_core::raster::ThresholdNode"], }, - NodeReplacement { - node: graphene_std::raster_nodes::adjustments::blend::IDENTIFIER, - aliases: &["graphene_core::raster::adjustments::BlendNode", "graphene_core::raster::BlendNode"], - }, - NodeReplacement { - node: graphene_std::raster_nodes::adjustments::blend_color_pair::IDENTIFIER, - aliases: &["graphene_core::raster::BlendColorPairNode"], - }, - // this node doesn't seem to exist? - // (graphene_std::raster_nodes::adjustments::blend_color::IDENTIFIER, &["graphene_core::raster::adjustments::BlendColorsNode","graphene_core::raster::BlendColorsNode"]), - NodeReplacement { - node: graphene_std::raster_nodes::adjustments::gradient_map::IDENTIFIER, - aliases: &["graphene_core::raster::adjustments::GradientMapNode", "graphene_core::raster::GradientMapNode"], - }, NodeReplacement { node: graphene_std::raster_nodes::adjustments::vibrance::IDENTIFIER, aliases: &["graphene_core::raster::adjustments::VibranceNode", "graphene_core::raster::VibranceNode"], @@ -326,11 +378,16 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::raster_nodes::adjustments::exposure::IDENTIFIER, aliases: &["graphene_core::raster::adjustments::ExposureNode", "graphene_core::raster::ExposureNode"], }, + // graphene_raster_nodes::* NodeReplacement { - node: graphene_std::raster_nodes::adjustments::color_overlay::IDENTIFIER, - aliases: &["graphene_core::raster::adjustments::ColorOverlayNode", "graphene_raster_nodes::generate_curves::ColorOverlayNode"], + node: graphene_std::raster_nodes::gradient_map::gradient_map::IDENTIFIER, + aliases: &[ + "graphene_raster_nodes::gradient_map::GradientMapNode", + "graphene_raster_nodes::adjustments::GradientMapNode", + "graphene_core::raster::adjustments::GradientMapNode", + "graphene_core::raster::GradientMapNode", + ], }, - // raster NodeReplacement { node: graphene_std::raster_nodes::generate_curves::generate_curves::IDENTIFIER, aliases: &["graphene_core::raster::adjustments::GenerateCurvesNode"], @@ -369,7 +426,7 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ }, NodeReplacement { node: graphene_std::raster_nodes::std_nodes::image_value::IDENTIFIER, - aliases: &["graphene_std::raster::ImageValueNode"], + aliases: &["graphene_std::raster::ImageValueNode", "graphene_std::raster::ImageNode"], }, NodeReplacement { node: graphene_std::raster_nodes::std_nodes::noise_pattern::IDENTIFIER, @@ -438,6 +495,10 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::path_bool::boolean_operation::IDENTIFIER, aliases: &["graphene_std::vector::BooleanOperationNode"], }, + NodeReplacement { + node: graphene_std::vector::path_modify::IDENTIFIER, + aliases: &["graphene_core::vector::vector_data::modification::PathModifyNode"], + }, // brush NodeReplacement { node: graphene_std::brush::brush::brush_stamp_generator::IDENTIFIER, @@ -499,7 +560,7 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_ let mut default_template = NodeTemplate::default(); default_template.document_node.implementation = DocumentNodeImplementation::ProtoNode(new.clone()); document.network_interface.replace_implementation(node_id, &network_path, &mut default_template); - document.network_interface.set_manual_compostion(node_id, &network_path, Some(graph_craft::Type::Generic("T".into()))); + document.network_interface.set_call_argument(node_id, &network_path, graph_craft::Type::Generic("T".into())); } } } @@ -524,11 +585,11 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], } } - // Upgrade old nodes to use `Context` instead of `()` or `Footprint` for manual composition - if node.manual_composition == Some(graph_craft::concrete!(())) || node.manual_composition == Some(graph_craft::concrete!(graphene_std::transform::Footprint)) { + // Upgrade old nodes to use `Context` instead of `()` or `Footprint` as their call argument + if node.call_argument == graph_craft::concrete!(()) || node.call_argument == graph_craft::concrete!(graphene_std::transform::Footprint) { document .network_interface - .set_manual_compostion(node_id, network_path, graph_craft::concrete!(graphene_std::Context).into()); + .set_call_argument(node_id, network_path, graph_craft::concrete!(graphene_std::Context).into()); } // Only nodes that have not been modified and still refer to a definition can be updated @@ -573,17 +634,17 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], return None; } - // Obtain the document node for the given node ID, extract the vector points, and create vector data from the list of points + // Obtain the document node for the given node ID, extract the vector points, and create a Vector path from the list of points let node = document.network_interface.document_node(node_id, network_path)?; let Some(TaggedValue::VecDVec2(points)) = node.inputs.get(1).and_then(|tagged_value| tagged_value.as_value()) else { log::error!("The old Spline node's input at index 1 is not a TaggedValue::VecDVec2"); return None; }; - let vector_data = VectorData::from_subpath(Subpath::from_anchors_linear(points.to_vec(), false)); + let vector = Vector::from_subpath(Subpath::from_anchors_linear(points.to_vec(), false)); - // Retrieve the output connectors linked to the "Spline" node's output port + // Retrieve the output connectors linked to the "Spline" node's output connector let Some(spline_outputs) = document.network_interface.outward_wires(network_path)?.get(&OutputConnector::node(*node_id, 0)).cloned() else { - log::error!("Vec of InputConnector Spline node is connected to its output port 0."); + log::error!("Vec of InputConnector Spline node is connected to its output connector 0."); return None; }; @@ -593,13 +654,13 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], return None; }; - // Get the "Path" node definition and fill it in with the vector data and default vector modification + // Get the "Path" node definition and fill it in with the Vector path and default vector modification let Some(path_node_type) = resolve_document_node_type("Path") else { log::error!("Path node does not exist."); return None; }; let path_node = path_node_type.node_template_input_override([ - Some(NodeInput::value(TaggedValue::VectorData(VectorDataTable::new(vector_data)), true)), + Some(NodeInput::value(TaggedValue::Vector(Table::new_from_element(vector)), true)), Some(NodeInput::value(TaggedValue::VectorModification(Default::default()), false)), ]); @@ -628,14 +689,14 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], // Reposition the new "Path" node with an offset relative to the original "Spline" node's position document.network_interface.shift_node(&new_path_id, node_position + IVec2::new(-7, 0), network_path); - // Redirect each output connection from the old node to the new "Spline" node's output port + // Redirect each output connection from the old node to the new "Spline" node's output connector for input_connector in spline_outputs { document.network_interface.set_input(&input_connector, NodeInput::node(new_spline_id, 0), network_path); } } // Upgrade Text node to include line height and character spacing, which were previously hardcoded to 1, from https://github.com/GraphiteEditor/Graphite/pull/2016 - if reference == "Text" && inputs_count != 10 { + if reference == "Text" && inputs_count != 11 { let mut template = resolve_document_node_type(reference)?.default_node_template(); document.network_interface.replace_implementation(node_id, network_path, &mut template); let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut template)?; @@ -691,8 +752,17 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], ); document.network_interface.set_input( &InputConnector::node(*node_id, 9), - if inputs_count >= 10 { + if inputs_count >= 11 { old_inputs[9].clone() + } else { + NodeInput::value(TaggedValue::TextAlign(TextAlign::default()), false) + }, + network_path, + ); + document.network_interface.set_input( + &InputConnector::node(*node_id, 10), + if inputs_count >= 11 { + old_inputs[10].clone() } else { NodeInput::value(TaggedValue::Bool(false), false) }, @@ -765,7 +835,7 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId], document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[3].clone(), network_path); } - // Upgrade artboard name being passed as hidden value input to "To Artboard" + // Upgrade artboard name being passed as hidden value input to "Create Artboard" if reference == "Artboard" && reset_node_definitions_on_open { let label = document.network_interface.display_name(node_id, network_path); document @@ -1022,8 +1092,8 @@ mod tests { *hashmap.entry(node.node.clone()).or_default() += 1; }); let duplicates = hashmap.iter().filter(|(_, count)| **count > 1).map(|(node, _)| &node.name).collect::>(); - if duplicates.len() > 0 { - panic!("Duplicate entries in `NODE_REPLACEMENTS`: {:?}", duplicates); + if !duplicates.is_empty() { + panic!("Duplicate entries in `NODE_REPLACEMENTS`: {duplicates:?}"); } } } diff --git a/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs b/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs index d7f1c72d7d..9b86761d87 100644 --- a/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs +++ b/editor/src/messages/portfolio/menu_bar/menu_bar_message_handler.rs @@ -16,10 +16,12 @@ pub struct MenuBarMessageHandler { pub has_selected_nodes: bool, pub has_selected_layers: bool, pub has_selection_history: (bool, bool), - pub spreadsheet_view_open: bool, pub message_logging_verbosity: MessageLoggingVerbosity, pub reset_node_definitions_on_open: bool, - pub single_path_node_compatible_layer_selected: bool, + pub make_path_editable_is_allowed: bool, + pub data_panel_open: bool, + pub layers_panel_open: bool, + pub properties_panel_open: bool, } #[message_handler_data] @@ -46,7 +48,7 @@ impl LayoutHolder for MenuBarMessageHandler { let message_logging_verbosity_names = self.message_logging_verbosity == MessageLoggingVerbosity::Names; let message_logging_verbosity_contents = self.message_logging_verbosity == MessageLoggingVerbosity::Contents; let reset_node_definitions_on_open = self.reset_node_definitions_on_open; - let single_path_node_compatible_layer_selected = self.single_path_node_compatible_layer_selected; + let make_path_editable_is_allowed = self.make_path_editable_is_allowed; let menu_bar_entries = vec![ MenuBarEntry { @@ -99,14 +101,25 @@ impl LayoutHolder for MenuBarMessageHandler { ..MenuBarEntry::default() }, ], - vec![MenuBarEntry { - label: "Save".into(), - icon: Some("Save".into()), - shortcut: action_keys!(DocumentMessageDiscriminant::SaveDocument), - action: MenuBarEntry::create_action(|_| DocumentMessage::SaveDocument.into()), - disabled: no_active_document, - ..MenuBarEntry::default() - }], + vec![ + MenuBarEntry { + label: "Save".into(), + icon: Some("Save".into()), + shortcut: action_keys!(DocumentMessageDiscriminant::SaveDocument), + action: MenuBarEntry::create_action(|_| DocumentMessage::SaveDocument.into()), + disabled: no_active_document, + ..MenuBarEntry::default() + }, + #[cfg(not(target_family = "wasm"))] + MenuBarEntry { + label: "Save Asโ€ฆ".into(), + icon: Some("Save".into()), + shortcut: action_keys!(DocumentMessageDiscriminant::SaveDocumentAs), + action: MenuBarEntry::create_action(|_| DocumentMessage::SaveDocumentAs.into()), + disabled: no_active_document, + ..MenuBarEntry::default() + }, + ], vec![ MenuBarEntry { label: "Importโ€ฆ".into(), @@ -359,8 +372,8 @@ impl LayoutHolder for MenuBarMessageHandler { choices .into_iter() - .map(|group| { - group + .map(|section| { + section .into_iter() .map(|(axis, aggregate, icon, name)| MenuBarEntry { label: name.into(), @@ -419,7 +432,7 @@ impl LayoutHolder for MenuBarMessageHandler { action: MenuBarEntry::no_action(), disabled: no_active_document || !has_selected_layers, children: MenuBarEntryChildren(vec![{ - let list = ::list(); + let list = ::list(); list.iter() .flat_map(|i| i.iter()) .map(move |(operation, info)| MenuBarEntry { @@ -442,7 +455,7 @@ impl LayoutHolder for MenuBarMessageHandler { icon: Some("NodeShape".into()), shortcut: None, action: MenuBarEntry::create_action(|_| NodeGraphMessage::AddPathNode.into()), - disabled: !single_path_node_compatible_layer_selected, + disabled: !make_path_editable_is_allowed, ..MenuBarEntry::default() }], ]), @@ -585,18 +598,40 @@ impl LayoutHolder for MenuBarMessageHandler { disabled: no_active_document, ..MenuBarEntry::default() }], + ]), + ), + MenuBarEntry::new_root( + "Window".into(), + false, + MenuBarEntryChildren(vec![ + vec![ + MenuBarEntry { + label: "Properties".into(), + icon: Some(if self.properties_panel_open { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()), + shortcut: action_keys!(PortfolioMessageDiscriminant::TogglePropertiesPanelOpen), + action: MenuBarEntry::create_action(|_| PortfolioMessage::TogglePropertiesPanelOpen.into()), + ..MenuBarEntry::default() + }, + MenuBarEntry { + label: "Layers".into(), + icon: Some(if self.layers_panel_open { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()), + shortcut: action_keys!(PortfolioMessageDiscriminant::ToggleLayersPanelOpen), + action: MenuBarEntry::create_action(|_| PortfolioMessage::ToggleLayersPanelOpen.into()), + ..MenuBarEntry::default() + }, + ], vec![MenuBarEntry { - label: "Window: Spreadsheet".into(), - icon: Some(if self.spreadsheet_view_open { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()), - action: MenuBarEntry::create_action(|_| SpreadsheetMessage::ToggleOpen.into()), - disabled: no_active_document, + label: "Data".into(), + icon: Some(if self.data_panel_open { "CheckboxChecked" } else { "CheckboxUnchecked" }.into()), + shortcut: action_keys!(PortfolioMessageDiscriminant::ToggleDataPanelOpen), + action: MenuBarEntry::create_action(|_| PortfolioMessage::ToggleDataPanelOpen.into()), ..MenuBarEntry::default() }], ]), ), MenuBarEntry::new_root( "Help".into(), - true, + false, MenuBarEntryChildren(vec![ vec![MenuBarEntry { label: "About Graphiteโ€ฆ".into(), diff --git a/editor/src/messages/portfolio/mod.rs b/editor/src/messages/portfolio/mod.rs index 364dcdfddb..e9673220ab 100644 --- a/editor/src/messages/portfolio/mod.rs +++ b/editor/src/messages/portfolio/mod.rs @@ -4,7 +4,6 @@ mod portfolio_message_handler; pub mod document; pub mod document_migration; pub mod menu_bar; -pub mod spreadsheet; pub mod utility_types; #[doc(inline)] diff --git a/editor/src/messages/portfolio/portfolio_message.rs b/editor/src/messages/portfolio/portfolio_message.rs index 4fb756fc4a..75717bac42 100644 --- a/editor/src/messages/portfolio/portfolio_message.rs +++ b/editor/src/messages/portfolio/portfolio_message.rs @@ -6,6 +6,7 @@ use crate::messages::prelude::*; use graphene_std::Color; use graphene_std::raster::Image; use graphene_std::text::Font; +use std::path::PathBuf; #[impl_message(Message, Portfolio)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] @@ -15,8 +16,6 @@ pub enum PortfolioMessage { MenuBar(MenuBarMessage), #[child] Document(DocumentMessage), - #[child] - Spreadsheet(SpreadsheetMessage), // Messages Init, @@ -68,18 +67,20 @@ pub enum PortfolioMessage { NextDocument, OpenDocument, OpenDocumentFile { - document_name: String, + document_name: Option, + document_path: Option, document_serialized_content: String, }, - ToggleResetNodesToDefinitionsOnOpen, OpenDocumentFileWithId { document_id: DocumentId, - document_name: String, + document_name: Option, + document_path: Option, document_is_auto_saved: bool, document_is_saved: bool, document_serialized_content: String, to_front: bool, }, + ToggleResetNodesToDefinitionsOnOpen, PasteIntoFolder { clipboard: Clipboard, parent: LayerNodeIdentifier, @@ -88,6 +89,9 @@ pub enum PortfolioMessage { PasteSerializedData { data: String, }, + PasteSerializedVector { + data: String, + }, CenterPastedLayers { layers: Vec, }, @@ -114,7 +118,7 @@ pub enum PortfolioMessage { document_id: DocumentId, }, SubmitDocumentExport { - file_name: String, + name: String, file_type: FileType, scale_factor: f64, bounds: ExportBounds, @@ -125,6 +129,9 @@ pub enum PortfolioMessage { document_id: DocumentId, ignore_hash: bool, }, + ToggleDataPanelOpen, + TogglePropertiesPanelOpen, + ToggleLayersPanelOpen, ToggleRulers, UpdateDocumentWidgets, UpdateOpenDocumentsList, diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 71de86b90f..f11cc39427 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -1,9 +1,8 @@ use super::document::utility_types::document_metadata::LayerNodeIdentifier; use super::document::utility_types::network_interface; -use super::spreadsheet::SpreadsheetMessageHandler; use super::utility_types::{PanelType, PersistentData}; use crate::application::generate_uuid; -use crate::consts::DEFAULT_DOCUMENT_NAME; +use crate::consts::{DEFAULT_DOCUMENT_NAME, DEFAULT_STROKE_WIDTH, FILE_EXTENSION}; use crate::messages::animation::TimingInformation; use crate::messages::debug::utility_types::MessageLoggingVerbosity; use crate::messages::dialog::simple_dialogs; @@ -12,6 +11,7 @@ use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::DocumentMessageContext; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; use crate::messages::portfolio::document::node_graph::document_node_definitions; +use crate::messages::portfolio::document::node_graph::document_node_definitions::resolve_document_node_type; use crate::messages::portfolio::document::utility_types::clipboards::{Clipboard, CopyBufferEntry, INTERNAL_CLIPBOARD_COUNT}; use crate::messages::portfolio::document::utility_types::network_interface::OutputConnector; use crate::messages::portfolio::document::utility_types::nodes::SelectedNodes; @@ -19,27 +19,33 @@ use crate::messages::portfolio::document_migration::*; use crate::messages::preferences::SelectionMode; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils; +use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed; use crate::messages::tool::utility_types::{HintData, HintGroup, ToolType}; use crate::node_graph_executor::{ExportConfig, NodeGraphExecutor}; +use derivative::*; use glam::{DAffine2, DVec2}; use graph_craft::document::NodeId; -use graph_craft::document::value::TaggedValue; +use graphene_std::Color; use graphene_std::renderer::Quad; +use graphene_std::subpath::BezierHandles; use graphene_std::text::Font; +use graphene_std::vector::misc::HandleId; +use graphene_std::vector::{PointId, SegmentId, Vector, VectorModificationType}; use std::vec; #[derive(ExtractField)] pub struct PortfolioMessageContext<'a> { pub ipp: &'a InputPreprocessorMessageHandler, pub preferences: &'a PreferencesMessageHandler, + pub animation: &'a AnimationMessageHandler, pub current_tool: &'a ToolType, pub message_logging_verbosity: MessageLoggingVerbosity, pub reset_node_definitions_on_open: bool, pub timing_information: TimingInformation, - pub animation: &'a AnimationMessageHandler, } -#[derive(Debug, Default, ExtractField)] +#[derive(Debug, Derivative, ExtractField)] +#[derivative(Default)] pub struct PortfolioMessageHandler { menu_bar_message_handler: MenuBarMessageHandler, pub documents: HashMap, @@ -50,10 +56,13 @@ pub struct PortfolioMessageHandler { pub persistent_data: PersistentData, pub executor: NodeGraphExecutor, pub selection_mode: SelectionMode, - /// The spreadsheet UI allows for instance data to be previewed. - pub spreadsheet: SpreadsheetMessageHandler, device_pixel_ratio: Option, pub reset_node_definitions_on_open: bool, + pub data_panel_open: bool, + #[derivative(Default(value = "true"))] + pub layers_panel_open: bool, + #[derivative(Default(value = "true"))] + pub properties_panel_open: bool, } #[message_handler_data] @@ -62,11 +71,11 @@ impl MessageHandler> for Portfolio let PortfolioMessageContext { ipp, preferences, + animation, current_tool, message_logging_verbosity, reset_node_definitions_on_open, timing_information, - animation, } = context; match message { @@ -80,8 +89,10 @@ impl MessageHandler> for Portfolio self.menu_bar_message_handler.has_selected_nodes = false; self.menu_bar_message_handler.has_selected_layers = false; self.menu_bar_message_handler.has_selection_history = (false, false); - self.menu_bar_message_handler.single_path_node_compatible_layer_selected = false; - self.menu_bar_message_handler.spreadsheet_view_open = self.spreadsheet.spreadsheet_view_open; + self.menu_bar_message_handler.make_path_editable_is_allowed = false; + self.menu_bar_message_handler.data_panel_open = self.data_panel_open; + self.menu_bar_message_handler.layers_panel_open = self.layers_panel_open; + self.menu_bar_message_handler.properties_panel_open = self.properties_panel_open; self.menu_bar_message_handler.message_logging_verbosity = message_logging_verbosity; self.menu_bar_message_handler.reset_node_definitions_on_open = reset_node_definitions_on_open; @@ -98,37 +109,11 @@ impl MessageHandler> for Portfolio let metadata = &document.network_interface.document_network_metadata().persistent_metadata; (!metadata.selection_undo_history.is_empty(), !metadata.selection_redo_history.is_empty()) }; - self.menu_bar_message_handler.single_path_node_compatible_layer_selected = { - let selected_nodes = document.network_interface.selected_nodes(); - let mut selected_layers = selected_nodes.selected_layers(document.metadata()); - let first_layer = selected_layers.next(); - let second_layer = selected_layers.next(); - let has_single_selection = first_layer.is_some() && second_layer.is_none(); - - let compatible_type = first_layer.and_then(|layer| { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &document.network_interface); - graph_layer.horizontal_layer_flow().nth(1).and_then(|node_id| { - let (output_type, _) = document.network_interface.output_type(&node_id, 0, &[]); - Some(format!("type:{}", output_type.nested_type())) - }) - }); - - let is_compatible = compatible_type.as_deref() == Some("type:Instances"); - - let is_modifiable = first_layer.map_or(false, |layer| { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &document.network_interface); - matches!(graph_layer.find_input("Path", 1), Some(TaggedValue::VectorModification(_))) - }); - - first_layer.is_some() && has_single_selection && is_compatible && !is_modifiable - } + self.menu_bar_message_handler.make_path_editable_is_allowed = make_path_editable_is_allowed(&mut document.network_interface).is_some(); } self.menu_bar_message_handler.process_message(message, responses, ()); } - PortfolioMessage::Spreadsheet(message) => { - self.spreadsheet.process_message(message, responses, ()); - } PortfolioMessage::Document(message) => { if let Some(document_id) = self.active_document_id { if let Some(document) = self.documents.get_mut(&document_id) { @@ -140,6 +125,9 @@ impl MessageHandler> for Portfolio current_tool, preferences, device_pixel_ratio: self.device_pixel_ratio.unwrap_or(1.), + data_panel_open: self.data_panel_open, + layers_panel_open: self.layers_panel_open, + properties_panel_open: self.properties_panel_open, }; document.process_message(message, responses, document_inputs) } @@ -174,6 +162,9 @@ impl MessageHandler> for Portfolio current_tool, preferences, device_pixel_ratio: self.device_pixel_ratio.unwrap_or(1.), + data_panel_open: self.data_panel_open, + layers_panel_open: self.layers_panel_open, + properties_panel_open: self.properties_panel_open, }; document.process_message(message, responses, document_inputs) } @@ -213,12 +204,13 @@ impl MessageHandler> for Portfolio } PortfolioMessage::CloseAllDocuments => { if self.active_document_id.is_some() { - responses.add(BroadcastEvent::ToolAbort); + responses.add(EventMessage::ToolAbort); responses.add(ToolMessage::DeactivateTools); // Clear relevant UI layouts if there are no documents responses.add(PropertiesPanelMessage::Clear); responses.add(DocumentMessage::ClearLayersPanel); + responses.add(DataPanelMessage::ClearLayout); let hint_data = HintData(vec![HintGroup(vec![])]); responses.add(FrontendMessage::UpdateInputHints { hint_data }); } @@ -243,6 +235,7 @@ impl MessageHandler> for Portfolio // Clear UI layouts that assume the existence of a document responses.add(PropertiesPanelMessage::Clear); responses.add(DocumentMessage::ClearLayersPanel); + responses.add(DataPanelMessage::ClearLayout); let hint_data = HintData(vec![HintGroup(vec![])]); responses.add(FrontendMessage::UpdateInputHints { hint_data }); } @@ -257,7 +250,7 @@ impl MessageHandler> for Portfolio PortfolioMessage::CloseDocumentWithConfirmation { document_id } => { let target_document = self.documents.get(&document_id).unwrap(); if target_document.is_saved() { - responses.add(BroadcastEvent::ToolAbort); + responses.add(EventMessage::ToolAbort); responses.add(PortfolioMessage::CloseDocument { document_id }); } else { let dialog = simple_dialogs::CloseDocumentDialog { @@ -362,14 +355,17 @@ impl MessageHandler> for Portfolio self.persistent_data.font_cache.insert(font, preview_url, data); self.executor.update_font_cache(self.persistent_data.font_cache.clone()); for document_id in self.document_ids.iter() { - let inspect_node = self.inspect_node_id(); - let _ = self.executor.submit_node_graph_evaluation( + let node_to_inspect = self.node_to_inspect(); + if let Ok(message) = self.executor.submit_node_graph_evaluation( self.documents.get_mut(document_id).expect("Tried to render non-existent document"), + *document_id, ipp.viewport_bounds.size().as_uvec2(), timing_information, - inspect_node, + node_to_inspect, true, - ); + ) { + responses.add_front(message); + } } if self.active_document_mut().is_some() { @@ -394,16 +390,19 @@ impl MessageHandler> for Portfolio PortfolioMessage::NewDocumentWithName { name } => { let mut new_document = DocumentMessageHandler::default(); new_document.name = name; - responses.add(DocumentMessage::PTZUpdate); + let mut new_responses = VecDeque::new(); + new_responses.add(DocumentMessage::PTZUpdate); let document_id = DocumentId(generate_uuid()); if self.active_document().is_some() { - responses.add(BroadcastEvent::ToolAbort); - responses.add(NavigationMessage::CanvasPan { delta: (0., 0.).into() }); + new_responses.add(EventMessage::ToolAbort); + new_responses.add(NavigationMessage::CanvasPan { delta: (0., 0.).into() }); } - self.load_document(new_document, document_id, responses, false); - responses.add(PortfolioMessage::SelectDocument { document_id }); + self.load_document(new_document, document_id, self.layers_panel_open, &mut new_responses, false); + new_responses.add(PortfolioMessage::SelectDocument { document_id }); + new_responses.extend(responses.drain(..)); + *responses = new_responses; } PortfolioMessage::NextDocument => { if let Some(active_document_id) = self.active_document_id { @@ -420,12 +419,14 @@ impl MessageHandler> for Portfolio } PortfolioMessage::OpenDocumentFile { document_name, + document_path, document_serialized_content, } => { let document_id = DocumentId(generate_uuid()); responses.add(PortfolioMessage::OpenDocumentFileWithId { document_id, document_name, + document_path, document_is_auto_saved: false, document_is_saved: true, document_serialized_content, @@ -440,6 +441,7 @@ impl MessageHandler> for Portfolio PortfolioMessage::OpenDocumentFileWithId { document_id, document_name, + document_path, document_is_auto_saved, document_is_saved, document_serialized_content, @@ -451,10 +453,7 @@ impl MessageHandler> for Portfolio let document_serialized_content = document_migration_string_preprocessing(document_serialized_content); // Deserialize the document - let document = DocumentMessageHandler::deserialize_document(&document_serialized_content).map(|mut document| { - document.name.clone_from(&document_name); - document - }); + let document = DocumentMessageHandler::deserialize_document(&document_serialized_content); // Display an error to the user if the document could not be opened let mut document = match document { @@ -515,8 +514,32 @@ impl MessageHandler> for Portfolio document.set_auto_save_state(document_is_auto_saved); document.set_save_state(document_is_saved); + let document_name_from_path = document_path.as_ref().and_then(|path| { + if path.extension().is_some_and(|e| e == FILE_EXTENSION) { + path.file_stem().map(|n| n.to_string_lossy().to_string()) + } else { + None + } + }); + + match (document_name, document_path, document_name_from_path) { + (Some(name), _, None) => { + document.name = name; + } + (_, Some(path), Some(name)) => { + document.name = name; + document.path = Some(path); + } + (_, _, Some(name)) => { + document.name = name; + } + _ => { + document.name = DEFAULT_DOCUMENT_NAME.to_string(); + } + } + // Load the document into the portfolio so it opens in the editor - self.load_document(document, document_id, responses, to_front); + self.load_document(document, document_id, self.layers_panel_open, responses, to_front); } PortfolioMessage::PasteIntoFolder { clipboard, parent, insert_index } => { let mut all_new_ids = Vec::new(); @@ -568,11 +591,105 @@ impl MessageHandler> for Portfolio responses.add(NodeGraphMessage::RunDocumentGraph); responses.add(NodeGraphMessage::SelectedNodesSet { nodes: all_new_ids }); - responses.add(Message::StartBuffer); - responses.add(PortfolioMessage::CenterPastedLayers { layers }); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PortfolioMessage::CenterPastedLayers { layers }.into()], + }); } } } + // Custom paste implementation for Path tool + PortfolioMessage::PasteSerializedVector { data } => { + // If using Path tool then send the operation to Path tool + if *current_tool == ToolType::Path { + responses.add(PathToolMessage::Paste { data }); + return; + } + + // If not using Path tool, create new layers and add paths into those + if let Some(document) = self.active_document() { + let Ok(data) = serde_json::from_str::>(&data) else { + return; + }; + + let mut layers = Vec::new(); + + for (_, new_vector, transform) in data { + let Some(node_type) = resolve_document_node_type("Path") else { + error!("Path node does not exist"); + continue; + }; + let nodes = vec![(NodeId(0), node_type.default_node_template())]; + + let parent = document.new_layer_parent(false); + + let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses); + layers.push(layer); + + // Adding the transform back into the layer + responses.add(GraphOperationMessage::TransformSet { + layer, + transform, + transform_in: TransformIn::Local, + skip_rerender: false, + }); + + // Add default fill and stroke to the layer + let fill_color = Color::WHITE; + let stroke_color = Color::BLACK; + + let fill = graphene_std::vector::style::Fill::solid(fill_color.to_gamma_srgb()); + responses.add(GraphOperationMessage::FillSet { layer, fill }); + + let stroke = graphene_std::vector::style::Stroke::new(Some(stroke_color.to_gamma_srgb()), DEFAULT_STROKE_WIDTH); + responses.add(GraphOperationMessage::StrokeSet { layer, stroke }); + + // Create new point ids and add those into the existing Vector path + let mut points_map = HashMap::new(); + for (point, position) in new_vector.point_domain.iter() { + let new_point_id = PointId::generate(); + points_map.insert(point, new_point_id); + let modification_type = VectorModificationType::InsertPoint { id: new_point_id, position }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + + // Create new segment ids and add the segments into the existing Vector path + let mut segments_map = HashMap::new(); + for (segment_id, bezier, start, end) in new_vector.segment_bezier_iter() { + let new_segment_id = SegmentId::generate(); + + segments_map.insert(segment_id, new_segment_id); + + let handles = match bezier.handles { + BezierHandles::Linear => [None, None], + BezierHandles::Quadratic { handle } => [Some(handle - bezier.start), None], + BezierHandles::Cubic { handle_start, handle_end } => [Some(handle_start - bezier.start), Some(handle_end - bezier.end)], + }; + + let points = [points_map[&start], points_map[&end]]; + let modification_type = VectorModificationType::InsertSegment { id: new_segment_id, points, handles }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + + // Set G1 continuity + for handles in new_vector.colinear_manipulators { + let to_new_handle = |handle: HandleId| -> HandleId { + HandleId { + ty: handle.ty, + segment: segments_map[&handle.segment], + } + }; + let new_handles = [to_new_handle(handles[0]), to_new_handle(handles[1])]; + let modification_type = VectorModificationType::SetG1Continuous { handles: new_handles, enabled: true }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + } + + responses.add(NodeGraphMessage::RunDocumentGraph); + responses.add(Message::Defer(DeferMessage::AfterGraphRun { + messages: vec![PortfolioMessage::CenterPastedLayers { layers }.into()], + })); + } + } PortfolioMessage::CenterPastedLayers { layers } => { if let Some(document) = self.active_document_mut() { let viewport_bounds_quad_pixels = Quad::from_box([DVec2::ZERO, ipp.viewport_bounds.size()]); @@ -688,7 +805,7 @@ impl MessageHandler> for Portfolio if create_document { responses.add(PortfolioMessage::NewDocumentWithName { - name: name.clone().unwrap_or("Untitled Document".into()), + name: name.clone().unwrap_or(DEFAULT_DOCUMENT_NAME.into()), }); } @@ -701,13 +818,12 @@ impl MessageHandler> for Portfolio if create_document { // Wait for the document to be rendered so the click targets can be calculated in order to determine the artboard size that will encompass the pasted image - responses.add(Message::StartBuffer); - responses.add(DocumentMessage::WrapContentInArtboard { place_artboard_at_origin: true }); - - // TODO: Figure out how to get StartBuffer to work here so we can delete this and use `DocumentMessage::ZoomCanvasToFitAll` instead - // Currently, it is necessary to use `FrontendMessage::TriggerDelayedZoomCanvasToFitAll` rather than `DocumentMessage::ZoomCanvasToFitAll` because the size of the viewport is not yet populated - responses.add(Message::StartBuffer); - responses.add(FrontendMessage::TriggerDelayedZoomCanvasToFitAll); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![DocumentMessage::WrapContentInArtboard { place_artboard_at_origin: true }.into()], + }); + responses.add(DeferMessage::AfterNavigationReady { + messages: vec![DocumentMessage::ZoomCanvasToFitAll.into()], + }); } } PortfolioMessage::PasteSvg { @@ -720,7 +836,7 @@ impl MessageHandler> for Portfolio if create_document { responses.add(PortfolioMessage::NewDocumentWithName { - name: name.clone().unwrap_or("Untitled Document".into()), + name: name.clone().unwrap_or(DEFAULT_DOCUMENT_NAME.into()), }); } @@ -733,13 +849,13 @@ impl MessageHandler> for Portfolio if create_document { // Wait for the document to be rendered so the click targets can be calculated in order to determine the artboard size that will encompass the pasted image - responses.add(Message::StartBuffer); - responses.add(DocumentMessage::WrapContentInArtboard { place_artboard_at_origin: true }); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![DocumentMessage::WrapContentInArtboard { place_artboard_at_origin: true }.into()], + }); - // TODO: Figure out how to get StartBuffer to work here so we can delete this and use `DocumentMessage::ZoomCanvasToFitAll` instead - // Currently, it is necessary to use `FrontendMessage::TriggerDelayedZoomCanvasToFitAll` rather than `DocumentMessage::ZoomCanvasToFitAll` because the size of the viewport is not yet populated - responses.add(Message::StartBuffer); - responses.add(FrontendMessage::TriggerDelayedZoomCanvasToFitAll); + responses.add(DeferMessage::AfterNavigationReady { + messages: vec![DocumentMessage::ZoomCanvasToFitAll.into()], + }); } } PortfolioMessage::PrevDocument => { @@ -782,8 +898,8 @@ impl MessageHandler> for Portfolio responses.add(ToolMessage::InitTools); responses.add(NodeGraphMessage::Init); responses.add(OverlaysMessage::Draw); - responses.add(BroadcastEvent::ToolAbort); - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::ToolAbort); + responses.add(EventMessage::SelectionChanged); responses.add(NavigationMessage::CanvasPan { delta: (0., 0.).into() }); responses.add(NodeGraphMessage::RunDocumentGraph); responses.add(DocumentMessage::GraphViewOverlay { open: node_graph_open }); @@ -807,7 +923,7 @@ impl MessageHandler> for Portfolio } } PortfolioMessage::SubmitDocumentExport { - file_name, + name, file_type, scale_factor, bounds, @@ -815,14 +931,14 @@ impl MessageHandler> for Portfolio } => { let document = self.active_document_id.and_then(|id| self.documents.get_mut(&id)).expect("Tried to render non-existent document"); let export_config = ExportConfig { - file_name, + name, file_type, scale_factor, bounds, transparent_background, ..Default::default() }; - let result = self.executor.submit_document_export(document, export_config); + let result = self.executor.submit_document_export(document, self.active_document_id.unwrap(), export_config); if let Err(description) = result { responses.add(DialogMessage::DisplayDialogError { @@ -837,20 +953,76 @@ impl MessageHandler> for Portfolio } } PortfolioMessage::SubmitGraphRender { document_id, ignore_hash } => { - let inspect_node = self.inspect_node_id(); + let node_to_inspect = self.node_to_inspect(); let result = self.executor.submit_node_graph_evaluation( self.documents.get_mut(&document_id).expect("Tried to render non-existent document"), + document_id, ipp.viewport_bounds.size().as_uvec2(), timing_information, - inspect_node, + node_to_inspect, ignore_hash, ); - if let Err(description) = result { - responses.add(DialogMessage::DisplayDialogError { - title: "Unable to update node graph".to_string(), - description, + match result { + Err(description) => { + responses.add(DialogMessage::DisplayDialogError { + title: "Unable to update node graph".to_string(), + description, + }); + } + Ok(message) => responses.add_front(message), + } + } + PortfolioMessage::ToggleDataPanelOpen => { + self.data_panel_open = !self.data_panel_open; + responses.add(MenuBarMessage::SendLayout); + + // Run the graph to grab the data + if self.data_panel_open { + // When opening, we make the frontend show the panel first so it can start receiving its message subscriptions for the data it will display + responses.add(FrontendMessage::UpdateDataPanelState { open: self.data_panel_open }); + + responses.add(NodeGraphMessage::RunDocumentGraph); + } else { + // If we don't clear the panel, the layout diffing system will assume widgets still exist when it attempts to update the data panel next time it is opened + responses.add(DataPanelMessage::ClearLayout); + + // When closing, we make the frontend hide the panel last so it can finish receiving its message subscriptions before it is destroyed + responses.add(FrontendMessage::UpdateDataPanelState { open: self.data_panel_open }); + } + } + PortfolioMessage::TogglePropertiesPanelOpen => { + self.properties_panel_open = !self.properties_panel_open; + responses.add(MenuBarMessage::SendLayout); + + responses.add(FrontendMessage::UpdatePropertiesPanelState { open: self.properties_panel_open }); + + // Run the graph to grab the data + if self.properties_panel_open { + responses.add(NodeGraphMessage::RunDocumentGraph); + } + + responses.add(PropertiesPanelMessage::Refresh); + } + PortfolioMessage::ToggleLayersPanelOpen => { + self.layers_panel_open = !self.layers_panel_open; + responses.add(MenuBarMessage::SendLayout); + + // Run the graph to grab the data + if self.layers_panel_open { + // When opening, we make the frontend show the panel first so it can start receiving its message subscriptions for the data it will display + responses.add(FrontendMessage::UpdateLayersPanelState { open: self.layers_panel_open }); + + responses.add(NodeGraphMessage::RunDocumentGraph); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![NodeGraphMessage::UpdateLayerPanel.into(), DocumentMessage::DocumentStructureChanged.into()], }); + } else { + // If we don't clear the panel, the layout diffing system will assume widgets still exist when it attempts to update the layers panel next time it is opened + responses.add(DocumentMessage::ClearLayersPanel); + + // When closing, we make the frontend hide the panel last so it can finish receiving its message subscriptions before it is destroyed + responses.add(FrontendMessage::UpdateLayersPanelState { open: self.layers_panel_open }); } } PortfolioMessage::ToggleRulers => { @@ -883,6 +1055,8 @@ impl MessageHandler> for Portfolio responses.add(FrontendMessage::UpdateOpenDocumentsList { open_documents }); } PortfolioMessage::UpdateVelloPreference => { + let active = if cfg!(target_family = "wasm") { false } else { preferences.use_vello }; + responses.add(FrontendMessage::UpdateViewportHolePunch { active }); responses.add(NodeGraphMessage::RunDocumentGraph); self.persistent_data.use_vello = preferences.use_vello; } @@ -900,6 +1074,7 @@ impl MessageHandler> for Portfolio PasteIntoFolder, PrevDocument, ToggleRulers, + ToggleDataPanelOpen, ); // Extend with actions that require an active document @@ -969,19 +1144,19 @@ impl PortfolioMessageHandler { } } - fn load_document(&mut self, new_document: DocumentMessageHandler, document_id: DocumentId, responses: &mut VecDeque, to_front: bool) { + fn load_document(&mut self, mut new_document: DocumentMessageHandler, document_id: DocumentId, layers_panel_open: bool, responses: &mut VecDeque, to_front: bool) { if to_front { self.document_ids.push_front(document_id); } else { self.document_ids.push_back(document_id); } - new_document.update_layers_panel_control_bar_widgets(responses); - new_document.update_layers_panel_bottom_bar_widgets(responses); + new_document.update_layers_panel_control_bar_widgets(layers_panel_open, responses); + new_document.update_layers_panel_bottom_bar_widgets(layers_panel_open, responses); self.documents.insert(document_id, new_document); if self.active_document().is_some() { - responses.add(BroadcastEvent::ToolAbort); + responses.add(EventMessage::ToolAbort); responses.add(ToolMessage::DeactivateTools); } else { // Load the default font upon creating the first document @@ -1019,25 +1194,22 @@ impl PortfolioMessageHandler { /text>"# // It's a mystery why the `/text>` tag above needs to be missing its `<`, but when it exists it prints the `<` character in the text. However this works with it removed. .to_string(); - responses.add(Message::EndBuffer { - render_metadata: graphene_std::renderer::RenderMetadata::default(), - }); responses.add(FrontendMessage::UpdateDocumentArtwork { svg: error }); } result } - /// Get the id of the node that should be used as the target for the spreadsheet - pub fn inspect_node_id(&self) -> Option { - // Spreadsheet not open, skipping - if !self.spreadsheet.spreadsheet_view_open { + /// Get the ID of the selected node that should be used as the current source for the Data panel. + pub fn node_to_inspect(&self) -> Option { + // Skip if the Data panel is not open + if !self.data_panel_open { return None; } let document = self.documents.get(&self.active_document_id?)?; let selected_nodes = document.network_interface.selected_nodes().0; - // Selected nodes != 1, skipping + // Skip if there is not exactly one selected node if selected_nodes.len() != 1 { return None; } diff --git a/editor/src/messages/portfolio/spreadsheet/mod.rs b/editor/src/messages/portfolio/spreadsheet/mod.rs deleted file mode 100644 index 1523ea0d2c..0000000000 --- a/editor/src/messages/portfolio/spreadsheet/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod spreadsheet_message; -mod spreadsheet_message_handler; - -#[doc(inline)] -pub use spreadsheet_message::*; -#[doc(inline)] -pub use spreadsheet_message_handler::*; diff --git a/editor/src/messages/portfolio/utility_types.rs b/editor/src/messages/portfolio/utility_types.rs index fb0b2e4b4d..3edc26d9e0 100644 --- a/editor/src/messages/portfolio/utility_types.rs +++ b/editor/src/messages/portfolio/utility_types.rs @@ -43,7 +43,7 @@ pub enum PanelType { Document, Layers, Properties, - Spreadsheet, + DataPanel, } impl From for PanelType { @@ -52,8 +52,8 @@ impl From for PanelType { "Document" => PanelType::Document, "Layers" => PanelType::Layers, "Properties" => PanelType::Properties, - "Spreadsheet" => PanelType::Spreadsheet, - _ => panic!("Unknown panel type: {}", value), + "Data" => PanelType::DataPanel, + _ => panic!("Unknown panel type: {value}"), } } } diff --git a/editor/src/messages/preferences/preferences_message_handler.rs b/editor/src/messages/preferences/preferences_message_handler.rs index a79ad379b2..214903b9b9 100644 --- a/editor/src/messages/preferences/preferences_message_handler.rs +++ b/editor/src/messages/preferences/preferences_message_handler.rs @@ -62,7 +62,7 @@ impl MessageHandler for PreferencesMessageHandler { } PreferencesMessage::ResetToDefaults => { refresh_dialog(responses); - responses.add(KeyMappingMessage::ModifyMapping(MappingVariant::Default)); + responses.add(KeyMappingMessage::ModifyMapping { mapping: MappingVariant::Default }); *self = Self::default() } @@ -80,7 +80,7 @@ impl MessageHandler for PreferencesMessageHandler { self.zoom_with_scroll = zoom_with_scroll; let variant = if zoom_with_scroll { MappingVariant::ZoomWithScroll } else { MappingVariant::Default }; - responses.add(KeyMappingMessage::ModifyMapping(variant)); + responses.add(KeyMappingMessage::ModifyMapping { mapping: variant }); } PreferencesMessage::SelectionMode { selection_mode } => { self.selection_mode = selection_mode; diff --git a/editor/src/messages/prelude.rs b/editor/src/messages/prelude.rs index 72a6cb9ba7..7a696f9ede 100644 --- a/editor/src/messages/prelude.rs +++ b/editor/src/messages/prelude.rs @@ -1,10 +1,14 @@ -// Root -pub use crate::utility_traits::{ActionList, AsMessage, HierarchicalTree, MessageHandler, ToDiscriminant, TransitiveChild}; +// Message-related +pub use crate::utility_traits::{ActionList, AsMessage, ExtractField, HierarchicalTree, MessageHandler, ToDiscriminant, TransitiveChild}; pub use crate::utility_types::{DebugMessageTree, MessageData}; + // Message, MessageData, MessageDiscriminant, MessageHandler pub use crate::messages::animation::{AnimationMessage, AnimationMessageDiscriminant, AnimationMessageHandler}; +pub use crate::messages::app_window::{AppWindowMessage, AppWindowMessageDiscriminant, AppWindowMessageHandler}; +pub use crate::messages::broadcast::event::{EventMessage, EventMessageContext, EventMessageDiscriminant, EventMessageHandler}; pub use crate::messages::broadcast::{BroadcastMessage, BroadcastMessageDiscriminant, BroadcastMessageHandler}; pub use crate::messages::debug::{DebugMessage, DebugMessageDiscriminant, DebugMessageHandler}; +pub use crate::messages::defer::{DeferMessage, DeferMessageDiscriminant, DeferMessageHandler}; pub use crate::messages::dialog::export_dialog::{ExportDialogMessage, ExportDialogMessageContext, ExportDialogMessageDiscriminant, ExportDialogMessageHandler}; pub use crate::messages::dialog::new_document_dialog::{NewDocumentDialogMessage, NewDocumentDialogMessageDiscriminant, NewDocumentDialogMessageHandler}; pub use crate::messages::dialog::preferences_dialog::{PreferencesDialogMessage, PreferencesDialogMessageContext, PreferencesDialogMessageDiscriminant, PreferencesDialogMessageHandler}; @@ -15,6 +19,7 @@ pub use crate::messages::input_mapper::key_mapping::{KeyMappingMessage, KeyMappi pub use crate::messages::input_mapper::{InputMapperMessage, InputMapperMessageContext, InputMapperMessageDiscriminant, InputMapperMessageHandler}; pub use crate::messages::input_preprocessor::{InputPreprocessorMessage, InputPreprocessorMessageContext, InputPreprocessorMessageDiscriminant, InputPreprocessorMessageHandler}; pub use crate::messages::layout::{LayoutMessage, LayoutMessageDiscriminant, LayoutMessageHandler}; +pub use crate::messages::portfolio::document::data_panel::{DataPanelMessage, DataPanelMessageDiscriminant}; pub use crate::messages::portfolio::document::graph_operation::{GraphOperationMessage, GraphOperationMessageContext, GraphOperationMessageDiscriminant, GraphOperationMessageHandler}; pub use crate::messages::portfolio::document::navigation::{NavigationMessage, NavigationMessageContext, NavigationMessageDiscriminant, NavigationMessageHandler}; pub use crate::messages::portfolio::document::node_graph::{NodeGraphMessage, NodeGraphMessageDiscriminant, NodeGraphMessageHandler}; @@ -22,15 +27,12 @@ pub use crate::messages::portfolio::document::overlays::{OverlaysMessage, Overla pub use crate::messages::portfolio::document::properties_panel::{PropertiesPanelMessage, PropertiesPanelMessageDiscriminant, PropertiesPanelMessageHandler}; pub use crate::messages::portfolio::document::{DocumentMessage, DocumentMessageContext, DocumentMessageDiscriminant, DocumentMessageHandler}; pub use crate::messages::portfolio::menu_bar::{MenuBarMessage, MenuBarMessageDiscriminant, MenuBarMessageHandler}; -pub use crate::messages::portfolio::spreadsheet::{SpreadsheetMessage, SpreadsheetMessageDiscriminant}; pub use crate::messages::portfolio::{PortfolioMessage, PortfolioMessageContext, PortfolioMessageDiscriminant, PortfolioMessageHandler}; pub use crate::messages::preferences::{PreferencesMessage, PreferencesMessageDiscriminant, PreferencesMessageHandler}; pub use crate::messages::tool::transform_layer::{TransformLayerMessage, TransformLayerMessageDiscriminant, TransformLayerMessageHandler}; pub use crate::messages::tool::{ToolMessage, ToolMessageContext, ToolMessageDiscriminant, ToolMessageHandler}; -pub use crate::messages::workspace::{WorkspaceMessage, WorkspaceMessageDiscriminant, WorkspaceMessageHandler}; // Message, MessageDiscriminant -pub use crate::messages::broadcast::broadcast_event::{BroadcastEvent, BroadcastEventDiscriminant}; pub use crate::messages::message::{Message, MessageDiscriminant}; pub use crate::messages::tool::tool_messages::artboard_tool::{ArtboardToolMessage, ArtboardToolMessageDiscriminant}; pub use crate::messages::tool::tool_messages::brush_tool::{BrushToolMessage, BrushToolMessageDiscriminant}; @@ -46,7 +48,7 @@ pub use crate::messages::tool::tool_messages::shape_tool::{ShapeToolMessage, Sha pub use crate::messages::tool::tool_messages::spline_tool::{SplineToolMessage, SplineToolMessageDiscriminant}; pub use crate::messages::tool::tool_messages::text_tool::{TextToolMessage, TextToolMessageDiscriminant}; -// Helper +// Helper/miscellaneous pub use crate::messages::globals::global_variables::*; pub use crate::messages::portfolio::document::utility_types::misc::DocumentId; pub use graphite_proc_macros::*; @@ -65,10 +67,12 @@ pub trait Responses { } impl Responses for VecDeque { + #[inline(always)] fn add(&mut self, message: impl Into) { self.push_back(message.into()); } + #[inline(always)] fn add_front(&mut self, message: impl Into) { self.push_front(message.into()); } diff --git a/editor/src/messages/tool/common_functionality/auto_panning.rs b/editor/src/messages/tool/common_functionality/auto_panning.rs index a13f6706e0..0ba5346c8a 100644 --- a/editor/src/messages/tool/common_functionality/auto_panning.rs +++ b/editor/src/messages/tool/common_functionality/auto_panning.rs @@ -14,7 +14,7 @@ impl AutoPanning { for message in messages { responses.add(BroadcastMessage::SubscribeEvent { - on: BroadcastEvent::AnimationFrame, + on: EventMessage::AnimationFrame, send: Box::new(message.clone()), }); } @@ -27,8 +27,8 @@ impl AutoPanning { for message in messages { responses.add(BroadcastMessage::UnsubscribeEvent { - on: BroadcastEvent::AnimationFrame, - message: Box::new(message.clone()), + on: EventMessage::AnimationFrame, + send: Box::new(message.clone()), }); } } diff --git a/editor/src/messages/tool/common_functionality/gizmos/gizmo_manager.rs b/editor/src/messages/tool/common_functionality/gizmos/gizmo_manager.rs index 703c85e14d..57cbb4ed33 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/gizmo_manager.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/gizmo_manager.rs @@ -1,9 +1,12 @@ +use crate::messages::frontend::utility_types::MouseCursorIcon; use crate::messages::message::Message; use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::prelude::{DocumentMessageHandler, InputPreprocessorMessageHandler}; use crate::messages::tool::common_functionality::graph_modification_utils; use crate::messages::tool::common_functionality::shape_editor::ShapeState; +use crate::messages::tool::common_functionality::shapes::arc_shape::ArcGizmoHandler; +use crate::messages::tool::common_functionality::shapes::circle_shape::CircleGizmoHandler; use crate::messages::tool::common_functionality::shapes::polygon_shape::PolygonGizmoHandler; use crate::messages::tool::common_functionality::shapes::shape_utility::ShapeGizmoHandler; use crate::messages::tool::common_functionality::shapes::star_shape::StarGizmoHandler; @@ -23,6 +26,8 @@ pub enum ShapeGizmoHandlers { None, Star(StarGizmoHandler), Polygon(PolygonGizmoHandler), + Arc(ArcGizmoHandler), + Circle(CircleGizmoHandler), } impl ShapeGizmoHandlers { @@ -32,6 +37,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(_) => "star", Self::Polygon(_) => "polygon", + Self::Arc(_) => "arc", + Self::Circle(_) => "circle", Self::None => "none", } } @@ -41,6 +48,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.handle_state(layer, mouse_position, document, responses), Self::Polygon(h) => h.handle_state(layer, mouse_position, document, responses), + Self::Arc(h) => h.handle_state(layer, mouse_position, document, responses), + Self::Circle(h) => h.handle_state(layer, mouse_position, document, responses), Self::None => {} } } @@ -50,6 +59,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.is_any_gizmo_hovered(), Self::Polygon(h) => h.is_any_gizmo_hovered(), + Self::Arc(h) => h.is_any_gizmo_hovered(), + Self::Circle(h) => h.is_any_gizmo_hovered(), Self::None => false, } } @@ -59,6 +70,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.handle_click(), Self::Polygon(h) => h.handle_click(), + Self::Arc(h) => h.handle_click(), + Self::Circle(h) => h.handle_click(), Self::None => {} } } @@ -68,6 +81,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.handle_update(drag_start, document, input, responses), Self::Polygon(h) => h.handle_update(drag_start, document, input, responses), + Self::Arc(h) => h.handle_update(drag_start, document, input, responses), + Self::Circle(h) => h.handle_update(drag_start, document, input, responses), Self::None => {} } } @@ -77,6 +92,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.cleanup(), Self::Polygon(h) => h.cleanup(), + Self::Arc(h) => h.cleanup(), + Self::Circle(h) => h.cleanup(), Self::None => {} } } @@ -94,6 +111,8 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.overlays(document, layer, input, shape_editor, mouse_position, overlay_context), Self::Polygon(h) => h.overlays(document, layer, input, shape_editor, mouse_position, overlay_context), + Self::Arc(h) => h.overlays(document, layer, input, shape_editor, mouse_position, overlay_context), + Self::Circle(h) => h.overlays(document, layer, input, shape_editor, mouse_position, overlay_context), Self::None => {} } } @@ -110,9 +129,21 @@ impl ShapeGizmoHandlers { match self { Self::Star(h) => h.dragging_overlays(document, input, shape_editor, mouse_position, overlay_context), Self::Polygon(h) => h.dragging_overlays(document, input, shape_editor, mouse_position, overlay_context), + Self::Arc(h) => h.dragging_overlays(document, input, shape_editor, mouse_position, overlay_context), + Self::Circle(h) => h.dragging_overlays(document, input, shape_editor, mouse_position, overlay_context), Self::None => {} } } + + pub fn gizmo_cursor_icon(&self) -> Option { + match self { + Self::Star(h) => h.mouse_cursor_icon(), + Self::Polygon(h) => h.mouse_cursor_icon(), + Self::Arc(h) => h.mouse_cursor_icon(), + Self::Circle(h) => h.mouse_cursor_icon(), + Self::None => None, + } + } } /// Central manager that coordinates shape gizmo handlers for interactive editing on the canvas. @@ -141,11 +172,18 @@ impl GizmoManager { if graph_modification_utils::get_star_id(layer, &document.network_interface).is_some() { return Some(ShapeGizmoHandlers::Star(StarGizmoHandler::default())); } - // Polygon if graph_modification_utils::get_polygon_id(layer, &document.network_interface).is_some() { return Some(ShapeGizmoHandlers::Polygon(PolygonGizmoHandler::default())); } + // Arc + if graph_modification_utils::get_arc_id(layer, &document.network_interface).is_some() { + return Some(ShapeGizmoHandlers::Arc(ArcGizmoHandler::new())); + } + // Circle + if graph_modification_utils::get_circle_id(layer, &document.network_interface).is_some() { + return Some(ShapeGizmoHandlers::Circle(CircleGizmoHandler::default())); + } None } @@ -243,4 +281,12 @@ impl GizmoManager { } } } + + /// Returns the cursor icon to display when hovering or dragging a gizmo. + /// + /// If a gizmo is active (hovered or being manipulated), it returns the cursor icon associated with that gizmo; + /// otherwise, returns `None` to indicate the default crosshair cursor should be used. + pub fn mouse_cursor_icon(&self) -> Option { + self.active_shape_handler.as_ref().and_then(|h| h.gizmo_cursor_icon()) + } } diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs new file mode 100644 index 0000000000..2cbf1c4509 --- /dev/null +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs @@ -0,0 +1,177 @@ +use crate::consts::GIZMO_HIDE_THRESHOLD; +use crate::messages::frontend::utility_types::MouseCursorIcon; +use crate::messages::message::Message; +use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; +use crate::messages::portfolio::document::utility_types::network_interface::InputConnector; +use crate::messages::prelude::{DocumentMessageHandler, InputPreprocessorMessageHandler, NodeGraphMessage}; +use crate::messages::prelude::{FrontendMessage, Responses}; +use crate::messages::tool::common_functionality::graph_modification_utils::{self, get_arc_id, get_stroke_width}; +use crate::messages::tool::common_functionality::shapes::shape_utility::{extract_arc_parameters, extract_circle_radius}; +use glam::{DAffine2, DVec2}; +use graph_craft::document::NodeInput; +use graph_craft::document::value::TaggedValue; +use std::collections::VecDeque; +use std::f64::consts::FRAC_PI_2; + +#[derive(Clone, Debug, Default, PartialEq)] +pub enum RadiusHandleState { + #[default] + Inactive, + Hover, + Dragging, +} + +#[derive(Clone, Debug, Default, PartialEq)] +pub struct RadiusHandle { + pub layer: Option, + initial_radius: f64, + handle_state: RadiusHandleState, + angle: f64, + previous_mouse_position: DVec2, +} + +impl RadiusHandle { + pub fn cleanup(&mut self) { + self.handle_state = RadiusHandleState::Inactive; + self.layer = None; + } + + pub fn hovered(&self) -> bool { + self.handle_state == RadiusHandleState::Hover + } + + pub fn is_dragging(&self) -> bool { + self.handle_state == RadiusHandleState::Dragging + } + + pub fn update_state(&mut self, state: RadiusHandleState) { + self.handle_state = state; + } + + pub fn check_if_inside_dash_lines(angle: f64, mouse_position: DVec2, viewport: DAffine2, radius: f64, document: &DocumentMessageHandler, layer: LayerNodeIdentifier) -> bool { + let center = viewport.transform_point2(DVec2::ZERO); + if let Some(stroke_width) = get_stroke_width(layer, &document.network_interface) { + let circle_point = calculate_circle_point_position(angle, radius.abs()); + let direction = circle_point.normalize(); + let mouse_distance = mouse_position.distance(center); + + let spacing = Self::calculate_extra_spacing(viewport, radius, center, stroke_width, 15.); + + let inner_point = viewport.transform_point2(circle_point - direction * spacing).distance(center); + let outer_point = viewport.transform_point2(circle_point + direction * spacing).distance(center); + + mouse_distance >= inner_point && mouse_distance <= outer_point + } else { + let point_position = viewport.transform_point2(calculate_circle_point_position(angle, radius.abs())); + mouse_position.distance(center) <= point_position.distance(center) + } + } + + fn calculate_extra_spacing(viewport: DAffine2, radius: f64, viewport_center: DVec2, stroke_width: f64, threshold: f64) -> f64 { + let start_point = viewport.transform_point2(calculate_circle_point_position(0., radius)).distance(viewport_center); + let end_point = viewport.transform_point2(calculate_circle_point_position(FRAC_PI_2, radius)).distance(viewport_center); + let min_radius = start_point.min(end_point); + let extra_spacing = if min_radius < threshold { 10. * (min_radius / threshold) } else { 10. }; + + stroke_width + extra_spacing + } + + pub fn handle_actions(&mut self, layer: LayerNodeIdentifier, document: &DocumentMessageHandler, mouse_position: DVec2, responses: &mut VecDeque) { + match &self.handle_state { + RadiusHandleState::Inactive => { + let Some(radius) = extract_circle_radius(layer, document).or(extract_arc_parameters(Some(layer), document).map(|(r, _, _, _)| r)) else { + return; + }; + let viewport = document.metadata().transform_to_viewport(layer); + let angle = viewport.inverse().transform_point2(mouse_position).angle_to(DVec2::X); + let point_position = viewport.transform_point2(calculate_circle_point_position(angle, radius.abs())); + let center = viewport.transform_point2(DVec2::ZERO); + + if point_position.distance(center) < GIZMO_HIDE_THRESHOLD { + return; + } + + if Self::check_if_inside_dash_lines(angle, mouse_position, viewport, radius.abs(), document, layer) { + self.layer = Some(layer); + self.initial_radius = radius; + self.previous_mouse_position = mouse_position; + self.angle = angle; + + self.update_state(RadiusHandleState::Hover); + + responses.add(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::EWResize }); + } + } + RadiusHandleState::Dragging | RadiusHandleState::Hover => {} + } + } + + pub fn overlays(&self, document: &DocumentMessageHandler, overlay_context: &mut OverlayContext) { + match &self.handle_state { + RadiusHandleState::Inactive => {} + RadiusHandleState::Dragging | RadiusHandleState::Hover => { + let Some(layer) = self.layer else { return }; + let Some(radius) = extract_circle_radius(layer, document).or(extract_arc_parameters(Some(layer), document).map(|(r, _, _, _)| r)) else { + return; + }; + let viewport = document.metadata().transform_to_viewport(layer); + let center = viewport.transform_point2(DVec2::ZERO); + + let x_point = viewport.transform_point2(calculate_circle_point_position(0., radius)); + let y_point = viewport.transform_point2(calculate_circle_point_position(FRAC_PI_2, radius)); + + let direction_x = viewport.transform_vector2(DVec2::X); + let direction_y = viewport.transform_vector2(-DVec2::Y); + + if let Some(stroke_width) = get_stroke_width(layer, &document.network_interface) { + let spacing = Self::calculate_extra_spacing(viewport, radius, center, stroke_width, 15.); + let smaller_radius_x = (x_point - direction_x * spacing).distance(center); + let smaller_radius_y = (y_point - direction_y * spacing).distance(center); + + let larger_radius_x = (x_point + direction_x * spacing).distance(center); + let larger_radius_y = (y_point + direction_y * spacing).distance(center); + + overlay_context.dashed_ellipse(center, smaller_radius_x, smaller_radius_y, None, None, None, None, None, None, Some(4.), Some(4.), Some(0.5)); + overlay_context.dashed_ellipse(center, larger_radius_x, larger_radius_y, None, None, None, None, None, None, Some(4.), Some(4.), Some(0.5)); + + return; + } + + let radius_x = x_point.distance(center); + let radius_y = y_point.distance(center); + overlay_context.dashed_ellipse(center, radius_x, radius_y, None, None, None, None, None, None, Some(4.), Some(4.), Some(0.5)); + } + } + } + + pub fn update_inner_radius(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque, drag_start: DVec2) { + let Some(layer) = self.layer else { return }; + let Some(node_id) = graph_modification_utils::get_circle_id(layer, &document.network_interface).or(get_arc_id(layer, &document.network_interface)) else { + return; + }; + let Some(current_radius) = extract_circle_radius(layer, document).or(extract_arc_parameters(Some(layer), document).map(|(r, _, _, _)| r)) else { + return; + }; + + let viewport_transform = document.network_interface.document_metadata().transform_to_viewport(layer); + let center = viewport_transform.transform_point2(DVec2::ZERO); + + let delta_vector = viewport_transform.inverse().transform_point2(input.mouse.position) - viewport_transform.inverse().transform_point2(self.previous_mouse_position); + let radius = drag_start - center; + let sign = radius.dot(delta_vector).signum(); + + let net_delta = delta_vector.length() * sign * self.initial_radius.signum(); + self.previous_mouse_position = input.mouse.position; + + responses.add(NodeGraphMessage::SetInput { + input_connector: InputConnector::node(node_id, 1), + input: NodeInput::value(TaggedValue::F64(current_radius + net_delta), false), + }); + responses.add(NodeGraphMessage::RunDocumentGraph); + } +} + +fn calculate_circle_point_position(theta: f64, radius: f64) -> DVec2 { + DVec2::new(radius * theta.cos(), -radius * theta.sin()) +} diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/mod.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/mod.rs index 2b88dddd5e..710584f471 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/mod.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/mod.rs @@ -1,2 +1,4 @@ +pub mod circle_arc_radius_handle; pub mod number_of_points_dial; pub mod point_radius_handle; +pub mod sweep_angle_gizmo; diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs index 3995a1f401..fa4dbe2ed8 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs @@ -189,8 +189,8 @@ impl NumberOfPointsDial { } pub fn update_number_of_sides(&self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque, drag_start: DVec2) { - let delta = input.mouse.position - document.metadata().document_to_viewport.transform_point2(drag_start); - let sign = (input.mouse.position.x - document.metadata().document_to_viewport.transform_point2(drag_start).x).signum(); + let delta = input.mouse.position - drag_start; + let sign = (input.mouse.position.x - drag_start.x).signum(); let net_delta = (delta.length() / 25.).round() * sign; let Some(layer) = self.layer else { return }; diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs index fc00e078cf..25516284bd 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/point_radius_handle.rs @@ -142,14 +142,7 @@ impl PointRadiusHandle { } } - pub fn overlays( - &self, - selected_star_layer: Option, - document: &DocumentMessageHandler, - input: &InputPreprocessorMessageHandler, - mouse_position: DVec2, - overlay_context: &mut OverlayContext, - ) { + pub fn overlays(&self, selected_star_layer: Option, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, overlay_context: &mut OverlayContext) { match &self.handle_state { PointRadiusHandleState::Inactive => { let Some(layer) = selected_star_layer else { return }; @@ -161,25 +154,12 @@ impl PointRadiusHandle { for i in 0..(2 * sides) { let point = star_vertex_position(viewport, i as i32, sides, radius1, radius2); let center = viewport.transform_point2(DVec2::ZERO); - let viewport_diagonal = input.viewport_bounds.size().length(); // If the user zooms out such that shape is very small hide the gizmo if point.distance(center) < GIZMO_HIDE_THRESHOLD { return; } - if point.distance(mouse_position) < 5. { - let Some(direction) = (point - center).try_normalize() else { continue }; - - overlay_context.manipulator_handle(point, true, None); - let angle = ((i as f64) * PI) / (sides as f64); - overlay_context.line(center, center + direction * viewport_diagonal, None, None); - - draw_snapping_ticks(&self.snap_radii, direction, viewport, angle, overlay_context); - - return; - } - overlay_context.manipulator_handle(point, false, None); } } @@ -191,22 +171,12 @@ impl PointRadiusHandle { for i in 0..sides { let point = polygon_vertex_position(viewport, i as i32, sides, radius); let center = viewport.transform_point2(DVec2::ZERO); - let viewport_diagonal = input.viewport_bounds.size().length(); // If the user zooms out such that shape is very small hide the gizmo if point.distance(center) < GIZMO_HIDE_THRESHOLD { return; } - if point.distance(mouse_position) < 5. { - let Some(direction) = (point - center).try_normalize() else { continue }; - - overlay_context.manipulator_handle(point, true, None); - overlay_context.line(center, center + direction * viewport_diagonal, None, None); - - return; - } - overlay_context.manipulator_handle(point, false, None); } } @@ -232,12 +202,9 @@ impl PointRadiusHandle { star_outline(Some(layer), document, overlay_context); // Make the ticks for snapping - - // If dragging to make radius negative don't show the - if (mouse_position - center).dot(direction) < 0. { - return; + if (radius1.signum() * radius2.signum()).is_sign_positive() { + draw_snapping_ticks(&self.snap_radii, direction, viewport, angle, overlay_context); } - draw_snapping_ticks(&self.snap_radii, direction, viewport, angle, overlay_context); return; } @@ -262,7 +229,6 @@ impl PointRadiusHandle { }; let viewport = document.metadata().transform_to_viewport(layer); - let center = viewport.transform_point2(DVec2::ZERO); match snapping_index { // Make a triangle with previous two points @@ -274,41 +240,57 @@ impl PointRadiusHandle { overlay_context.line(before_outer_position, outer_position, Some(COLOR_OVERLAY_RED), Some(3.)); overlay_context.line(outer_position, point_position, Some(COLOR_OVERLAY_RED), Some(3.)); + let before_outer_position = viewport.inverse().transform_point2(before_outer_position); + let outer_position = viewport.inverse().transform_point2(outer_position); + let point_position = viewport.inverse().transform_point2(point_position); + let l1 = (before_outer_position - outer_position).length() * 0.2; let Some(l1_direction) = (before_outer_position - outer_position).try_normalize() else { return }; let Some(l2_direction) = (point_position - outer_position).try_normalize() else { return }; - let Some(direction) = (center - outer_position).try_normalize() else { return }; + let Some(direction) = (-outer_position).try_normalize() else { return }; let new_point = SQRT_2 * l1 * direction + outer_position; let before_outer_position = l1 * l1_direction + outer_position; let point_position = l1 * l2_direction + outer_position; - overlay_context.line(before_outer_position, new_point, Some(COLOR_OVERLAY_RED), Some(3.)); - overlay_context.line(new_point, point_position, Some(COLOR_OVERLAY_RED), Some(3.)); + overlay_context.line( + viewport.transform_point2(before_outer_position), + viewport.transform_point2(new_point), + Some(COLOR_OVERLAY_RED), + Some(3.), + ); + overlay_context.line(viewport.transform_point2(new_point), viewport.transform_point2(point_position), Some(COLOR_OVERLAY_RED), Some(3.)); } 1 => { let before_outer_position = star_vertex_position(viewport, (self.point as i32) - 1, sides, radius1, radius2); - let after_point_position = star_vertex_position(viewport, (self.point as i32) + 1, sides, radius1, radius2); - let point_position = star_vertex_position(viewport, self.point as i32, sides, radius1, radius2); overlay_context.line(before_outer_position, point_position, Some(COLOR_OVERLAY_RED), Some(3.)); overlay_context.line(point_position, after_point_position, Some(COLOR_OVERLAY_RED), Some(3.)); + let before_outer_position = viewport.inverse().transform_point2(before_outer_position); + let after_point_position = viewport.inverse().transform_point2(after_point_position); + let point_position = viewport.inverse().transform_point2(point_position); + let l1 = (before_outer_position - point_position).length() * 0.2; let Some(l1_direction) = (before_outer_position - point_position).try_normalize() else { return }; let Some(l2_direction) = (after_point_position - point_position).try_normalize() else { return }; - let Some(direction) = (center - point_position).try_normalize() else { return }; + let Some(direction) = (-point_position).try_normalize() else { return }; let new_point = SQRT_2 * l1 * direction + point_position; let before_outer_position = l1 * l1_direction + point_position; let after_point_position = l1 * l2_direction + point_position; - overlay_context.line(before_outer_position, new_point, Some(COLOR_OVERLAY_RED), Some(3.)); - overlay_context.line(new_point, after_point_position, Some(COLOR_OVERLAY_RED), Some(3.)); + overlay_context.line( + viewport.transform_point2(before_outer_position), + viewport.transform_point2(new_point), + Some(COLOR_OVERLAY_RED), + Some(3.), + ); + overlay_context.line(viewport.transform_point2(new_point), viewport.transform_point2(after_point_position), Some(COLOR_OVERLAY_RED), Some(3.)); } i => { // Use `self.point` as absolute reference as it matches the index of vertices of the star starting from 0 @@ -353,25 +335,36 @@ impl PointRadiusHandle { return snap_radii; }; - let other_index = if radius_index == 3 { 2 } else { 3 }; - - let Some(&TaggedValue::F64(other_radius)) = node_inputs[other_index].as_value() else { + let (Some(&TaggedValue::F64(radius_1)), Some(&TaggedValue::F64(radius_2))) = (node_inputs[2].as_value(), node_inputs[3].as_value()) else { return snap_radii; }; + + let other_radius = if radius_index == 3 { radius_1 } else { radius_2 }; + let Some(&TaggedValue::U32(sides)) = node_inputs[1].as_value() else { return snap_radii; }; + let both_radii_negative = radius_1.is_sign_negative() && radius_2.is_sign_negative(); + let both_radii_same_sign = (radius_1.signum() * radius_2.signum()).is_sign_positive(); + + // When only one of the radii is negative, no need for snapping + if !both_radii_same_sign { + return snap_radii; + } + + let sign = if both_radii_negative { -1. } else { 1. }; + // Inner radius for 90ยฐ let b = FRAC_PI_4 * 3. - PI / (sides as f64); let angle = b.sin(); - let required_radius = (other_radius / angle) * FRAC_1_SQRT_2; + let required_radius = (other_radius.abs() * sign / angle) * FRAC_1_SQRT_2; snap_radii.push(required_radius); // Also push the case when the when it length increases more than the other - let flipped = other_radius * angle * SQRT_2; + let flipped = other_radius.abs() * sign * angle * SQRT_2; snap_radii.push(flipped); @@ -386,11 +379,11 @@ impl PointRadiusHandle { break; } - if other_radius * factor > 1e-6 { - snap_radii.push(other_radius * factor); + if other_radius.abs() * factor > 1e-6 { + snap_radii.push(other_radius.abs() * sign * factor); } - snap_radii.push((other_radius * 1.) / factor); + snap_radii.push((other_radius.abs() * sign) / factor); } snap_radii @@ -426,21 +419,23 @@ impl PointRadiusHandle { }; let viewport_transform = document.network_interface.document_metadata().transform_to_viewport(layer); - let document_transform = document.network_interface.document_metadata().transform_to_document(layer); let center = viewport_transform.transform_point2(DVec2::ZERO); let radius_index = self.radius_index; let original_radius = self.initial_radius; - let delta = viewport_transform.inverse().transform_point2(input.mouse.position) - document_transform.inverse().transform_point2(drag_start); - let radius = document.metadata().document_to_viewport.transform_point2(drag_start) - center; + let delta = viewport_transform.inverse().transform_point2(input.mouse.position) - viewport_transform.inverse().transform_point2(drag_start); + let radius = drag_start - center; let projection = delta.project_onto(radius); let sign = radius.dot(delta).signum(); - let mut net_delta = projection.length() * sign; + let mut net_delta = projection.length() * sign * original_radius.signum(); let new_radius = original_radius + net_delta; self.update_state(PointRadiusHandleState::Dragging); + + self.check_if_radius_flipped(original_radius, new_radius, document, layer, radius_index); + if let Some((index, snapped_delta)) = self.check_snapping(new_radius, original_radius) { net_delta = snapped_delta; self.update_state(PointRadiusHandleState::Snapped(index)); @@ -452,4 +447,23 @@ impl PointRadiusHandle { }); responses.add(NodeGraphMessage::RunDocumentGraph); } + + fn check_if_radius_flipped(&mut self, original_radius: f64, new_radius: f64, document: &DocumentMessageHandler, layer: LayerNodeIdentifier, radius_index: usize) { + let Some(node_inputs) = NodeGraphLayer::new(layer, &document.network_interface).find_node_inputs("Star") else { + return; + }; + + let (Some(&TaggedValue::F64(radius_1)), Some(&TaggedValue::F64(radius_2))) = (node_inputs[2].as_value(), node_inputs[3].as_value()) else { + return; + }; + + let other_radius = if radius_index == 3 { radius_1 } else { radius_2 }; + + let flipped = (other_radius.is_sign_positive() && original_radius.is_sign_negative() && new_radius.is_sign_positive()) + || (other_radius.is_sign_negative() && original_radius.is_sign_positive() && new_radius.is_sign_negative()); + + if flipped { + self.snap_radii = Self::calculate_snap_radii(document, layer, radius_index); + } + } } diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs new file mode 100644 index 0000000000..68d69d9eba --- /dev/null +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs @@ -0,0 +1,365 @@ +use crate::consts::{ARC_SNAP_THRESHOLD, GIZMO_HIDE_THRESHOLD}; +use crate::messages::message::Message; +use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; +use crate::messages::portfolio::document::utility_types::network_interface::InputConnector; +use crate::messages::prelude::DocumentMessageHandler; +use crate::messages::tool::common_functionality::graph_modification_utils; +use crate::messages::tool::common_functionality::shapes::shape_utility::{arc_end_points, calculate_arc_text_transform, extract_arc_parameters, format_rounded}; +use crate::messages::tool::tool_messages::tool_prelude::*; +use glam::DVec2; +use graph_craft::document::value::TaggedValue; +use graph_craft::document::{NodeId, NodeInput}; +use std::collections::VecDeque; +use std::f64::consts::FRAC_PI_4; + +#[derive(Clone, Debug, Default, PartialEq)] +pub enum SweepAngleGizmoState { + #[default] + Inactive, + Hover, + Dragging, + Snapped, +} + +#[derive(Clone, Debug, Default, PartialEq)] +pub enum EndpointType { + #[default] + None, + Start, + End, +} + +#[derive(Clone, Debug, Default)] +pub struct SweepAngleGizmo { + pub layer: Option, + endpoint: EndpointType, + initial_start_angle: f64, + initial_sweep_angle: f64, + position_before_rotation: DVec2, + previous_mouse_position: DVec2, + total_angle_delta: f64, + snap_angles: Vec, + handle_state: SweepAngleGizmoState, +} + +impl SweepAngleGizmo { + pub fn hovered(&self) -> bool { + self.handle_state == SweepAngleGizmoState::Hover + } + + pub fn update_state(&mut self, state: SweepAngleGizmoState) { + self.handle_state = state; + } + + pub fn is_dragging_or_snapped(&self) -> bool { + self.handle_state == SweepAngleGizmoState::Dragging || self.handle_state == SweepAngleGizmoState::Snapped + } + + pub fn handle_actions(&mut self, layer: LayerNodeIdentifier, document: &DocumentMessageHandler, mouse_position: DVec2) { + if self.handle_state == SweepAngleGizmoState::Inactive { + let Some((start, end)) = arc_end_points(Some(layer), document) else { return }; + let Some((_, start_angle, sweep_angle, _)) = extract_arc_parameters(Some(layer), document) else { + return; + }; + + let center = document.metadata().transform_to_viewport(layer).transform_point2(DVec2::ZERO); + + if center.distance(start) < GIZMO_HIDE_THRESHOLD { + return; + } + + let (close_to_gizmo, endpoint_type) = if mouse_position.distance(start) < 5. { + (true, EndpointType::Start) + } else if mouse_position.distance(end) < 5. { + (true, EndpointType::End) + } else { + (false, EndpointType::None) + }; + + if close_to_gizmo { + self.layer = Some(layer); + self.initial_start_angle = start_angle; + self.initial_sweep_angle = sweep_angle; + self.previous_mouse_position = mouse_position; + self.total_angle_delta = 0.; + self.position_before_rotation = if endpoint_type == EndpointType::End { end } else { start }; + self.endpoint = endpoint_type; + self.snap_angles = Self::calculate_snap_angles(); + + self.update_state(SweepAngleGizmoState::Hover); + } + } + } + + pub fn overlays( + &self, + selected_arc_layer: Option, + document: &DocumentMessageHandler, + _input: &InputPreprocessorMessageHandler, + _mouse_position: DVec2, + overlay_context: &mut OverlayContext, + ) { + let tilt_offset = document.document_ptz.unmodified_tilt(); + + match self.handle_state { + SweepAngleGizmoState::Inactive => { + let Some((point1, point2)) = arc_end_points(selected_arc_layer, document) else { return }; + overlay_context.manipulator_handle(point1, false, None); + overlay_context.manipulator_handle(point2, false, None); + } + SweepAngleGizmoState::Hover => { + // Highlight the currently hovered endpoint only + let Some((point1, point2)) = arc_end_points(self.layer, document) else { return }; + + let (point, other_point) = if self.endpoint == EndpointType::Start { (point1, point2) } else { (point2, point1) }; + overlay_context.manipulator_handle(point, true, None); + overlay_context.manipulator_handle(other_point, false, None); + } + SweepAngleGizmoState::Dragging => { + // Show snapping guides and angle arc while dragging + let Some(layer) = self.layer else { return }; + let Some((current_start, current_end)) = arc_end_points(self.layer, document) else { return }; + let viewport = document.metadata().transform_to_viewport(layer); + + // Depending on which endpoint is being dragged, draw guides relative to the static point + let (point, other_point) = if self.endpoint == EndpointType::End { + (current_end, current_start) + } else { + (current_start, current_end) + }; + + // Draw the dashed line from center to drag start position + overlay_context.dashed_line(self.position_before_rotation, viewport.transform_point2(DVec2::ZERO), None, None, Some(5.), Some(5.), Some(0.5)); + + overlay_context.manipulator_handle(other_point, false, None); + + // Draw the angle, text and the bold line + self.dragging_snapping_overlays(self.position_before_rotation, point, tilt_offset, viewport, overlay_context); + } + SweepAngleGizmoState::Snapped => { + // When snapping is active, draw snapping arcs and angular guidelines + let Some((start, end)) = arc_end_points(self.layer, document) else { return }; + let Some(layer) = self.layer else { return }; + let viewport = document.metadata().transform_to_viewport(layer); + let center = viewport.transform_point2(DVec2::ZERO); + + // Draw snapping arc and angle overlays between the two points + let (a, b) = if self.endpoint == EndpointType::Start { (end, start) } else { (start, end) }; + self.dragging_snapping_overlays(a, b, tilt_offset, viewport, overlay_context); + + // Draw lines from endpoints to the arc center + overlay_context.line(start, center, None, Some(2.)); + overlay_context.line(end, center, None, Some(2.)); + + // Draw the line from drag start to arc center + overlay_context.dashed_line(self.position_before_rotation, center, None, None, Some(5.), Some(5.), Some(0.5)); + } + } + } + + /// Draws the visual overlay during arc handle dragging or snapping interactions. + /// This includes the dynamic arc sweep, angle label, and visual guides centered around the arc's origin. + pub fn dragging_snapping_overlays(&self, initial_point: DVec2, final_point: DVec2, tilt_offset: f64, viewport: DAffine2, overlay_context: &mut OverlayContext) { + let center = viewport.transform_point2(DVec2::ZERO); + let initial_vector = initial_point - center; + let final_vector = final_point - center; + let offset_angle = initial_vector.to_angle() + tilt_offset; + + let bold_radius = final_point.distance(center); + + let angle = initial_vector.angle_to(final_vector).to_degrees(); + let display_angle = viewport + .inverse() + .transform_point2(final_point) + .angle_to(viewport.inverse().transform_point2(initial_point)) + .to_degrees(); + + let text = format!("{}ยฐ", format_rounded(display_angle, 2)); + let text_texture_width = overlay_context.get_width(&text) / 2.; + + let transform = calculate_arc_text_transform(angle, offset_angle, center, text_texture_width); + + overlay_context.arc_sweep_angle(offset_angle, angle, final_point, bold_radius, center, &text, transform); + } + + pub fn update_arc(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { + let Some(layer) = self.layer else { return }; + let Some((_, current_start_angle, current_sweep_angle, _)) = extract_arc_parameters(Some(layer), document) else { + return; + }; + + let viewport = document.metadata().transform_to_viewport(layer); + let angle_delta = viewport + .inverse() + .transform_point2(self.previous_mouse_position) + .angle_to(viewport.inverse().transform_point2(input.mouse.position)) + .to_degrees(); + let angle = self.total_angle_delta + angle_delta; + + let Some(node_id) = graph_modification_utils::get_arc_id(layer, &document.network_interface) else { + return; + }; + + self.update_state(SweepAngleGizmoState::Dragging); + + match self.endpoint { + EndpointType::Start => { + // Dragging start changes both start and sweep + + let sign = -angle.signum(); + let mut total = angle; + + let new_start_angle = self.initial_start_angle + total; + let new_sweep_angle = self.initial_sweep_angle + total.abs() * sign; + + match () { + // Clamp sweep angle to 360ยฐ + () if new_sweep_angle > 360. => { + let wrapped = new_sweep_angle % 360.; + self.total_angle_delta = -wrapped; + + self.endpoint = EndpointType::End; + + self.initial_sweep_angle = 360.; + self.initial_start_angle = current_start_angle; + self.update_state(SweepAngleGizmoState::Snapped); + + self.apply_arc_update(node_id, self.initial_start_angle, self.initial_sweep_angle - wrapped, input, responses); + } + () if new_sweep_angle < 0. => { + let rest_angle = angle_delta + new_sweep_angle; + + self.total_angle_delta = new_sweep_angle.abs(); + self.endpoint = EndpointType::End; + + self.initial_sweep_angle = 0.; + self.initial_start_angle = current_start_angle + rest_angle; + + self.apply_arc_update(node_id, self.initial_start_angle, new_sweep_angle.abs(), input, responses); + } + // Wrap start angle > 180ยฐ back into [-180ยฐ, 180ยฐ] and adjust sweep + () if new_start_angle > 180. => { + let overflow = new_start_angle % 180.; + let rest_angle = angle_delta - overflow; + + // We wrap the angle back into [-180ยฐ, 180ยฐ] range by jumping from +180ยฐ to -180ยฐ + // Example: dragging past 190ยฐ becomes -170ยฐ, and we subtract the overshoot from sweep + // Sweep angle must shrink to maintain consistent arc + self.total_angle_delta = rest_angle; + self.initial_start_angle = -180.; + self.initial_sweep_angle = current_sweep_angle - rest_angle; + + self.apply_arc_update(node_id, self.initial_start_angle + overflow, self.initial_sweep_angle - overflow, input, responses); + } + // Wrap start angle < -180ยฐ back into [-180ยฐ, 180ยฐ] and adjust sweep + () if new_start_angle < -180. => { + let underflow = new_start_angle % 180.; + let rest_angle = angle_delta - underflow; + + // We wrap the angle back into [-180ยฐ, 180ยฐ] by jumping from -190ยฐ to +170ยฐ + // Sweep must grow to reflect continued clockwise drag past -180ยฐ + // Start angle flips from -190ยฐ to +170ยฐ, and sweep increases accordingly + self.total_angle_delta = underflow; + self.initial_start_angle = 180.; + self.initial_sweep_angle = current_sweep_angle + rest_angle.abs(); + + self.apply_arc_update(node_id, self.initial_start_angle + underflow, self.initial_sweep_angle + underflow.abs(), input, responses); + } + _ => { + if let Some(snapped_delta) = self.check_snapping(self.initial_sweep_angle + total.abs() * sign) { + total += snapped_delta; + self.update_state(SweepAngleGizmoState::Snapped); + } + + self.total_angle_delta = angle; + self.apply_arc_update(node_id, self.initial_start_angle + total, self.initial_sweep_angle + total.abs() * sign, input, responses); + } + } + } + EndpointType::End => { + // Dragging the end only changes sweep angle + + let mut total = angle; + let new_sweep_angle = self.initial_sweep_angle + angle; + + match () { + // Clamp sweep angle below 0ยฐ, switch to start + () if new_sweep_angle < 0. => { + let delta = angle_delta - current_sweep_angle; + let sign = -delta.signum(); + + self.initial_sweep_angle = 0.; + self.total_angle_delta = delta; + self.endpoint = EndpointType::Start; + + self.apply_arc_update(node_id, self.initial_start_angle + delta, self.initial_sweep_angle + delta.abs() * sign, input, responses); + } + // Clamp sweep angle above 360ยฐ, switch to start + () if new_sweep_angle > 360. => { + let delta = angle_delta - (360. - new_sweep_angle); + let sign = -delta.signum(); + + self.total_angle_delta = angle_delta - (360. - new_sweep_angle); + self.initial_sweep_angle = 360.; + self.endpoint = EndpointType::Start; + self.update_state(SweepAngleGizmoState::Snapped); + + self.apply_arc_update(node_id, self.initial_start_angle + angle_delta, self.initial_sweep_angle + angle_delta.abs() * sign, input, responses); + } + _ => { + if let Some(snapped_delta) = self.check_snapping(self.initial_sweep_angle + angle) { + total += snapped_delta; + self.update_state(SweepAngleGizmoState::Snapped); + } + + self.total_angle_delta = angle; + self.apply_arc_update(node_id, self.initial_start_angle, self.initial_sweep_angle + total, input, responses); + } + } + } + EndpointType::None => {} + } + } + + /// Applies the updated start and sweep angles to the arc. + fn apply_arc_update(&mut self, node_id: NodeId, start_angle: f64, sweep_angle: f64, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { + self.snap_angles = Self::calculate_snap_angles(); + + responses.add(NodeGraphMessage::SetInput { + input_connector: InputConnector::node(node_id, 2), + input: NodeInput::value(TaggedValue::F64(start_angle), false), + }); + responses.add(NodeGraphMessage::SetInput { + input_connector: InputConnector::node(node_id, 3), + input: NodeInput::value(TaggedValue::F64(sweep_angle), false), + }); + + self.previous_mouse_position = input.mouse.position; + responses.add(NodeGraphMessage::RunDocumentGraph); + } + + pub fn check_snapping(&self, new_sweep_angle: f64) -> Option { + self.snap_angles.iter().find(|angle| (**angle - new_sweep_angle).abs() <= ARC_SNAP_THRESHOLD).map(|angle| { + let delta = angle - new_sweep_angle; + if self.endpoint == EndpointType::End { delta } else { -delta } + }) + } + + pub fn calculate_snap_angles() -> Vec { + let mut snap_points = Vec::new(); + + for i in 0..=8 { + let snap_point = i as f64 * FRAC_PI_4; + snap_points.push(snap_point.to_degrees()); + } + + snap_points + } + + pub fn cleanup(&mut self) { + self.layer = None; + self.endpoint = EndpointType::None; + self.handle_state = SweepAngleGizmoState::Inactive; + } +} diff --git a/editor/src/messages/tool/common_functionality/graph_modification_utils.rs b/editor/src/messages/tool/common_functionality/graph_modification_utils.rs index 126e5b160c..4cde2d08d6 100644 --- a/editor/src/messages/tool/common_functionality/graph_modification_utils.rs +++ b/editor/src/messages/tool/common_functionality/graph_modification_utils.rs @@ -3,7 +3,6 @@ use crate::messages::portfolio::document::node_graph::document_node_definitions; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeNetworkInterface, NodeTemplate}; use crate::messages::prelude::*; -use bezier_rs::Subpath; use glam::DVec2; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; @@ -11,10 +10,13 @@ use graph_craft::{ProtoNodeIdentifier, concrete}; use graphene_std::Color; use graphene_std::NodeInputDecleration; use graphene_std::raster::BlendMode; -use graphene_std::raster_types::{CPU, GPU, RasterDataTable}; +use graphene_std::raster_types::{CPU, GPU, Raster}; +use graphene_std::subpath::Subpath; +use graphene_std::table::Table; use graphene_std::text::{Font, TypesettingConfig}; -use graphene_std::vector::style::Gradient; -use graphene_std::vector::{ManipulatorPointId, PointId, SegmentId, VectorModificationType}; +use graphene_std::vector::misc::ManipulatorPointId; +use graphene_std::vector::style::{Fill, Gradient}; +use graphene_std::vector::{PointId, SegmentId, VectorModificationType}; use std::collections::VecDeque; /// Returns the ID of the first Spline node in the horizontal flow which is not followed by a `Path` node, or `None` if none exists. @@ -33,7 +35,7 @@ pub fn merge_layers(document: &DocumentMessageHandler, first_layer: LayerNodeIde if first_layer == second_layer { return; } - // Calculate the downstream transforms in order to bring the other vector data into the same layer space + // Calculate the downstream transforms in order to bring the other vector geometry into the same layer space let first_layer_transform = document.metadata().downstream_transform_to_document(first_layer); let second_layer_transform = document.metadata().downstream_transform_to_document(second_layer); @@ -153,31 +155,32 @@ pub fn merge_layers(document: &DocumentMessageHandler, first_layer: LayerNodeIde }); responses.add(NodeGraphMessage::RunDocumentGraph); - responses.add(Message::StartBuffer); - responses.add(PenToolMessage::RecalculateLatestPointsPosition); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PenToolMessage::RecalculateLatestPointsPosition.into()], + }); } /// Merge the `first_endpoint` with `second_endpoint`. pub fn merge_points(document: &DocumentMessageHandler, layer: LayerNodeIdentifier, first_endpoint: PointId, second_endpont: PointId, responses: &mut VecDeque) { let transform = document.metadata().transform_to_document(layer); - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { return }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; - let segment = vector_data.segment_bezier_iter().find(|(_, _, start, end)| *end == second_endpont || *start == second_endpont); + let segment = vector.segment_bezier_iter().find(|(_, _, start, end)| *end == second_endpont || *start == second_endpont); let Some((segment, _, mut segment_start_point, mut segment_end_point)) = segment else { log::error!("Could not get the segment for second_endpoint."); return; }; let mut handles = [None; 2]; - if let Some(handle_position) = ManipulatorPointId::PrimaryHandle(segment).get_position(&vector_data) { - let anchor_position = ManipulatorPointId::Anchor(segment_start_point).get_position(&vector_data).unwrap(); + if let Some(handle_position) = ManipulatorPointId::PrimaryHandle(segment).get_position(&vector) { + let anchor_position = ManipulatorPointId::Anchor(segment_start_point).get_position(&vector).unwrap(); let handle_position = transform.transform_point2(handle_position); let anchor_position = transform.transform_point2(anchor_position); let anchor_to_handle = handle_position - anchor_position; handles[0] = Some(anchor_to_handle); } - if let Some(handle_position) = ManipulatorPointId::EndHandle(segment).get_position(&vector_data) { - let anchor_position = ManipulatorPointId::Anchor(segment_end_point).get_position(&vector_data).unwrap(); + if let Some(handle_position) = ManipulatorPointId::EndHandle(segment).get_position(&vector) { + let anchor_position = ManipulatorPointId::Anchor(segment_end_point).get_position(&vector).unwrap(); let handle_position = transform.transform_point2(handle_position); let anchor_position = transform.transform_point2(anchor_position); let anchor_to_handle = handle_position - anchor_position; @@ -210,7 +213,7 @@ pub fn new_vector_layer(subpaths: Vec>, id: NodeId, parent: Lay } /// Create a new bitmap layer. -pub fn new_image_layer(image_frame: RasterDataTable, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque) -> LayerNodeIdentifier { +pub fn new_image_layer(image_frame: Table>, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque) -> LayerNodeIdentifier { let insert_index = 0; responses.add(GraphOperationMessage::NewBitmapLayer { id, @@ -270,7 +273,7 @@ pub fn get_gradient(layer: LayerNodeIdentifier, network_interface: &NodeNetworkI let fill_index = 1; let inputs = NodeGraphLayer::new(layer, network_interface).find_node_inputs("Fill")?; - let TaggedValue::Fill(graphene_std::vector::style::Fill::Gradient(gradient)) = inputs.get(fill_index)?.as_value()? else { + let TaggedValue::Fill(Fill::Gradient(gradient)) = inputs.get(fill_index)?.as_value()? else { return None; }; Some(gradient.clone()) @@ -281,7 +284,7 @@ pub fn get_fill_color(layer: LayerNodeIdentifier, network_interface: &NodeNetwor let fill_index = 1; let inputs = NodeGraphLayer::new(layer, network_interface).find_node_inputs("Fill")?; - let TaggedValue::Fill(graphene_std::vector::style::Fill::Solid(color)) = inputs.get(fill_index)?.as_value()? else { + let TaggedValue::Fill(Fill::Solid(color)) = inputs.get(fill_index)?.as_value()? else { return None; }; Some(color.to_linear_srgb()) @@ -332,6 +335,10 @@ pub fn get_fill_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkIn NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name("Fill") } +pub fn get_circle_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { + NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name("Circle") +} + pub fn get_ellipse_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name("Ellipse") } @@ -352,6 +359,10 @@ pub fn get_star_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkIn NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name("Star") } +pub fn get_arc_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { + NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name("Arc") +} + pub fn get_text_id(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { NodeGraphLayer::new(layer, network_interface).upstream_node_id_from_name("Text") } @@ -368,9 +379,8 @@ pub fn get_text(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInter let Some(&TaggedValue::OptionalF64(max_width)) = inputs[6].as_value() else { return None }; let Some(&TaggedValue::OptionalF64(max_height)) = inputs[7].as_value() else { return None }; let Some(&TaggedValue::F64(tilt)) = inputs[8].as_value() else { return None }; - let Some(TaggedValue::Bool(per_glyph_instances)) = &inputs[9].as_value() else { - return None; - }; + let Some(&TaggedValue::TextAlign(align)) = inputs[9].as_value() else { return None }; + let Some(&TaggedValue::Bool(per_glyph_instances)) = inputs[10].as_value() else { return None }; let typesetting = TypesettingConfig { font_size, @@ -379,8 +389,9 @@ pub fn get_text(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInter character_spacing, max_height, tilt, + align, }; - Some((text, font, typesetting, *per_glyph_instances)) + Some((text, font, typesetting, per_glyph_instances)) } pub fn get_stroke_width(layer: LayerNodeIdentifier, network_interface: &NodeNetworkInterface) -> Option { @@ -424,6 +435,16 @@ impl<'a> NodeGraphLayer<'a> { .find(|node_id| self.network_interface.reference(node_id, &[]).is_some_and(|reference| *reference == Some(node_name.to_string()))) } + /// Node id of a visible node if it exists in the layer's primary flow until another layer + pub fn upstream_visible_node_id_from_name_in_layer(&self, node_name: &str) -> Option { + // `.skip(1)` is used to skip self + self.horizontal_layer_flow() + .skip(1) + .take_while(|node_id| !self.network_interface.is_layer(node_id, &[])) + .filter(|node_id| self.network_interface.is_visible(node_id, &[])) + .find(|node_id| self.network_interface.reference(node_id, &[]).is_some_and(|reference| *reference == Some(node_name.to_string()))) + } + /// Node id of a protonode if it exists in the layer's primary flow pub fn upstream_node_id_from_protonode(&self, protonode_identifier: ProtoNodeIdentifier) -> Option { self.horizontal_layer_flow() @@ -438,10 +459,11 @@ impl<'a> NodeGraphLayer<'a> { /// Find all of the inputs of a specific node within the layer's primary flow, up until the next layer is reached. pub fn find_node_inputs(&self, node_name: &str) -> Option<&'a Vec> { + // `.skip(1)` is used to skip self self.horizontal_layer_flow() - .skip(1)// Skip self - .take_while(|node_id| !self.network_interface.is_layer(node_id,&[])) - .find(|node_id| self.network_interface.reference(node_id,&[]).is_some_and(|reference| *reference == Some(node_name.to_string()))) + .skip(1) + .take_while(|node_id| !self.network_interface.is_layer(node_id, &[])) + .find(|node_id| self.network_interface.reference(node_id, &[]).is_some_and(|reference| *reference == Some(node_name.to_string()))) .and_then(|node_id| self.network_interface.document_network().nodes.get(&node_id).map(|node| &node.inputs)) } @@ -455,6 +477,6 @@ impl<'a> NodeGraphLayer<'a> { pub fn is_raster_layer(layer: LayerNodeIdentifier, network_interface: &mut NodeNetworkInterface) -> bool { let layer_input_type = network_interface.input_type(&InputConnector::node(layer.to_node(), 1), &[]).0.nested_type().clone(); - layer_input_type == concrete!(RasterDataTable) || layer_input_type == concrete!(RasterDataTable) + layer_input_type == concrete!(Table>) || layer_input_type == concrete!(Table>) } } diff --git a/editor/src/messages/tool/common_functionality/measure.rs b/editor/src/messages/tool/common_functionality/measure.rs index 5a76a5bd22..1ad5ae704c 100644 --- a/editor/src/messages/tool/common_functionality/measure.rs +++ b/editor/src/messages/tool/common_functionality/measure.rs @@ -43,18 +43,19 @@ fn draw_line_with_length(line_start: DVec2, line_end: DVec2, transform: DAffine2 } } -/// Draws a dashed outline around a rectangle to visualize the AABB +/// Draws a dashed outline around the given rectangle (assumed to be in document space). +/// The provided transform is applied to convert coordinates (e.g., to viewport space) during rendering. fn draw_dashed_rect_outline(rect: Rect, transform: DAffine2, overlay_context: &mut OverlayContext) { let min = rect.min(); let max = rect.max(); - // Create the four corners of the rectangle - let top_left = transform.transform_point2(DVec2::new(min.x, min.y)); - let top_right = transform.transform_point2(DVec2::new(max.x, min.y)); - let bottom_right = transform.transform_point2(DVec2::new(max.x, max.y)); - let bottom_left = transform.transform_point2(DVec2::new(min.x, max.y)); + // Define corners in document space + let top_left = DVec2::new(min.x, min.y); + let top_right = DVec2::new(max.x, min.y); + let bottom_right = DVec2::new(max.x, max.y); + let bottom_left = DVec2::new(min.x, max.y); - // Draw the four sides as dashed lines + // Draw each edge using document-space coordinates; transform is applied inside draw_dashed_line draw_dashed_line(top_left, top_right, transform, overlay_context); draw_dashed_line(top_right, bottom_right, transform, overlay_context); draw_dashed_line(bottom_right, bottom_left, transform, overlay_context); diff --git a/editor/src/messages/tool/common_functionality/pivot.rs b/editor/src/messages/tool/common_functionality/pivot.rs index 10ea38371c..cd6ad63bbb 100644 --- a/editor/src/messages/tool/common_functionality/pivot.rs +++ b/editor/src/messages/tool/common_functionality/pivot.rs @@ -8,7 +8,8 @@ use crate::messages::tool::tool_messages::path_tool::PathOptionsUpdate; use crate::messages::tool::tool_messages::select_tool::SelectOptionsUpdate; use crate::messages::tool::tool_messages::tool_prelude::*; use glam::{DAffine2, DVec2}; -use graphene_std::{transform::ReferencePoint, vector::ManipulatorPointId}; +use graphene_std::transform::ReferencePoint; +use graphene_std::vector::misc::ManipulatorPointId; use std::fmt; pub fn pin_pivot_widget(active: bool, enabled: bool, source: PivotToolSource) -> WidgetHolder { @@ -16,8 +17,14 @@ pub fn pin_pivot_widget(active: bool, enabled: bool, source: PivotToolSource) -> .tooltip(String::from(if active { "Unpin Custom Pivot" } else { "Pin Custom Pivot" }) + "\n\nUnless pinned, the pivot will return to its prior reference point when a new selection is made.") .disabled(!enabled) .on_update(move |_| match source { - PivotToolSource::Select => SelectToolMessage::SelectOptions(SelectOptionsUpdate::TogglePivotPinned).into(), - PivotToolSource::Path => PathToolMessage::UpdateOptions(PathOptionsUpdate::TogglePivotPinned).into(), + PivotToolSource::Select => SelectToolMessage::SelectOptions { + options: SelectOptionsUpdate::TogglePivotPinned, + } + .into(), + PivotToolSource::Path => PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::TogglePivotPinned, + } + .into(), }) .widget_holder() } @@ -40,8 +47,14 @@ pub fn pivot_gizmo_type_widget(state: PivotGizmoState, source: PivotToolSource) MenuListEntry::new(format!("{gizmo_type:?}")).label(gizmo_type.to_string()).on_commit({ let value = source.clone(); move |_| match value { - PivotToolSource::Select => SelectToolMessage::SelectOptions(SelectOptionsUpdate::PivotGizmoType(*gizmo_type)).into(), - PivotToolSource::Path => PathToolMessage::UpdateOptions(PathOptionsUpdate::PivotGizmoType(*gizmo_type)).into(), + PivotToolSource::Select => SelectToolMessage::SelectOptions { + options: SelectOptionsUpdate::PivotGizmoType(*gizmo_type), + } + .into(), + PivotToolSource::Path => PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::PivotGizmoType(*gizmo_type), + } + .into(), } }) }) @@ -56,8 +69,14 @@ pub fn pivot_gizmo_type_widget(state: PivotGizmoState, source: PivotToolSource) Disabled: rotation and scaling occurs about the center of the selection bounds.", ) .on_update(move |optional_input: &CheckboxInput| match source { - PivotToolSource::Select => SelectToolMessage::SelectOptions(SelectOptionsUpdate::TogglePivotGizmoType(optional_input.checked)).into(), - PivotToolSource::Path => PathToolMessage::UpdateOptions(PathOptionsUpdate::TogglePivotGizmoType(optional_input.checked)).into(), + PivotToolSource::Select => SelectToolMessage::SelectOptions { + options: SelectOptionsUpdate::TogglePivotGizmoType(optional_input.checked), + } + .into(), + PivotToolSource::Path => PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::TogglePivotGizmoType(optional_input.checked), + } + .into(), }) .widget_holder(), Separator::new(SeparatorType::Related).widget_holder(), diff --git a/editor/src/messages/tool/common_functionality/resize.rs b/editor/src/messages/tool/common_functionality/resize.rs index fc8f1ee6da..47143503c0 100644 --- a/editor/src/messages/tool/common_functionality/resize.rs +++ b/editor/src/messages/tool/common_functionality/resize.rs @@ -48,56 +48,11 @@ impl Resize { /// Compute the drag start and end based on the current mouse position. Ignores the state of the layer. /// If you want to only draw whilst a layer exists, use [`Resize::calculate_points`]. pub fn calculate_points_ignore_layer(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, center: Key, lock_ratio: Key, in_document: bool) -> [DVec2; 2] { - let start = self.viewport_drag_start(document); - let mouse = input.mouse.position; - let document_to_viewport = document.navigation_handler.calculate_offset_transform(input.viewport_bounds.center(), &document.document_ptz); - let document_mouse = document_to_viewport.inverse().transform_point2(mouse); - let mut points_viewport = [start, mouse]; - let ignore = if let Some(layer) = self.layer { vec![layer] } else { vec![] }; let ratio = input.keyboard.get(lock_ratio as usize); let center = input.keyboard.get(center as usize); - let snap_data = SnapData::ignore(document, input, &ignore); - let config = SnapTypeConfiguration::default(); - if ratio { - let viewport_size = points_viewport[1] - points_viewport[0]; - let raw_size = if in_document { document_to_viewport.inverse() } else { DAffine2::IDENTITY }.transform_vector2(viewport_size); - let adjusted_size = raw_size.abs().max(raw_size.abs().yx()) * raw_size.signum(); - let size = if in_document { document_to_viewport.transform_vector2(adjusted_size) } else { adjusted_size }; - points_viewport[1] = points_viewport[0] + size; - let end_document = document_to_viewport.inverse().transform_point2(points_viewport[1]); - let constraint = SnapConstraint::Line { - origin: self.drag_start, - direction: end_document - self.drag_start, - }; - if center { - let snapped = self.snap_manager.constrained_snap(&snap_data, &SnapCandidatePoint::handle(end_document), constraint, config); - let far = SnapCandidatePoint::handle(2. * self.drag_start - end_document); - let snapped_far = self.snap_manager.constrained_snap(&snap_data, &far, constraint, config); - let best = if snapped_far.other_snap_better(&snapped) { snapped } else { snapped_far }; - points_viewport[0] = document_to_viewport.transform_point2(best.snapped_point_document); - points_viewport[1] = document_to_viewport.transform_point2(self.drag_start * 2. - best.snapped_point_document); - self.snap_manager.update_indicator(best); - } else { - let snapped = self.snap_manager.constrained_snap(&snap_data, &SnapCandidatePoint::handle(end_document), constraint, config); - points_viewport[1] = document_to_viewport.transform_point2(snapped.snapped_point_document); - self.snap_manager.update_indicator(snapped); - } - } else if center { - let snapped = self.snap_manager.free_snap(&snap_data, &SnapCandidatePoint::handle(document_mouse), config); - let opposite = 2. * self.drag_start - document_mouse; - let snapped_far = self.snap_manager.free_snap(&snap_data, &SnapCandidatePoint::handle(opposite), config); - let best = if snapped_far.other_snap_better(&snapped) { snapped } else { snapped_far }; - points_viewport[0] = document_to_viewport.transform_point2(best.snapped_point_document); - points_viewport[1] = document_to_viewport.transform_point2(self.drag_start * 2. - best.snapped_point_document); - self.snap_manager.update_indicator(best); - } else { - let snapped = self.snap_manager.free_snap(&snap_data, &SnapCandidatePoint::handle(document_mouse), config); - points_viewport[1] = document_to_viewport.transform_point2(snapped.snapped_point_document); - self.snap_manager.update_indicator(snapped); - } - - points_viewport + // Use shared snapping logic with optional center and ratio constraints, considering if coordinates are in document space. + self.compute_snapped_resize_points(document, input, center, ratio, in_document) } pub fn calculate_transform(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, center: Key, lock_ratio: Key, skip_rerender: bool) -> Option { @@ -113,6 +68,81 @@ impl Resize { ) } + pub fn calculate_circle_points(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, center: Key) -> [DVec2; 2] { + let center = input.keyboard.get(center as usize); + + // Use shared snapping logic with enforced aspect ratio and optional center snapping. + self.compute_snapped_resize_points(document, input, center, true, false) + } + + /// Calculates two points in viewport space from a drag, applying snapping, optional center mode, and aspect ratio locking. + fn compute_snapped_resize_points(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, center: bool, lock_ratio: bool, in_document: bool) -> [DVec2; 2] { + let start = self.viewport_drag_start(document); + let mouse = input.mouse.position; + let document_to_viewport = document.navigation_handler.calculate_offset_transform(input.viewport_bounds.center(), &document.document_ptz); + let drag_start = self.drag_start; + let mut points_viewport = [start, mouse]; + + let ignore = if let Some(layer) = self.layer { vec![layer] } else { vec![] }; + let snap_data = &SnapData::ignore(document, input, &ignore); + + if lock_ratio { + let viewport_size = points_viewport[1] - points_viewport[0]; + let raw_size = if in_document { + document_to_viewport.inverse().transform_vector2(viewport_size) + } else { + viewport_size + }; + + let adjusted_size = raw_size.abs().max(raw_size.abs().yx()) * raw_size.signum(); + let size = if in_document { document_to_viewport.transform_vector2(adjusted_size) } else { adjusted_size }; + + points_viewport[1] = points_viewport[0] + size; + let end_document = document_to_viewport.inverse().transform_point2(points_viewport[1]); + let constraint = SnapConstraint::Line { + origin: drag_start, + direction: end_document - drag_start, + }; + + if center { + let snapped = self + .snap_manager + .constrained_snap(snap_data, &SnapCandidatePoint::handle(end_document), constraint, SnapTypeConfiguration::default()); + let far = SnapCandidatePoint::handle(2. * drag_start - end_document); + let snapped_far = self.snap_manager.constrained_snap(snap_data, &far, constraint, SnapTypeConfiguration::default()); + let best = if snapped_far.other_snap_better(&snapped) { snapped } else { snapped_far }; + + points_viewport[0] = document_to_viewport.transform_point2(best.snapped_point_document); + points_viewport[1] = document_to_viewport.transform_point2(drag_start * 2. - best.snapped_point_document); + self.snap_manager.update_indicator(best); + } else { + let snapped = self + .snap_manager + .constrained_snap(snap_data, &SnapCandidatePoint::handle(end_document), constraint, SnapTypeConfiguration::default()); + points_viewport[1] = document_to_viewport.transform_point2(snapped.snapped_point_document); + self.snap_manager.update_indicator(snapped); + } + } else { + let document_mouse = document_to_viewport.inverse().transform_point2(mouse); + if center { + let snapped = self.snap_manager.free_snap(snap_data, &SnapCandidatePoint::handle(document_mouse), SnapTypeConfiguration::default()); + let opposite = 2. * drag_start - document_mouse; + let snapped_far = self.snap_manager.free_snap(snap_data, &SnapCandidatePoint::handle(opposite), SnapTypeConfiguration::default()); + let best = if snapped_far.other_snap_better(&snapped) { snapped } else { snapped_far }; + + points_viewport[0] = document_to_viewport.transform_point2(best.snapped_point_document); + points_viewport[1] = document_to_viewport.transform_point2(drag_start * 2. - best.snapped_point_document); + self.snap_manager.update_indicator(best); + } else { + let snapped = self.snap_manager.free_snap(snap_data, &SnapCandidatePoint::handle(document_mouse), SnapTypeConfiguration::default()); + points_viewport[1] = document_to_viewport.transform_point2(snapped.snapped_point_document); + self.snap_manager.update_indicator(snapped); + } + } + + points_viewport + } + pub fn cleanup(&mut self, responses: &mut VecDeque) { self.snap_manager.cleanup(responses); self.layer = None; diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index 34fda01a34..1c937ae23a 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -1,20 +1,24 @@ use super::graph_modification_utils::merge_layers; use super::snapping::{SnapCache, SnapCandidatePoint, SnapData, SnapManager, SnappedPoint}; -use super::utility_functions::{adjust_handle_colinearity, calculate_bezier_bbox, calculate_segment_angle, restore_g1_continuity, restore_previous_handle_position}; +use super::utility_functions::{adjust_handle_colinearity, calculate_segment_angle, restore_g1_continuity, restore_previous_handle_position}; use crate::consts::HANDLE_LENGTH_FACTOR; -use crate::messages::portfolio::document::overlays::utility_functions::selected_segments; +use crate::messages::portfolio::document::overlays::utility_functions::selected_segments_for_layer; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::misc::{PathSnapSource, SnapSource}; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; use crate::messages::preferences::SelectionMode; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::snapping::SnapTypeConfiguration; -use crate::messages::tool::common_functionality::utility_functions::{is_intersecting, is_visible_point}; +use crate::messages::tool::common_functionality::utility_functions::is_visible_point; use crate::messages::tool::tool_messages::path_tool::{PathOverlayMode, PointSelectState}; -use bezier_rs::{Bezier, BezierHandles, Subpath, TValue}; use glam::{DAffine2, DVec2}; -use graphene_std::vector::{HandleExt, HandleId, SegmentId}; -use graphene_std::vector::{ManipulatorPointId, PointId, VectorData, VectorModificationType}; +use graphene_std::subpath::{BezierHandles, Subpath}; +use graphene_std::subpath::{PathSegPoints, pathseg_points}; +use graphene_std::vector::algorithms::bezpath_algorithms::pathseg_compute_lookup_table; +use graphene_std::vector::misc::{HandleId, ManipulatorPointId, dvec2_to_point, point_to_dvec2}; +use graphene_std::vector::{HandleExt, PointId, SegmentId, Vector, VectorModificationType}; +use kurbo::{Affine, DEFAULT_ACCURACY, Line, ParamCurve, ParamCurveNearest, PathSeg, Rect, Shape}; +use std::f64::consts::TAU; #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum SelectionChange { @@ -25,7 +29,7 @@ pub enum SelectionChange { #[derive(Clone, Copy, Debug)] pub enum SelectionShape<'a> { - Box([DVec2; 2]), + Box(Rect), Lasso(&'a Vec), } @@ -56,6 +60,10 @@ pub struct SelectedLayerState { } impl SelectedLayerState { + pub fn is_empty(&self) -> bool { + self.selected_points.is_empty() && self.selected_segments.is_empty() + } + pub fn selected_points(&self) -> impl Iterator + '_ { self.selected_points.iter().copied() } @@ -159,13 +167,13 @@ pub struct ShapeState { pub struct SelectedPointsInfo { pub points: Vec, pub offset: DVec2, - pub vector_data: VectorData, + pub vector: Vector, } #[derive(Debug)] pub struct SelectedSegmentsInfo { pub segments: Vec, - pub vector_data: VectorData, + pub vector: Vector, } #[derive(Clone, Copy, Debug, Eq, PartialEq)] @@ -180,7 +188,7 @@ pub type OpposingHandleLengths = HashMap; 2], t: f64, @@ -200,12 +208,12 @@ impl ClosestSegment { self.points } - pub fn bezier(&self) -> Bezier { + pub fn pathseg(&self) -> PathSeg { self.bezier } pub fn closest_point_document(&self) -> DVec2 { - self.bezier.evaluate(TValue::Parametric(self.t)) + point_to_dvec2(self.bezier.eval(self.t)) } pub fn closest_point_to_viewport(&self) -> DVec2 { @@ -214,7 +222,7 @@ impl ClosestSegment { pub fn closest_point(&self, document_metadata: &DocumentMetadata, network_interface: &NodeNetworkInterface) -> DVec2 { let transform = document_metadata.transform_to_viewport_if_feeds(self.layer, network_interface); - let bezier_point = self.bezier.evaluate(TValue::Parametric(self.t)); + let bezier_point = point_to_dvec2(self.bezier.eval(self.t)); transform.transform_point2(bezier_point) } @@ -223,10 +231,10 @@ impl ClosestSegment { let transform = document_metadata.transform_to_viewport_if_feeds(self.layer, network_interface); let layer_mouse_pos = transform.inverse().transform_point2(mouse_position); - let t = self.bezier.project(layer_mouse_pos).clamp(0., 1.); + let t = self.bezier.nearest(dvec2_to_point(layer_mouse_pos), DEFAULT_ACCURACY).t.clamp(0., 1.); self.t = t; - let bezier_point = self.bezier.evaluate(TValue::Parametric(t)); + let bezier_point = point_to_dvec2(self.bezier.eval(t)); let bezier_point = transform.transform_point2(bezier_point); self.bezier_point_to_viewport = bezier_point; } @@ -244,22 +252,24 @@ impl ClosestSegment { let transform = document_metadata.transform_to_viewport_if_feeds(self.layer, network_interface); // Split the Bezier at the parameter `t` - let [first, second] = self.bezier.split(TValue::Parametric(self.t)); + let first = self.bezier.subsegment(0_f64..self.t); + let second = self.bezier.subsegment(self.t..1.); // Transform the handle positions to viewport space - let first_handle = first.handle_end().map(|handle| transform.transform_point2(handle)); - let second_handle = second.handle_start().map(|handle| transform.transform_point2(handle)); + let first_handle = pathseg_points(first).p2.map(|handle| transform.transform_point2(handle)); + let second_handle = pathseg_points(second).p1.map(|handle| transform.transform_point2(handle)); (first_handle, second_handle) } pub fn adjusted_insert(&self, responses: &mut VecDeque) -> (PointId, [SegmentId; 2]) { let layer = self.layer; - let [first, second] = self.bezier.split(TValue::Parametric(self.t)); + let first = pathseg_points(self.bezier.subsegment(0_f64..self.t)); + let second = pathseg_points(self.bezier.subsegment(self.t..1.)); // Point let midpoint = PointId::generate(); - let modification_type = VectorModificationType::InsertPoint { id: midpoint, position: first.end }; + let modification_type = VectorModificationType::InsertPoint { id: midpoint, position: first.p3 }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); // First segment @@ -267,7 +277,7 @@ impl ClosestSegment { let modification_type = VectorModificationType::InsertSegment { id: segment_ids[0], points: [self.points[0], midpoint], - handles: [first.handle_start().map(|handle| handle - first.start), first.handle_end().map(|handle| handle - first.end)], + handles: [first.p1.map(|handle| handle - first.p0), first.p2.map(|handle| handle - first.p3)], }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -275,12 +285,12 @@ impl ClosestSegment { let modification_type = VectorModificationType::InsertSegment { id: segment_ids[1], points: [midpoint, self.points[1]], - handles: [second.handle_start().map(|handle| handle - second.start), second.handle_end().map(|handle| handle - second.end)], + handles: [second.p1.map(|handle| handle - second.p0), second.p2.map(|handle| handle - second.p3)], }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); // G1 continuous on new handles - if self.bezier.handle_end().is_some() { + if pathseg_points(self.bezier).p2.is_some() { let handles = [HandleId::end(segment_ids[0]), HandleId::primary(segment_ids[1])]; let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: true }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -301,9 +311,16 @@ impl ClosestSegment { (midpoint, segment_ids) } - pub fn adjusted_insert_and_select(&self, shape_editor: &mut ShapeState, responses: &mut VecDeque, extend_selection: bool) { - let (id, _) = self.adjusted_insert(responses); - shape_editor.select_anchor_point_by_id(self.layer, id, extend_selection) + pub fn adjusted_insert_and_select(&self, shape_editor: &mut ShapeState, responses: &mut VecDeque, extend_selection: bool, point_mode: bool, is_segment_selected: bool) { + let (id, segments) = self.adjusted_insert(responses); + if point_mode || is_segment_selected { + shape_editor.select_anchor_point_by_id(self.layer, id, extend_selection); + } + + if is_segment_selected { + let Some(state) = shape_editor.selected_shape_state.get_mut(&self.layer) else { return }; + segments.iter().for_each(|segment| state.select_segment(*segment)); + } } pub fn calculate_perp(&self, document: &DocumentMessageHandler) -> DVec2 { @@ -311,10 +328,10 @@ impl ClosestSegment { (handle1 - handle2).try_normalize() } else { let [first_point, last_point] = self.points(); - if let Some(vector_data) = document.network_interface.compute_modified_vector(self.layer()) { + if let Some(vector) = document.network_interface.compute_modified_vector(self.layer()) { if let (Some(pos1), Some(pos2)) = ( - ManipulatorPointId::Anchor(first_point).get_position(&vector_data), - ManipulatorPointId::Anchor(last_point).get_position(&vector_data), + ManipulatorPointId::Anchor(first_point).get_position(&vector), + ManipulatorPointId::Anchor(last_point).get_position(&vector), ) { (pos1 - pos2).try_normalize() } else { @@ -341,8 +358,8 @@ impl ClosestSegment { ) -> Option<[Option; 2]> { let transform = document.metadata().transform_to_viewport_if_feeds(self.layer, &document.network_interface); - let start = self.bezier.start; - let end = self.bezier.end; + let start = point_to_dvec2(self.bezier.start()); + let end = point_to_dvec2(self.bezier.end()); // Apply the drag delta to the segment's handles let b = self.bezier_point_to_viewport; @@ -361,13 +378,13 @@ impl ClosestSegment { // If adjacent segments have colinear handles, their direction is changed but their handle lengths is preserved // TODO: Find something which is more appropriate - let vector_data = document.network_interface.compute_modified_vector(self.layer())?; + let vector = document.network_interface.compute_modified_vector(self.layer())?; if break_colinear_molding { // Disable G1 continuity let other_handles = [ - restore_previous_handle_position(handle1, c1, start, &vector_data, layer, responses), - restore_previous_handle_position(handle2, c2, end, &vector_data, layer, responses), + restore_previous_handle_position(handle1, c1, start, &vector, layer, responses), + restore_previous_handle_position(handle2, c2, end, &vector, layer, responses), ]; // Store other HandleId in tool data to regain colinearity later @@ -378,15 +395,15 @@ impl ClosestSegment { } } else { // Move the colinear handles so that colinearity is maintained - adjust_handle_colinearity(handle1, start, nc1, &vector_data, layer, responses); - adjust_handle_colinearity(handle2, end, nc2, &vector_data, layer, responses); + adjust_handle_colinearity(handle1, start, nc1, &vector, layer, responses); + adjust_handle_colinearity(handle2, end, nc2, &vector, layer, responses); if let Some(adjacent_handles) = temporary_adjacent_handles_while_molding { if let Some(other_handle1) = adjacent_handles[0] { - restore_g1_continuity(handle1, other_handle1, nc1, start, &vector_data, layer, responses); + restore_g1_continuity(handle1, other_handle1, nc1, start, &vector, layer, responses); } if let Some(other_handle2) = adjacent_handles[1] { - restore_g1_continuity(handle2, other_handle2, nc2, end, &vector_data, layer, responses); + restore_g1_continuity(handle2, other_handle2, nc2, end, &vector, layer, responses); } } None @@ -404,7 +421,7 @@ impl ShapeState { (point.as_handle().is_some() && self.ignore_handles) || (point.as_anchor().is_some() && self.ignore_anchors) } - pub fn close_selected_path(&self, document: &DocumentMessageHandler, responses: &mut VecDeque) { + pub fn close_selected_path(&self, document: &DocumentMessageHandler, responses: &mut VecDeque, vector_meshes: bool) { // First collect all selected anchor points across all layers let all_selected_points: Vec<(LayerNodeIdentifier, PointId)> = self .selected_shape_state @@ -429,10 +446,11 @@ impl ShapeState { let (layer1, start_point) = all_selected_points[0]; let (layer2, end_point) = all_selected_points[1]; - let Some(vector_data1) = document.network_interface.compute_modified_vector(layer1) else { return }; - let Some(vector_data2) = document.network_interface.compute_modified_vector(layer2) else { return }; + let Some(vector1) = document.network_interface.compute_modified_vector(layer1) else { return }; + let Some(vector2) = document.network_interface.compute_modified_vector(layer2) else { return }; - if vector_data1.all_connected(start_point).count() != 1 || vector_data2.all_connected(end_point).count() != 1 { + // If vector meshes is not selected then only for endpoints, otherwise normally applicable + if !vector_meshes && (vector1.all_connected(start_point).count() != 1 || vector2.all_connected(end_point).count() != 1) { return; } @@ -465,15 +483,9 @@ impl ShapeState { // If no points are selected, try to find a single continuous subpath in each layer to connect the endpoints of for &layer in self.selected_shape_state.keys() { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; - let endpoints: Vec = vector_data - .point_domain - .ids() - .iter() - .copied() - .filter(|&point_id| vector_data.all_connected(point_id).count() == 1) - .collect(); + let endpoints: Vec = vector.point_domain.ids().iter().copied().filter(|&point_id| vector.all_connected(point_id).count() == 1).collect(); if endpoints.len() == 2 { let start_point = endpoints[0]; @@ -503,29 +515,27 @@ impl ShapeState { let mut offset = mouse_delta; let mut best_snapped = SnappedPoint::infinite_snap(document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position)); for (layer, state) in &self.selected_shape_state { - let Some(vector_data) = document.network_interface.compute_modified_vector(*layer) else { - continue; - }; + let Some(vector) = document.network_interface.compute_modified_vector(*layer) else { continue }; let to_document = document.metadata().transform_to_document_if_feeds(*layer, &document.network_interface); for &selected in &state.selected_points { let source = match selected { - ManipulatorPointId::Anchor(_) if vector_data.colinear(selected) => SnapSource::Path(PathSnapSource::AnchorPointWithColinearHandles), + ManipulatorPointId::Anchor(_) if vector.colinear(selected) => SnapSource::Path(PathSnapSource::AnchorPointWithColinearHandles), ManipulatorPointId::Anchor(_) => SnapSource::Path(PathSnapSource::AnchorPointWithFreeHandles), // TODO: This doesn't actually work for handles, instead handles enter the arm above for free handles ManipulatorPointId::PrimaryHandle(_) | ManipulatorPointId::EndHandle(_) => SnapSource::Path(PathSnapSource::HandlePoint), }; - let Some(position) = selected.get_position(&vector_data) else { continue }; + let Some(position) = selected.get_position(&vector) else { continue }; let mut point = SnapCandidatePoint::new_source(to_document.transform_point2(position) + mouse_delta, source); if let Some(id) = selected.as_anchor() { - for neighbor in vector_data.connected_points(id) { + for neighbor in vector.connected_points(id) { if state.is_point_selected(ManipulatorPointId::Anchor(neighbor)) { continue; } - let Some(position) = vector_data.point_domain.position_from_id(neighbor) else { continue }; + let Some(position) = vector.point_domain.position_from_id(neighbor) else { continue }; point.neighbors.push(to_document.transform_point2(position)); } } @@ -550,15 +560,15 @@ impl ShapeState { select_threshold: f64, extend_selection: bool, path_overlay_mode: PathOverlayMode, - frontier_handles_info: Option>>, + frontier_handles_info: Option<&HashMap>>>, ) -> Option> { if self.selected_shape_state.is_empty() { return None; } if let Some((layer, manipulator_point_id)) = self.find_nearest_visible_point_indices(network_interface, mouse_position, select_threshold, path_overlay_mode, frontier_handles_info) { - let vector_data = network_interface.compute_modified_vector(layer)?; - let point_position = manipulator_point_id.get_position(&vector_data)?; + let vector = network_interface.compute_modified_vector(layer)?; + let point_position = manipulator_point_id.get_position(&vector)?; let selected_shape_state = self.selected_shape_state.get(&layer)?; let already_selected = selected_shape_state.is_point_selected(manipulator_point_id); @@ -588,7 +598,7 @@ impl ShapeState { .flat_map(|(layer, state)| state.selected_points.iter().map(|&point_id| ManipulatorPointInfo { layer: *layer, point_id })) .collect(); - return Some(Some(SelectedPointsInfo { points, offset, vector_data })); + return Some(Some(SelectedPointsInfo { points, offset, vector })); } None } @@ -599,29 +609,36 @@ impl ShapeState { mouse_position: DVec2, select_threshold: f64, path_overlay_mode: PathOverlayMode, - frontier_handles_info: Option>>, + frontier_handles_info: Option<&HashMap>>>, point_editing_mode: bool, ) -> Option<(bool, Option)> { if self.selected_shape_state.is_empty() { return None; } - if !point_editing_mode { - return None; - } - if let Some((layer, manipulator_point_id)) = self.find_nearest_point_indices(network_interface, mouse_position, select_threshold) { - let vector_data = network_interface.compute_modified_vector(layer)?; - let point_position = manipulator_point_id.get_position(&vector_data)?; - + // If not point editing mode then only handles are allowed to be dragged + if !point_editing_mode && matches!(manipulator_point_id, ManipulatorPointId::Anchor(_)) { + return None; + } + let vector = network_interface.compute_modified_vector(layer)?; + let point_position = manipulator_point_id.get_position(&vector)?; + let selected_shape_state = self.selected_shape_state.get(&layer)?; // Check if point is visible under current overlay mode or not - let selected_segments = selected_segments(network_interface, self); + let selected_segments_for_layer = selected_segments_for_layer(&vector, selected_shape_state); let selected_points = self.selected_points().cloned().collect::>(); - if !is_visible_point(manipulator_point_id, &vector_data, path_overlay_mode, frontier_handles_info, selected_segments, &selected_points) { + let frontier_handles_for_layer = frontier_handles_info.and_then(|frontier_handles| frontier_handles.get(&layer)); + if !is_visible_point( + manipulator_point_id, + &vector, + path_overlay_mode, + frontier_handles_for_layer, + &selected_segments_for_layer, + &selected_points, + ) { return None; } - let selected_shape_state = self.selected_shape_state.get(&layer)?; let already_selected = selected_shape_state.is_point_selected(manipulator_point_id); // Offset to snap the selected point to the cursor @@ -638,7 +655,7 @@ impl ShapeState { .flat_map(|(layer, state)| state.selected_points.iter().map(|&point_id| ManipulatorPointInfo { layer: *layer, point_id })) .collect(); - let selection_info = SelectedPointsInfo { points, offset, vector_data }; + let selection_info = SelectedPointsInfo { points, offset, vector }; // Return the current selection state and info return Some((already_selected, Some(selection_info))); @@ -658,16 +675,14 @@ impl ShapeState { /// Selects all anchors connected to the selected subpath, and deselects all handles, for the given layer. pub fn select_connected(&mut self, document: &DocumentMessageHandler, layer: LayerNodeIdentifier, mouse: DVec2, points: bool, segments: bool) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - return; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; let to_viewport = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); let layer_mouse = to_viewport.inverse().transform_point2(mouse); let state = self.selected_shape_state.entry(layer).or_default(); let mut selected_stack = Vec::new(); // Find all subpaths that have been clicked - for stroke in vector_data.stroke_bezier_paths() { + for stroke in vector.stroke_bezier_paths() { if stroke.contains_point(layer_mouse) { if let Some(first) = stroke.manipulator_groups().first() { selected_stack.push(first.id); @@ -679,12 +694,12 @@ impl ShapeState { if selected_stack.is_empty() { // Fall back on just selecting all points/segments in the layer if points { - for &point in vector_data.point_domain.ids() { + for &point in vector.point_domain.ids() { state.select_point(ManipulatorPointId::Anchor(point)); } } if segments { - for &segment in vector_data.segment_domain.ids() { + for &segment in vector.segment_domain.ids() { state.select_segment(segment); } } @@ -696,7 +711,7 @@ impl ShapeState { while let Some(point) = selected_stack.pop() { if !connected_points.contains(&point) { connected_points.insert(point); - selected_stack.extend(vector_data.connected_points(point)); + selected_stack.extend(vector.connected_points(point)); } } @@ -705,7 +720,7 @@ impl ShapeState { } if segments { - for (id, _, start, end) in vector_data.segment_bezier_iter() { + for (id, _, start, end) in vector.segment_bezier_iter() { if connected_points.contains(&start) || connected_points.contains(&end) { state.select_segment(id); } @@ -726,19 +741,33 @@ impl ShapeState { } } + /// Selects all segments for the selected layers. + pub fn select_all_segments_in_selected_layers(&mut self, document: &DocumentMessageHandler) { + for (&layer, state) in self.selected_shape_state.iter_mut() { + Self::select_all_segments_in_layer_with_state(document, layer, state); + } + } + /// Internal helper function that selects all anchors, and deselects all handles, for a layer given its [`LayerNodeIdentifier`] and [`SelectedLayerState`]. fn select_all_anchors_in_layer_with_state(document: &DocumentMessageHandler, layer: LayerNodeIdentifier, state: &mut SelectedLayerState) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - return; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; state.clear_points(); - for &point in vector_data.point_domain.ids() { + for &point in vector.point_domain.ids() { state.select_point(ManipulatorPointId::Anchor(point)) } } + /// Internal helper function that selects all segments, for a layer given its [`LayerNodeIdentifier`] and [`SelectedLayerState`]. + fn select_all_segments_in_layer_with_state(document: &DocumentMessageHandler, layer: LayerNodeIdentifier, state: &mut SelectedLayerState) { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; + + for &segment in vector.segment_domain.ids() { + state.select_segment(segment); + } + } + /// Deselects all points (anchors and handles) across every selected layer. pub fn deselect_all_points(&mut self) { for state in self.selected_shape_state.values_mut() { @@ -844,7 +873,7 @@ impl ShapeState { }); } - pub fn move_anchor(&self, point: PointId, vector_data: &VectorData, delta: DVec2, layer: LayerNodeIdentifier, selected: Option<&SelectedLayerState>, responses: &mut VecDeque) { + pub fn move_anchor(&self, point: PointId, vector: &Vector, delta: DVec2, layer: LayerNodeIdentifier, selected: Option<&SelectedLayerState>, responses: &mut VecDeque) { // Move anchor responses.add(GraphOperationMessage::Vector { layer, @@ -852,8 +881,8 @@ impl ShapeState { }); // Move the other handle for a quadratic bezier - for segment in vector_data.end_connected(point) { - let Some((start, _end, bezier)) = vector_data.segment_points_from_id(segment) else { continue }; + for segment in vector.end_connected(point) { + let Some((start, _end, bezier)) = vector.segment_points_from_id(segment) else { continue }; if let BezierHandles::Quadratic { handle } = bezier.handles { if selected.is_some_and(|selected| selected.is_point_selected(ManipulatorPointId::Anchor(start))) { @@ -882,26 +911,30 @@ impl ShapeState { return None; } - let vector_data = network_interface.compute_modified_vector(layer)?; + let vector = network_interface.compute_modified_vector(layer)?; let transform = network_interface.document_metadata().transform_to_document_if_feeds(layer, network_interface).inverse(); let position = transform.transform_point2(new_position); - let current_position = point.get_position(&vector_data)?; + let current_position = point.get_position(&vector)?; let delta = position - current_position; match *point { - ManipulatorPointId::Anchor(point) => self.move_anchor(point, &vector_data, delta, layer, None, responses), + ManipulatorPointId::Anchor(point) => self.move_anchor(point, &vector, delta, layer, None, responses), ManipulatorPointId::PrimaryHandle(segment) => { self.move_primary(segment, delta, layer, responses); - if let Some(handles) = point.get_handle_pair(&vector_data) { - let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; - responses.add(GraphOperationMessage::Vector { layer, modification_type }); + if let Some(handle) = point.as_handle() { + if let Some(handles) = vector.colinear_manipulators.iter().find(|handles| handles[0] == handle || handles[1] == handle) { + let modification_type = VectorModificationType::SetG1Continuous { handles: *handles, enabled: false }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } } } ManipulatorPointId::EndHandle(segment) => { self.move_end(segment, delta, layer, responses); - if let Some(handles) = point.get_handle_pair(&vector_data) { - let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; - responses.add(GraphOperationMessage::Vector { layer, modification_type }); + if let Some(handle) = point.as_handle() { + if let Some(handles) = vector.colinear_manipulators.iter().find(|handles| handles[0] == handle || handles[1] == handle) { + let modification_type = VectorModificationType::SetG1Continuous { handles: *handles, enabled: false }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } } } } @@ -932,28 +965,26 @@ impl ShapeState { if first_is_colinear { ManipulatorAngle::Colinear } else { ManipulatorAngle::Free } } - pub fn convert_manipulator_handles_to_colinear(&self, vector_data: &VectorData, point_id: PointId, responses: &mut VecDeque, layer: LayerNodeIdentifier) { - let Some(anchor_position) = ManipulatorPointId::Anchor(point_id).get_position(vector_data) else { + pub fn convert_manipulator_handles_to_colinear(&self, vector: &Vector, point_id: PointId, responses: &mut VecDeque, layer: LayerNodeIdentifier) { + let Some(anchor_position) = ManipulatorPointId::Anchor(point_id).get_position(vector) else { return; }; - let handles = vector_data.all_connected(point_id).take(2).collect::>(); - let non_zero_handles = handles.iter().filter(|handle| handle.length(vector_data) > 1e-6).count(); + let handles = vector.all_connected(point_id).take(2).collect::>(); + let non_zero_handles = handles.iter().filter(|handle| handle.length(vector) > 1e-6).count(); let handle_segments = handles.iter().map(|handles| handles.segment).collect::>(); // Check if the anchor is connected to linear segments and has no handles - let linear_segments = vector_data.connected_linear_segments(point_id) != 0; + let linear_segments = vector.connected_linear_segments(point_id) != 0; // Grab the next and previous manipulator groups by simply looking at the next / previous index - let points = handles.iter().map(|handle| vector_data.other_point(handle.segment, point_id)); - let anchor_positions = points - .map(|point| point.and_then(|point| ManipulatorPointId::Anchor(point).get_position(vector_data))) - .collect::>(); + let points = handles.iter().map(|handle| vector.other_point(handle.segment, point_id)); + let anchor_positions = points.map(|point| point.and_then(|point| ManipulatorPointId::Anchor(point).get_position(vector))).collect::>(); let mut segment_angle = 0.; let mut segment_count = 0.; for segment in &handle_segments { - let Some(angle) = calculate_segment_angle(point_id, *segment, vector_data, false) else { + let Some(angle) = calculate_segment_angle(point_id, *segment, vector, false) else { continue; }; segment_angle += angle; @@ -986,15 +1017,15 @@ impl ShapeState { if non_zero_handles != 0 && !linear_segments { let [a, b] = handles.as_slice() else { return }; - let (non_zero_handle, zero_handle) = if a.length(vector_data) > 1e-6 { (a, b) } else { (b, a) }; + let (non_zero_handle, zero_handle) = if a.length(vector) > 1e-6 { (a, b) } else { (b, a) }; let Some(direction) = non_zero_handle .to_manipulator_point() - .get_position(vector_data) + .get_position(vector) .and_then(|position| (position - anchor_position).try_normalize()) else { return; }; - let new_position = -direction * non_zero_handle.length(vector_data); + let new_position = -direction * non_zero_handle.length(vector); let modification_type = zero_handle.set_relative_position(new_position); responses.add(GraphOperationMessage::Vector { layer, modification_type }); } else { @@ -1015,7 +1046,7 @@ impl ShapeState { responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Create the opposite handle if it doesn't exist (if it is not a cubic segment) - if handle.opposite().to_manipulator_point().get_position(vector_data).is_none() { + if handle.opposite().to_manipulator_point().get_position(vector).is_none() { let modification_type = handle.opposite().set_relative_position(DVec2::ZERO); responses.add(GraphOperationMessage::Vector { layer, modification_type }); } @@ -1027,17 +1058,66 @@ impl ShapeState { /// If only one handle is selected, the other handle will be moved to match the angle of the selected handle. /// If both or neither handles are selected, the angle of both handles will be averaged from their current angles, weighted by their lengths. /// Assumes all selected manipulators have handles that are already not colinear. + /// + /// For vector meshes, the non-colinear handle which is nearest in the direction of 180ยฐ angle separation becomes colinear with current handle. + /// If there is no such handle, nothing happens. pub fn convert_selected_manipulators_to_colinear_handles(&self, responses: &mut VecDeque, document: &DocumentMessageHandler) { let mut skip_set = HashSet::new(); for (&layer, layer_state) in self.selected_shape_state.iter() { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let transform = document.metadata().transform_to_document_if_feeds(layer, &document.network_interface); for &point in layer_state.selected_points.iter() { - let Some(handles) = point.get_handle_pair(&vector_data) else { continue }; + // Skip a point which has more than 2 segments connected (vector meshes) + if let ManipulatorPointId::Anchor(anchor) = point { + if vector.all_connected(anchor).count() > 2 { + continue; + } + } + + // Here we take handles as the current handle and the most opposite non-colinear-handle + + let is_handle_colinear = |handle: HandleId| -> bool { vector.colinear_manipulators.iter().any(|&handles| handles[0] == handle || handles[1] == handle) }; + + let other_handles = if matches!(point, ManipulatorPointId::Anchor(_)) { + point.get_handle_pair(&vector) + } else { + point.get_all_connected_handles(&vector).and_then(|handles| { + let mut non_colinear_handles = handles.iter().filter(|&handle| !is_handle_colinear(*handle)).clone().collect::>(); + + // Sort these by angle from the current handle + non_colinear_handles.sort_by(|&handle_a, &handle_b| { + let anchor = point.get_anchor_position(&vector).expect("No anchor position for handle"); + let orig_handle_pos = point.get_position(&vector).expect("No handle position"); + + let a_pos = handle_a.to_manipulator_point().get_position(&vector).expect("No handle position"); + let b_pos = handle_b.to_manipulator_point().get_position(&vector).expect("No handle position"); + + let v_orig = (orig_handle_pos - anchor).normalize_or_zero(); + + let v_a = (a_pos - anchor).normalize_or_zero(); + let v_b = (b_pos - anchor).normalize_or_zero(); + + let angle_a = v_orig.angle_to(v_a).abs(); + let angle_b = v_orig.angle_to(v_b).abs(); + + // Sort by descending angle (180ยฐ is furthest) + angle_b.partial_cmp(&angle_a).unwrap_or(std::cmp::Ordering::Equal) + }); + + let current = match point { + ManipulatorPointId::EndHandle(segment) => HandleId::end(segment), + ManipulatorPointId::PrimaryHandle(segment) => HandleId::primary(segment), + ManipulatorPointId::Anchor(_) => unreachable!(), + }; + + non_colinear_handles.first().map(|other| [current, **other]) + }) + }; + + let Some(handles) = other_handles else { continue }; + if skip_set.contains(&handles) || skip_set.contains(&[handles[1], handles[0]]) { continue; }; @@ -1045,13 +1125,13 @@ impl ShapeState { skip_set.insert(handles); let [selected0, selected1] = handles.map(|handle| layer_state.selected_points.contains(&handle.to_manipulator_point())); - let handle_positions = handles.map(|handle| handle.to_manipulator_point().get_position(&vector_data)); + let handle_positions = handles.map(|handle| handle.to_manipulator_point().get_position(&vector)); - let Some(anchor_id) = point.get_anchor(&vector_data) else { continue }; - let Some(anchor) = vector_data.point_domain.position_from_id(anchor_id) else { continue }; + let Some(anchor_id) = point.get_anchor(&vector) else { continue }; + let Some(anchor) = vector.point_domain.position_from_id(anchor_id) else { continue }; - let anchor_points = handles.map(|handle| vector_data.other_point(handle.segment, anchor_id)); - let anchor_positions = anchor_points.map(|point| point.and_then(|point| vector_data.point_domain.position_from_id(point))); + let anchor_points = handles.map(|handle| vector.other_point(handle.segment, anchor_id)); + let anchor_positions = anchor_points.map(|point| point.and_then(|point| vector.point_domain.position_from_id(point))); // If one handle is selected (but both exist), only move the other handle if let (true, [Some(pos0), Some(pos1)]) = ((selected0 ^ selected1), handle_positions) { @@ -1093,7 +1173,7 @@ impl ShapeState { responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Create the opposite handle if it doesn't exist (if it is not a cubic segment) - if handles[index].opposite().to_manipulator_point().get_position(&vector_data).is_none() { + if handles[index].opposite().to_manipulator_point().get_position(&vector).is_none() { let modification_type = handles[index].opposite().set_relative_position(DVec2::ZERO); responses.add(GraphOperationMessage::Vector { layer, modification_type }); } @@ -1120,7 +1200,7 @@ impl ShapeState { responses: &mut VecDeque, ) { for (&layer, state) in &self.selected_shape_state { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let opposing_handles = handle_lengths.as_ref().and_then(|handle_lengths| handle_lengths.get(&layer)); @@ -1136,7 +1216,7 @@ impl ShapeState { // Make a new collection of anchor points which needs to be moved let mut affected_points = state.selected_points.clone(); - for (segment_id, _, start, end) in vector_data.segment_bezier_iter() { + for (segment_id, _, start, end) in vector.segment_bezier_iter() { if state.is_segment_selected(segment_id) { affected_points.insert(ManipulatorPointId::Anchor(start)); affected_points.insert(ManipulatorPointId::Anchor(end)); @@ -1150,28 +1230,28 @@ impl ShapeState { let handle = match point { ManipulatorPointId::Anchor(point) => { - self.move_anchor(point, &vector_data, delta, layer, Some(state), responses); + self.move_anchor(point, &vector, delta, layer, Some(state), responses); continue; } ManipulatorPointId::PrimaryHandle(segment) => HandleId::primary(segment), ManipulatorPointId::EndHandle(segment) => HandleId::end(segment), }; - let Some(anchor_id) = point.get_anchor(&vector_data) else { continue }; + let Some(anchor_id) = point.get_anchor(&vector) else { continue }; if state.is_point_selected(ManipulatorPointId::Anchor(anchor_id)) { continue; } - let Some(anchor_position) = vector_data.point_domain.position_from_id(anchor_id) else { continue }; + let Some(anchor_position) = vector.point_domain.position_from_id(anchor_id) else { continue }; - let Some(handle_position) = point.get_position(&vector_data) else { continue }; + let Some(handle_position) = point.get_position(&vector) else { continue }; let handle_position = handle_position + delta; let modification_type = handle.set_relative_position(handle_position - anchor_position); responses.add(GraphOperationMessage::Vector { layer, modification_type }); - let Some(other) = vector_data.other_colinear_handle(handle) else { continue }; + let Some(other) = vector.other_colinear_handle(handle) else { continue }; if skip_opposite_handle { continue; @@ -1195,7 +1275,7 @@ impl ShapeState { } else { // TODO: Is this equivalent to `transform_to_document_space`? If changed, the before and after should be tested. let transform = document.metadata().document_to_viewport.inverse() * transform_to_viewport_space; - let Some(other_position) = other.to_manipulator_point().get_position(&vector_data) else { + let Some(other_position) = other.to_manipulator_point().get_position(&vector) else { continue; }; let direction = transform.transform_vector2(handle_position - anchor_position).try_normalize(); @@ -1217,9 +1297,9 @@ impl ShapeState { self.selected_shape_state .iter() .filter_map(|(&layer, state)| { - let vector_data = document.network_interface.compute_modified_vector(layer)?; + let vector = document.network_interface.compute_modified_vector(layer)?; let transform = document.metadata().transform_to_document_if_feeds(layer, &document.network_interface); - let opposing_handle_lengths = vector_data + let opposing_handle_lengths = vector .colinear_manipulators .iter() .filter_map(|&handles| { @@ -1227,7 +1307,7 @@ impl ShapeState { // i) Exactly one handle is selected. // ii) The anchor is not selected. - let anchor = handles[0].to_manipulator_point().get_anchor(&vector_data)?; + let anchor = handles[0].to_manipulator_point().get_anchor(&vector)?; let anchor_selected = state.is_point_selected(ManipulatorPointId::Anchor(anchor)); if anchor_selected { return None; @@ -1241,8 +1321,8 @@ impl ShapeState { _ => return None, }; - let opposing_handle_position = other.to_manipulator_point().get_position(&vector_data)?; - let anchor_position = vector_data.point_domain.position_from_id(anchor)?; + let opposing_handle_position = other.to_manipulator_point().get_position(&vector)?; + let anchor_position = vector.point_domain.position_from_id(anchor)?; let opposing_handle_length = transform.transform_vector2(opposing_handle_position - anchor_position).length(); Some((other, opposing_handle_length)) @@ -1253,15 +1333,15 @@ impl ShapeState { .collect::>() } - pub fn dissolve_segment(&self, responses: &mut VecDeque, layer: LayerNodeIdentifier, vector_data: &VectorData, segment: SegmentId, points: [PointId; 2]) { + pub fn dissolve_segment(&self, responses: &mut VecDeque, layer: LayerNodeIdentifier, vector: &Vector, segment: SegmentId, points: [PointId; 2]) { // Checking which point is terminal point - let is_point1_terminal = vector_data.connected_count(points[0]) == 1; - let is_point2_terminal = vector_data.connected_count(points[1]) == 1; + let is_point1_terminal = vector.connected_count(points[0]) == 1; + let is_point2_terminal = vector.connected_count(points[1]) == 1; // Delete the segment and terminal points let modification_type = VectorModificationType::RemoveSegment { id: segment }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); - for &handles in vector_data.colinear_manipulators.iter().filter(|handles| handles.iter().any(|handle| handle.segment == segment)) { + for &handles in vector.colinear_manipulators.iter().filter(|handles| handles.iter().any(|handle| handle.segment == segment)) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); } @@ -1276,27 +1356,27 @@ impl ShapeState { } } - fn dissolve_anchor(anchor: PointId, responses: &mut VecDeque, layer: LayerNodeIdentifier, vector_data: &VectorData) -> Option<[(HandleId, PointId); 2]> { + fn dissolve_anchor(anchor: PointId, responses: &mut VecDeque, layer: LayerNodeIdentifier, vector: &Vector) -> Option<[(HandleId, PointId); 2]> { // Delete point let modification_type = VectorModificationType::RemovePoint { id: anchor }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Delete connected segments - for HandleId { segment, .. } in vector_data.all_connected(anchor) { + for HandleId { segment, .. } in vector.all_connected(anchor) { let modification_type = VectorModificationType::RemoveSegment { id: segment }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); - for &handles in vector_data.colinear_manipulators.iter().filter(|handles| handles.iter().any(|handle| handle.segment == segment)) { + for &handles in vector.colinear_manipulators.iter().filter(|handles| handles.iter().any(|handle| handle.segment == segment)) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); } } // Add in new segment if possible - let mut handles = ManipulatorPointId::Anchor(anchor).get_handle_pair(vector_data)?; + let mut handles = ManipulatorPointId::Anchor(anchor).get_handle_pair(vector)?; handles.reverse(); let opposites = handles.map(|handle| handle.opposite()); - let [Some(start), Some(end)] = opposites.map(|opposite| opposite.to_manipulator_point().get_anchor(vector_data)) else { + let [Some(start), Some(end)] = opposites.map(|opposite| opposite.to_manipulator_point().get_anchor(vector)) else { return None; }; Some([(handles[0], start), (handles[1], end)]) @@ -1307,17 +1387,15 @@ impl ShapeState { for (&layer, state) in &mut self.selected_shape_state { let mut missing_anchors = HashMap::new(); let mut deleted_anchors = HashSet::new(); - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let selected_segments = &state.selected_segments; for point in std::mem::take(&mut state.selected_points) { match point { ManipulatorPointId::Anchor(anchor) => { - if let Some(handles) = Self::dissolve_anchor(anchor, responses, layer, &vector_data) { - if !vector_data.all_connected(anchor).any(|a| selected_segments.contains(&a.segment)) { + if let Some(handles) = Self::dissolve_anchor(anchor, responses, layer, &vector) { + if !vector.all_connected(anchor).any(|a| selected_segments.contains(&a.segment)) && vector.all_connected(anchor).count() <= 2 { missing_anchors.insert(anchor, handles); } } @@ -1331,7 +1409,7 @@ impl ShapeState { responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Disable the g1 continuous - for &handles in &vector_data.colinear_manipulators { + for &handles in &vector.colinear_manipulators { if handles.contains(&handle) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -1369,11 +1447,8 @@ impl ShapeState { // Grab the handles from the opposite side of the segment(s) being deleted and make it relative to the anchor let [handle_start, handle_end] = [start, end].map(|(handle, _)| { let handle = handle.opposite(); - let handle_position = handle.to_manipulator_point().get_position(&vector_data); - let relative_position = handle - .to_manipulator_point() - .get_anchor(&vector_data) - .and_then(|anchor| vector_data.point_domain.position_from_id(anchor)); + let handle_position = handle.to_manipulator_point().get_position(&vector); + let relative_position = handle.to_manipulator_point().get_anchor(&vector).and_then(|anchor| vector.point_domain.position_from_id(anchor)); handle_position.and_then(|handle| relative_position.map(|relative| handle - relative)).unwrap_or_default() }); @@ -1387,12 +1462,12 @@ impl ShapeState { responses.add(GraphOperationMessage::Vector { layer, modification_type }); - for &handles in vector_data.colinear_manipulators.iter() { + for &handles in vector.colinear_manipulators.iter() { if !handles.iter().any(|&handle| handle == start.0.opposite() || handle == end.0.opposite()) { continue; } - let Some(anchor) = handles[0].to_manipulator_point().get_anchor(&vector_data) else { continue }; + let Some(anchor) = handles[0].to_manipulator_point().get_anchor(&vector) else { continue }; let Some(other) = handles.iter().find(|&&handle| handle != start.0.opposite() && handle != end.0.opposite()) else { continue; }; @@ -1415,13 +1490,26 @@ impl ShapeState { pub fn delete_selected_segments(&mut self, document: &DocumentMessageHandler, responses: &mut VecDeque) { for (&layer, state) in &self.selected_shape_state { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; - for (segment, _, start, end) in vector_data.segment_bezier_iter() { + for (segment, _, start, end) in vector.segment_bezier_iter() { if state.selected_segments.contains(&segment) { - self.dissolve_segment(responses, layer, &vector_data, segment, [start, end]); + self.dissolve_segment(responses, layer, &vector, segment, [start, end]); + } + } + } + } + + pub fn delete_hanging_selected_anchors(&mut self, document: &DocumentMessageHandler, responses: &mut VecDeque) { + for (&layer, state) in &self.selected_shape_state { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + + for point in &state.selected_points { + if let ManipulatorPointId::Anchor(anchor) = point { + if vector.all_connected(*anchor).all(|segment| state.is_segment_selected(segment.segment)) { + let modification_type = VectorModificationType::RemovePoint { id: *anchor }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } } } } @@ -1429,16 +1517,16 @@ impl ShapeState { pub fn break_path_at_selected_point(&self, document: &DocumentMessageHandler, responses: &mut VecDeque) { for (&layer, state) in &self.selected_shape_state { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; for &delete in &state.selected_points { - let Some(point) = delete.get_anchor(&vector_data) else { continue }; - let Some(pos) = vector_data.point_domain.position_from_id(point) else { continue }; + let Some(point) = delete.get_anchor(&vector) else { continue }; + let Some(pos) = vector.point_domain.position_from_id(point) else { continue }; let mut used_initial_point = false; - for handle in vector_data.all_connected(point) { + for handle in vector.all_connected(point) { // Disable the g1 continuous - for &handles in &vector_data.colinear_manipulators { + for &handles in &vector.colinear_manipulators { if handles.contains(&handle) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -1460,8 +1548,8 @@ impl ShapeState { // Update segment let HandleId { ty, segment } = handle; let modification_type = match ty { - graphene_std::vector::HandleType::Primary => VectorModificationType::SetStartPoint { segment, id }, - graphene_std::vector::HandleType::End => VectorModificationType::SetEndPoint { segment, id }, + graphene_std::vector::misc::HandleType::Primary => VectorModificationType::SetStartPoint { segment, id }, + graphene_std::vector::misc::HandleType::End => VectorModificationType::SetEndPoint { segment, id }, }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -1473,19 +1561,17 @@ impl ShapeState { /// Delete point(s) and adjacent segments. pub fn delete_point_and_break_path(&mut self, document: &DocumentMessageHandler, responses: &mut VecDeque) { for (&layer, state) in &mut self.selected_shape_state { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; for delete in std::mem::take(&mut state.selected_points) { - let Some(point) = delete.get_anchor(&vector_data) else { continue }; + let Some(point) = delete.get_anchor(&vector) else { continue }; // Delete point let modification_type = VectorModificationType::RemovePoint { id: point }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Delete connected segments - for HandleId { segment, .. } in vector_data.all_connected(point) { + for HandleId { segment, .. } in vector.all_connected(point) { let modification_type = VectorModificationType::RemoveSegment { id: segment }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); } @@ -1496,21 +1582,21 @@ impl ShapeState { /// Disable colinear handles colinear. pub fn disable_colinear_handles_state_on_selected(&self, network_interface: &NodeNetworkInterface, responses: &mut VecDeque) { for (&layer, state) in &self.selected_shape_state { - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; for &point in &state.selected_points { if let ManipulatorPointId::Anchor(point) = point { - for connected in vector_data.all_connected(point) { - if let Some(&handles) = vector_data.colinear_manipulators.iter().find(|target| target.iter().any(|&target| target == connected)) { + for connected in vector.all_connected(point) { + if let Some(&handles) = vector.colinear_manipulators.iter().find(|target| target.contains(&connected)) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); } } - } else if let Some(handles) = point.get_handle_pair(&vector_data) { - let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; - responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } else if let Some(handle) = point.as_handle() { + if let Some(handles) = vector.colinear_manipulators.iter().find(|handles| handles[0] == handle || handles[1] == handle) { + let modification_type = VectorModificationType::SetG1Continuous { handles: *handles, enabled: false }; + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } } } } @@ -1544,7 +1630,7 @@ impl ShapeState { mouse_position: DVec2, select_threshold: f64, path_overlay_mode: PathOverlayMode, - frontier_handles_info: Option>>, + frontier_handles_info: Option<&HashMap>>>, ) -> Option<(LayerNodeIdentifier, ManipulatorPointId)> { if self.selected_shape_state.is_empty() { return None; @@ -1558,11 +1644,12 @@ impl ShapeState { // Choose the first point under the threshold if distance_squared < select_threshold_squared { // Check if point is visible in current PathOverlayMode - let vector_data = network_interface.compute_modified_vector(layer)?; - let selected_segments = selected_segments(network_interface, self); + let vector = network_interface.compute_modified_vector(layer)?; + let Some(state) = self.selected_shape_state.get(&layer) else { continue }; + let selected_segments = selected_segments_for_layer(&vector, state); let selected_points = self.selected_points().cloned().collect::>(); - - if !is_visible_point(manipulator_point_id, &vector_data, path_overlay_mode, frontier_handles_info, selected_segments, &selected_points) { + let frontier_handles_for_layer = frontier_handles_info.and_then(|handles_info| handles_info.get(&layer)); + if !is_visible_point(manipulator_point_id, &vector, path_overlay_mode, frontier_handles_for_layer, &selected_segments, &selected_points) { return None; } @@ -1582,11 +1669,11 @@ impl ShapeState { let mut closest_distance_squared: f64 = f64::MAX; let mut manipulator_point = None; - let vector_data = network_interface.compute_modified_vector(layer)?; + let vector = network_interface.compute_modified_vector(layer)?; let viewspace = network_interface.document_metadata().transform_to_viewport_if_feeds(layer, network_interface); // Handles - for (segment_id, bezier, _, _) in vector_data.segment_bezier_iter() { + for (segment_id, bezier, _, _) in vector.segment_bezier_iter() { let bezier = bezier.apply_transformation(|point| viewspace.transform_point2(point)); let valid = |handle: DVec2, control: DVec2| handle.distance_squared(control) > crate::consts::HIDE_HANDLE_DISTANCE.powi(2); @@ -1605,7 +1692,7 @@ impl ShapeState { } // Anchors - for (&id, &point) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { + for (&id, &point) in vector.point_domain.ids().iter().zip(vector.point_domain.positions()) { let point = viewspace.transform_point2(point); if point.distance_squared(pos) <= closest_distance_squared { @@ -1627,11 +1714,11 @@ impl ShapeState { let mut closest = None; let mut closest_distance_squared: f64 = tolerance * tolerance; - let vector_data = network_interface.compute_modified_vector(layer)?; + let vector = network_interface.compute_modified_vector(layer)?; - for (segment, mut bezier, start, end) in vector_data.segment_bezier_iter() { - let t = bezier.project(layer_pos); - let layerspace = bezier.evaluate(TValue::Parametric(t)); + for (segment_id, mut segment, start, end) in vector.segment_iter() { + let t = segment.nearest(dvec2_to_point(layer_pos), DEFAULT_ACCURACY).t; + let layerspace = point_to_dvec2(segment.eval(t)); let screenspace = transform.transform_point2(layerspace); let distance_squared = screenspace.distance_squared(position); @@ -1640,20 +1727,22 @@ impl ShapeState { closest_distance_squared = distance_squared; // Convert to linear if handes are on top of control points - if let bezier_rs::BezierHandles::Cubic { handle_start, handle_end } = bezier.handles { - if handle_start.abs_diff_eq(bezier.start(), f64::EPSILON * 100.) && handle_end.abs_diff_eq(bezier.end(), f64::EPSILON * 100.) { - bezier = Bezier::from_linear_dvec2(bezier.start, bezier.end); + let PathSegPoints { p0: _, p1, p2, p3: _ } = pathseg_points(segment); + if let (Some(p1), Some(p2)) = (p1, p2) { + let segment_points = pathseg_points(segment); + if p1.abs_diff_eq(segment_points.p0, f64::EPSILON * 100.) && p2.abs_diff_eq(segment_points.p3, f64::EPSILON * 100.) { + segment = PathSeg::Line(Line::new(segment.start(), segment.end())); } } - let primary_handle = vector_data.colinear_manipulators.iter().find(|handles| handles.contains(&HandleId::primary(segment))); - let end_handle = vector_data.colinear_manipulators.iter().find(|handles| handles.contains(&HandleId::end(segment))); - let primary_handle = primary_handle.and_then(|&handles| handles.into_iter().find(|handle| handle.segment != segment)); - let end_handle = end_handle.and_then(|&handles| handles.into_iter().find(|handle| handle.segment != segment)); + let primary_handle = vector.colinear_manipulators.iter().find(|handles| handles.contains(&HandleId::primary(segment_id))); + let end_handle = vector.colinear_manipulators.iter().find(|handles| handles.contains(&HandleId::end(segment_id))); + let primary_handle = primary_handle.and_then(|&handles| handles.into_iter().find(|handle| handle.segment != segment_id)); + let end_handle = end_handle.and_then(|&handles| handles.into_iter().find(|handle| handle.segment != segment_id)); closest = Some(ClosestSegment { - segment, - bezier, + segment: segment_id, + bezier: segment, points: [start, end], colinear: [primary_handle, end_handle], t, @@ -1677,13 +1766,13 @@ impl ShapeState { } pub fn get_dragging_state(&self, network_interface: &NodeNetworkInterface) -> PointSelectState { for &layer in self.selected_shape_state.keys() { - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; for point in self.selected_points() { if point.as_anchor().is_some() { return PointSelectState::Anchor; } - if point.get_handle_pair(&vector_data).is_some() { + if point.get_handle_pair(&vector).is_some() { return PointSelectState::HandleWithPair; } } @@ -1694,13 +1783,13 @@ impl ShapeState { /// Returns true if at least one handle with pair is selected pub fn handle_with_pair_selected(&mut self, network_interface: &NodeNetworkInterface) -> bool { for &layer in self.selected_shape_state.keys() { - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; for point in self.selected_points() { if point.as_anchor().is_some() { return false; } - if point.get_handle_pair(&vector_data).is_some() { + if point.get_handle_pair(&vector).is_some() { return true; } } @@ -1714,15 +1803,46 @@ impl ShapeState { let mut handles_to_update = Vec::new(); for &layer in self.selected_shape_state.keys() { - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; for point in self.selected_points() { if point.as_anchor().is_some() { continue; } - if let Some(handles) = point.get_handle_pair(&vector_data) { - // handle[0] is selected, handle[1] is opposite / mirror handle - handles_to_update.push((layer, handles[0].to_manipulator_point(), handles[1].to_manipulator_point())); + + if let Some(other_handles) = point.get_all_connected_handles(&vector) { + // Find the next closest handle in the clockwise sense + let mut candidates = other_handles.clone(); + candidates.sort_by(|&handle_a, &handle_b| { + let anchor = point.get_anchor_position(&vector).expect("No anchor position for handle"); + let orig_handle_pos = point.get_position(&vector).expect("No handle position"); + + let a_pos = handle_a.to_manipulator_point().get_position(&vector).expect("No handle position"); + let b_pos = handle_b.to_manipulator_point().get_position(&vector).expect("No handle position"); + + let v_orig = (orig_handle_pos - anchor).normalize_or_zero(); + + let v_a = (a_pos - anchor).normalize_or_zero(); + let v_b = (b_pos - anchor).normalize_or_zero(); + + let signed_angle = |base: DVec2, to: DVec2| -> f64 { + let angle = base.angle_to(to); + let cross = base.perp_dot(to); + + if cross < 0. { TAU - angle } else { angle } + }; + + let angle_a = signed_angle(v_orig, v_a); + let angle_b = signed_angle(v_orig, v_b); + + angle_a.partial_cmp(&angle_b).unwrap_or(std::cmp::Ordering::Equal) + }); + + if candidates.is_empty() { + continue; + } + + handles_to_update.push((layer, *point, candidates[0].to_manipulator_point())); } } } @@ -1746,13 +1866,11 @@ impl ShapeState { let mut points_to_select: Vec<(LayerNodeIdentifier, Option, Option)> = Vec::new(); for &layer in self.selected_shape_state.keys() { - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; for point in self.selected_points().filter(|point| point.as_handle().is_some()) { - let anchor = point.get_anchor(&vector_data); - match point.get_handle_pair(&vector_data) { + let anchor = point.get_anchor(&vector); + match point.get_handle_pair(&vector) { Some(handles) => { points_to_select.push((layer, anchor, Some(handles[1].to_manipulator_point()))); } @@ -1775,58 +1893,69 @@ impl ShapeState { } } - pub fn select_points_by_manipulator_id(&mut self, points: &Vec) { - let layers_to_modify: Vec<_> = self.selected_shape_state.keys().cloned().collect(); + pub fn select_anchor_and_connected_handles(&mut self, network_interface: &NodeNetworkInterface) { + let mut non_empty_layers = self.selected_shape_state.iter_mut().filter(|(_, state)| !state.is_empty()); - for layer in layers_to_modify { - if let Some(state) = self.selected_shape_state.get_mut(&layer) { - for point in points { - state.select_point(*point); - } + let Some((layer, state)) = non_empty_layers.next() else { return }; + if non_empty_layers.next().is_some() { + return; + } + let Some(vector) = network_interface.compute_modified_vector(*layer) else { return }; + + // Get the current point and its connected handles + let selected_points = state.selected_points.clone(); + if let Some(point) = selected_points.iter().next() { + if let Some(anchor) = point.get_anchor(&vector) { + state.select_point(ManipulatorPointId::Anchor(anchor)); + } + if let Some(handles) = point.get_handle_pair(&vector) { + state.select_point(handles[0].to_manipulator_point()); + state.select_point(handles[1].to_manipulator_point()); } } } - /// Converts a nearby clicked anchor point's handles between sharp (zero-length handles) and smooth (pulled-apart handle(s)). - /// If both handles aren't zero-length, they are set that. If both are zero-length, they are stretched apart by a reasonable amount. - /// This can can be activated by double clicking on an anchor with the Path tool. - pub fn flip_smooth_sharp(&self, network_interface: &NodeNetworkInterface, target: glam::DVec2, tolerance: f64, responses: &mut VecDeque) -> bool { - let mut process_layer = |layer| { - let vector_data = network_interface.compute_modified_vector(layer)?; - let transform_to_screenspace = network_interface.document_metadata().transform_to_viewport_if_feeds(layer, network_interface); - - let mut result = None; - let mut closest_distance_squared = tolerance * tolerance; - - // Find the closest anchor point on the current layer - for (&id, &anchor) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { - let screenspace = transform_to_screenspace.transform_point2(anchor); - let distance_squared = screenspace.distance_squared(target); - - if distance_squared < closest_distance_squared { - closest_distance_squared = distance_squared; - result = Some((id, anchor)); - } + pub fn select_points_by_layer_and_id(&mut self, points: &HashMap>) { + for (layer, points) in points { + if let Some(state) = self.selected_shape_state.get_mut(layer) { + points.iter().for_each(|point| state.select_point(*point)); } + } + } - let (id, anchor) = result?; - let handles = vector_data.all_connected(id); - let positions = handles - .filter_map(|handle| handle.to_manipulator_point().get_position(&vector_data)) - .filter(|&handle| anchor.abs_diff_eq(handle, 1e-5)) - .count(); + pub fn select_point_by_layer_and_id(&mut self, point: ManipulatorPointId, layer: LayerNodeIdentifier) { + if let Some(state) = self.selected_shape_state.get_mut(&layer) { + state.select_point(point); + } + } - // Check if the anchor is connected to linear segments. - let one_or_more_segment_linear = vector_data.connected_linear_segments(id) != 0; + /// Converts all selected anchor points' handles between sharp (zero-length handles) and smooth (pulled-apart colinear handle(s)). + /// If both handles aren't zero-length, they are set to that. If both are zero-length, they are stretched apart by a reasonable amount. + /// This can can be activated by double clicking on an anchor with the Path tool. + pub fn flip_smooth_sharp(&self, network_interface: &NodeNetworkInterface, responses: &mut VecDeque) { + let mut process_layer = |layer: LayerNodeIdentifier, selected_points: &HashSet| { + let vector = network_interface.compute_modified_vector(layer)?; // Check by comparing the handle positions to the anchor if this manipulator group is a point - for point in self.selected_points() { + for point in selected_points { let Some(point_id) = point.as_anchor() else { continue }; + let anchor = point.get_position(&vector)?; + let handles = vector.all_connected(point_id); + + // TODO: Check if this method of finding non-colinear is really required + let positions = handles + .filter_map(|handle| handle.to_manipulator_point().get_position(&vector)) + .filter(|&handle| anchor.abs_diff_eq(handle, 1e-5)) + .count(); + + // Check if the anchor is connected to linear segments. + let one_or_more_segment_linear = vector.connected_linear_segments(point_id) != 0; + if positions != 0 || one_or_more_segment_linear { - self.convert_manipulator_handles_to_colinear(&vector_data, point_id, responses, layer); + self.convert_manipulator_handles_to_colinear(&vector, point_id, responses, layer); } else { - for handle in vector_data.all_connected(point_id) { - let Some(bezier) = vector_data.segment_from_id(handle.segment) else { continue }; + for handle in vector.all_connected(point_id) { + let Some(bezier) = vector.segment_from_id(handle.segment) else { continue }; match bezier.handles { BezierHandles::Linear => {} @@ -1837,7 +1966,7 @@ impl ShapeState { responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Set the manipulator to have non-colinear handles - for &handles in &vector_data.colinear_manipulators { + for &handles in &vector.colinear_manipulators { if handles.contains(&HandleId::primary(segment)) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -1850,7 +1979,7 @@ impl ShapeState { responses.add(GraphOperationMessage::Vector { layer, modification_type }); // Set the manipulator to have non-colinear handles - for &handles in &vector_data.colinear_manipulators { + for &handles in &vector.colinear_manipulators { if handles.contains(&handle) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -1865,13 +1994,10 @@ impl ShapeState { Some(true) }; - for &layer in self.selected_shape_state.keys() { - if let Some(result) = process_layer(layer) { - return result; - } - } - - false + self.selected_shape_state.iter().for_each(|(layer, state)| { + let selected_points = &state.selected_points; + process_layer(*layer, selected_points); + }); } #[allow(clippy::too_many_arguments)] @@ -1881,36 +2007,106 @@ impl ShapeState { selection_shape: SelectionShape, selection_change: SelectionChange, path_overlay_mode: PathOverlayMode, - frontier_handles_info: Option>>, + frontier_handles_info: Option<&HashMap>>>, select_segments: bool, + select_points: bool, // Here, "selection mode" represents touched or enclosed, not to be confused with editing modes selection_mode: SelectionMode, ) { - let selected_points = self.selected_points().cloned().collect::>(); - let selected_segments = selected_segments(network_interface, self); + let (points_inside, segments_inside) = self.get_inside_points_and_segments( + network_interface, + selection_shape, + path_overlay_mode, + frontier_handles_info, + select_segments, + select_points, + selection_mode, + ); - for (&layer, state) in &mut self.selected_shape_state { - if selection_change == SelectionChange::Clear { - state.clear_points(); - state.clear_segments(); + if selection_change == SelectionChange::Clear { + self.deselect_all_points(); + self.deselect_all_segments(); + } + + for (layer, points) in points_inside { + let Some(state) = self.selected_shape_state.get_mut(&layer) else { continue }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; + + for point in points { + match (point, selection_change) { + (_, SelectionChange::Shrink) => state.deselect_point(point), + (ManipulatorPointId::EndHandle(_) | ManipulatorPointId::PrimaryHandle(_), _) => { + let handle = point.as_handle().expect("Handle cannot be converted"); + if handle.length(&vector) > 0. { + state.select_point(point); + } + } + (_, _) => state.select_point(point), + } + } + } + + for (layer, segments) in segments_inside { + let Some(state) = self.selected_shape_state.get_mut(&layer) else { continue }; + match selection_change { + SelectionChange::Shrink => segments.iter().for_each(|segment| state.deselect_segment(*segment)), + _ => segments.iter().for_each(|segment| state.select_segment(*segment)), } - let vector_data = network_interface.compute_modified_vector(layer); - let Some(vector_data) = vector_data else { continue }; + // Also select/deselect the endpoints of respective segments + let Some(vector) = network_interface.compute_modified_vector(layer) else { continue }; + if !select_points && select_segments { + vector + .segment_bezier_iter() + .filter(|(segment, _, _, _)| segments.contains(segment)) + .for_each(|(_, _, start, end)| match selection_change { + SelectionChange::Shrink => { + state.deselect_point(ManipulatorPointId::Anchor(start)); + state.deselect_point(ManipulatorPointId::Anchor(end)); + } + _ => { + state.select_point(ManipulatorPointId::Anchor(start)); + state.select_point(ManipulatorPointId::Anchor(end)); + } + }); + } + } + } + + #[allow(clippy::too_many_arguments)] + pub fn get_inside_points_and_segments( + &mut self, + network_interface: &NodeNetworkInterface, + selection_shape: SelectionShape, + path_overlay_mode: PathOverlayMode, + frontier_handles_info: Option<&HashMap>>>, + select_segments: bool, + select_points: bool, + // Represents if the box/lasso selection touches or encloses the targets (not to be confused with editing modes). + selection_mode: SelectionMode, + ) -> (HashMap>, HashMap>) { + let selected_points = self.selected_points().cloned().collect::>(); + + let mut points_inside: HashMap> = HashMap::new(); + let mut segments_inside: HashMap> = HashMap::new(); + + for &layer in self.selected_shape_state.keys() { + let vector = network_interface.compute_modified_vector(layer); + let Some(vector) = vector else { continue }; let transform = network_interface.document_metadata().transform_to_viewport_if_feeds(layer, network_interface); - assert_eq!(vector_data.segment_domain.ids().len(), vector_data.start_point().count()); - assert_eq!(vector_data.segment_domain.ids().len(), vector_data.end_point().count()); - for start in vector_data.start_point() { - assert!(vector_data.point_domain.ids().contains(&start)); + assert_eq!(vector.segment_domain.ids().len(), vector.start_point().count()); + assert_eq!(vector.segment_domain.ids().len(), vector.end_point().count()); + for start in vector.start_point() { + assert!(vector.point_domain.ids().contains(&start)); } - for end in vector_data.end_point() { - assert!(vector_data.point_domain.ids().contains(&end)); + for end in vector.end_point() { + assert!(vector.point_domain.ids().contains(&end)); } let polygon_subpath = if let SelectionShape::Lasso(polygon) = selection_shape { if polygon.len() < 2 { - return; + return (points_inside, segments_inside); } let polygon: Subpath = Subpath::from_anchors_linear(polygon.to_vec(), true); Some(polygon) @@ -1919,21 +2115,24 @@ impl ShapeState { }; // Selection segments - for (id, bezier, _, _) in vector_data.segment_bezier_iter() { + for (id, segment, _, _) in vector.segment_iter() { if select_segments { // Select segments if they lie inside the bounding box or lasso polygon - let segment_bbox = calculate_bezier_bbox(bezier); - let bottom_left = transform.transform_point2(segment_bbox[0]); - let top_right = transform.transform_point2(segment_bbox[1]); + let transformed_segment = Affine::new(transform.to_cols_array()) * segment; + let segment_bbox = transformed_segment.bounding_box(); let select = match selection_shape { - SelectionShape::Box(quad) => { - let enclosed = quad[0].min(quad[1]).cmple(bottom_left).all() && quad[0].max(quad[1]).cmpge(top_right).all(); + SelectionShape::Box(rect) => { + let enclosed = segment_bbox.contains_rect(rect); match selection_mode { SelectionMode::Enclosed => enclosed, _ => { // Check for intersection with the segment - enclosed || is_intersecting(bezier, quad, transform) + enclosed + || rect + .path_segments(DEFAULT_ACCURACY) + .map(|seg| seg.as_line().unwrap()) + .any(|line| !transformed_segment.intersect_line(line).is_empty()) } } } @@ -1941,7 +2140,7 @@ impl ShapeState { let polygon = polygon_subpath.as_ref().expect("If `selection_shape` is a polygon then subpath is constructed beforehand."); // Sample 10 points on the bezier and check if all or some lie inside the polygon - let points = bezier.compute_lookup_table(Some(10), None); + let points = pathseg_compute_lookup_table(segment, Some(10), false); match selection_mode { SelectionMode::Enclosed => points.map(|p| transform.transform_point2(p)).all(|p| polygon.contains_point(p)), _ => points.map(|p| transform.transform_point2(p)).any(|p| polygon.contains_point(p)), @@ -1950,65 +2149,56 @@ impl ShapeState { }; if select { - match selection_change { - SelectionChange::Shrink => state.deselect_segment(id), - _ => state.select_segment(id), - } + segments_inside.entry(layer).or_default().insert(id); } } + let segment_points = pathseg_points(segment); + // Selecting handles - for (position, id) in [(bezier.handle_start(), ManipulatorPointId::PrimaryHandle(id)), (bezier.handle_end(), ManipulatorPointId::EndHandle(id))] { + for (position, id) in [(segment_points.p1, ManipulatorPointId::PrimaryHandle(id)), (segment_points.p2, ManipulatorPointId::EndHandle(id))] { let Some(position) = position else { continue }; let transformed_position = transform.transform_point2(position); let select = match selection_shape { - SelectionShape::Box(quad) => quad[0].min(quad[1]).cmple(transformed_position).all() && quad[0].max(quad[1]).cmpge(transformed_position).all(), + SelectionShape::Box(rect) => rect.contains(dvec2_to_point(transformed_position)), SelectionShape::Lasso(_) => polygon_subpath .as_ref() .expect("If `selection_shape` is a polygon then subpath is constructed beforehand.") .contains_point(transformed_position), }; - if select { - let is_visible_handle = is_visible_point(id, &vector_data, path_overlay_mode, frontier_handles_info.clone(), selected_segments.clone(), &selected_points); + if select && select_points { + let frontier_handles_for_layer = frontier_handles_info.and_then(|frontier_handles| frontier_handles.get(&layer)); + let state = self.selected_shape_state.get(&layer).expect("Cannot find state for layer"); + let selected_segments_for_layer = selected_segments_for_layer(&vector, state); + let is_visible_handle = is_visible_point(id, &vector, path_overlay_mode, frontier_handles_for_layer, &selected_segments_for_layer, &selected_points); if is_visible_handle { - match selection_change { - SelectionChange::Shrink => state.deselect_point(id), - _ => { - // Select only the handles which are of nonzero length - if let Some(handle) = id.as_handle() { - if handle.length(&vector_data) > 0. { - state.select_point(id) - } - } - } - } + points_inside.entry(layer).or_default().insert(id); } } } } // Checking for selection of anchor points - for (&id, &position) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { + for (&id, &position) in vector.point_domain.ids().iter().zip(vector.point_domain.positions()) { let transformed_position = transform.transform_point2(position); let select = match selection_shape { - SelectionShape::Box(quad) => quad[0].min(quad[1]).cmple(transformed_position).all() && quad[0].max(quad[1]).cmpge(transformed_position).all(), + SelectionShape::Box(rect) => rect.contains(dvec2_to_point(transformed_position)), SelectionShape::Lasso(_) => polygon_subpath .as_ref() .expect("If `selection_shape` is a polygon then subpath is constructed beforehand.") .contains_point(transformed_position), }; - if select { - match selection_change { - SelectionChange::Shrink => state.deselect_point(ManipulatorPointId::Anchor(id)), - _ => state.select_point(ManipulatorPointId::Anchor(id)), - } + if select && select_points { + points_inside.entry(layer).or_default().insert(ManipulatorPointId::Anchor(id)); } } } + + (points_inside, segments_inside) } } diff --git a/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs b/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs new file mode 100644 index 0000000000..68803598de --- /dev/null +++ b/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs @@ -0,0 +1,186 @@ +use super::shape_utility::ShapeToolModifierKey; +use super::*; +use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; +use crate::messages::portfolio::document::node_graph::document_node_definitions::resolve_document_node_type; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; +use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeTemplate}; +use crate::messages::tool::common_functionality::gizmos::shape_gizmos::circle_arc_radius_handle::{RadiusHandle, RadiusHandleState}; +use crate::messages::tool::common_functionality::gizmos::shape_gizmos::sweep_angle_gizmo::{SweepAngleGizmo, SweepAngleGizmoState}; +use crate::messages::tool::common_functionality::graph_modification_utils; +use crate::messages::tool::common_functionality::shapes::shape_utility::{ShapeGizmoHandler, arc_outline}; +use crate::messages::tool::tool_messages::tool_prelude::*; +use glam::DAffine2; +use graph_craft::document::NodeInput; +use graph_craft::document::value::TaggedValue; +use graphene_std::vector::misc::ArcType; +use std::collections::VecDeque; + +#[derive(Clone, Debug, Default)] +pub struct ArcGizmoHandler { + sweep_angle_gizmo: SweepAngleGizmo, + arc_radius_handle: RadiusHandle, +} + +impl ArcGizmoHandler { + pub fn new() -> Self { + Self { ..Default::default() } + } +} + +impl ShapeGizmoHandler for ArcGizmoHandler { + fn handle_state(&mut self, selected_shape_layer: LayerNodeIdentifier, mouse_position: DVec2, document: &DocumentMessageHandler, responses: &mut VecDeque) { + self.sweep_angle_gizmo.handle_actions(selected_shape_layer, document, mouse_position); + self.arc_radius_handle.handle_actions(selected_shape_layer, document, mouse_position, responses); + } + + fn is_any_gizmo_hovered(&self) -> bool { + self.sweep_angle_gizmo.hovered() || self.arc_radius_handle.hovered() + } + + fn handle_click(&mut self) { + // If hovering over both the gizmos give priority to sweep angle gizmo + if self.sweep_angle_gizmo.hovered() && self.arc_radius_handle.hovered() { + self.sweep_angle_gizmo.update_state(SweepAngleGizmoState::Dragging); + self.arc_radius_handle.update_state(RadiusHandleState::Inactive); + return; + } + + if self.sweep_angle_gizmo.hovered() { + self.sweep_angle_gizmo.update_state(SweepAngleGizmoState::Dragging); + } + + if self.arc_radius_handle.hovered() { + self.arc_radius_handle.update_state(RadiusHandleState::Dragging); + } + } + + fn handle_update(&mut self, drag_start: DVec2, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { + if self.sweep_angle_gizmo.is_dragging_or_snapped() { + self.sweep_angle_gizmo.update_arc(document, input, responses); + } + + if self.arc_radius_handle.is_dragging() { + self.arc_radius_handle.update_inner_radius(document, input, responses, drag_start); + } + } + + fn dragging_overlays( + &self, + document: &DocumentMessageHandler, + input: &InputPreprocessorMessageHandler, + _shape_editor: &mut &mut crate::messages::tool::common_functionality::shape_editor::ShapeState, + mouse_position: DVec2, + overlay_context: &mut crate::messages::portfolio::document::overlays::utility_types::OverlayContext, + ) { + if self.sweep_angle_gizmo.is_dragging_or_snapped() { + self.sweep_angle_gizmo.overlays(None, document, input, mouse_position, overlay_context); + arc_outline(self.sweep_angle_gizmo.layer, document, overlay_context); + } + + if self.arc_radius_handle.is_dragging() { + self.sweep_angle_gizmo.overlays(self.arc_radius_handle.layer, document, input, mouse_position, overlay_context); + self.arc_radius_handle.overlays(document, overlay_context); + } + } + + fn overlays( + &self, + document: &DocumentMessageHandler, + selected_shape_layer: Option, + input: &InputPreprocessorMessageHandler, + _shape_editor: &mut &mut crate::messages::tool::common_functionality::shape_editor::ShapeState, + mouse_position: DVec2, + overlay_context: &mut crate::messages::portfolio::document::overlays::utility_types::OverlayContext, + ) { + // If hovering over both the gizmos give priority to sweep angle gizmo + if self.sweep_angle_gizmo.hovered() && self.arc_radius_handle.hovered() { + self.sweep_angle_gizmo.overlays(selected_shape_layer, document, input, mouse_position, overlay_context); + return; + } + + if self.arc_radius_handle.hovered() { + let layer = self.arc_radius_handle.layer; + + self.arc_radius_handle.overlays(document, overlay_context); + self.sweep_angle_gizmo.overlays(layer, document, input, mouse_position, overlay_context); + } + + self.sweep_angle_gizmo.overlays(selected_shape_layer, document, input, mouse_position, overlay_context); + self.arc_radius_handle.overlays(document, overlay_context); + + arc_outline(selected_shape_layer.or(self.sweep_angle_gizmo.layer), document, overlay_context); + } + + fn mouse_cursor_icon(&self) -> Option { + if self.sweep_angle_gizmo.hovered() || self.sweep_angle_gizmo.is_dragging_or_snapped() { + return Some(MouseCursorIcon::Default); + } + + if self.arc_radius_handle.hovered() || self.arc_radius_handle.is_dragging() { + return Some(MouseCursorIcon::EWResize); + } + + None + } + + fn cleanup(&mut self) { + self.sweep_angle_gizmo.cleanup(); + self.arc_radius_handle.cleanup(); + } +} +#[derive(Default)] +pub struct Arc; + +impl Arc { + pub fn create_node(arc_type: ArcType) -> NodeTemplate { + let node_type = resolve_document_node_type("Arc").expect("Ellipse node does not exist"); + node_type.node_template_input_override([ + None, + Some(NodeInput::value(TaggedValue::F64(0.5), false)), + Some(NodeInput::value(TaggedValue::F64(0.), false)), + Some(NodeInput::value(TaggedValue::F64(270.), false)), + Some(NodeInput::value(TaggedValue::ArcType(arc_type), false)), + ]) + } + + pub fn update_shape( + document: &DocumentMessageHandler, + ipp: &InputPreprocessorMessageHandler, + layer: LayerNodeIdentifier, + shape_tool_data: &mut ShapeToolData, + modifier: ShapeToolModifierKey, + responses: &mut VecDeque, + ) { + let (center, lock_ratio) = (modifier[0], modifier[1]); + if let Some([start, end]) = shape_tool_data.data.calculate_points(document, ipp, center, lock_ratio) { + let Some(node_id) = graph_modification_utils::get_arc_id(layer, &document.network_interface) else { + return; + }; + + let dimensions = (start - end).abs(); + let mut scale = DVec2::ONE; + let radius: f64; + + // We keep the smaller dimension's scale at 1 and scale the other dimension accordingly + if dimensions.x > dimensions.y { + scale.x = dimensions.x / dimensions.y; + radius = dimensions.y / 2.; + } else { + scale.y = dimensions.y / dimensions.x; + radius = dimensions.x / 2.; + } + + responses.add(NodeGraphMessage::SetInput { + input_connector: InputConnector::node(node_id, 1), + input: NodeInput::value(TaggedValue::F64(radius), false), + }); + + responses.add(GraphOperationMessage::TransformSet { + layer, + transform: DAffine2::from_scale_angle_translation(scale, 0., start.midpoint(end)), + transform_in: TransformIn::Viewport, + skip_rerender: false, + }); + } + } +} diff --git a/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs b/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs new file mode 100644 index 0000000000..d622950260 --- /dev/null +++ b/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs @@ -0,0 +1,120 @@ +use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; +use crate::messages::portfolio::document::node_graph::document_node_definitions::resolve_document_node_type; +use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; +use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; +use crate::messages::portfolio::document::utility_types::network_interface::{InputConnector, NodeTemplate}; +use crate::messages::tool::common_functionality::gizmos::shape_gizmos::circle_arc_radius_handle::{RadiusHandle, RadiusHandleState}; +use crate::messages::tool::common_functionality::graph_modification_utils; +use crate::messages::tool::common_functionality::shape_editor::ShapeState; +use crate::messages::tool::common_functionality::shapes::shape_utility::{ShapeGizmoHandler, ShapeToolModifierKey}; +use crate::messages::tool::tool_messages::shape_tool::ShapeToolData; +use crate::messages::tool::tool_messages::tool_prelude::*; +use glam::DAffine2; +use graph_craft::document::NodeInput; +use graph_craft::document::value::TaggedValue; + +#[derive(Clone, Debug, Default)] +pub struct CircleGizmoHandler { + circle_radius_handle: RadiusHandle, +} + +impl ShapeGizmoHandler for CircleGizmoHandler { + fn is_any_gizmo_hovered(&self) -> bool { + self.circle_radius_handle.hovered() + } + + fn handle_state(&mut self, selected_circle_layer: LayerNodeIdentifier, mouse_position: DVec2, document: &DocumentMessageHandler, responses: &mut VecDeque) { + self.circle_radius_handle.handle_actions(selected_circle_layer, document, mouse_position, responses); + } + + fn handle_click(&mut self) { + if self.circle_radius_handle.hovered() { + self.circle_radius_handle.update_state(RadiusHandleState::Dragging); + } + } + + fn handle_update(&mut self, drag_start: DVec2, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { + if self.circle_radius_handle.is_dragging() { + self.circle_radius_handle.update_inner_radius(document, input, responses, drag_start); + } + } + + fn overlays( + &self, + document: &DocumentMessageHandler, + _selected_circle_layer: Option, + _input: &InputPreprocessorMessageHandler, + _shape_editor: &mut &mut ShapeState, + _mouse_position: DVec2, + overlay_context: &mut OverlayContext, + ) { + self.circle_radius_handle.overlays(document, overlay_context); + } + + fn dragging_overlays( + &self, + document: &DocumentMessageHandler, + _input: &InputPreprocessorMessageHandler, + _shape_editor: &mut &mut ShapeState, + _mouse_position: DVec2, + overlay_context: &mut OverlayContext, + ) { + if self.circle_radius_handle.is_dragging() { + self.circle_radius_handle.overlays(document, overlay_context); + } + } + + fn cleanup(&mut self) { + self.circle_radius_handle.cleanup(); + } + + fn mouse_cursor_icon(&self) -> Option { + if self.circle_radius_handle.hovered() || self.circle_radius_handle.is_dragging() { + return Some(MouseCursorIcon::EWResize); + } + + None + } +} + +#[derive(Default)] +pub struct Circle; + +impl Circle { + pub fn create_node() -> NodeTemplate { + let node_type = resolve_document_node_type("Circle").expect("Circle can't be found"); + node_type.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(0.), false))]) + } + + pub fn update_shape( + document: &DocumentMessageHandler, + ipp: &InputPreprocessorMessageHandler, + layer: LayerNodeIdentifier, + shape_tool_data: &mut ShapeToolData, + modifier: ShapeToolModifierKey, + responses: &mut VecDeque, + ) { + let center = modifier[0]; + let [start, end] = shape_tool_data.data.calculate_circle_points(document, ipp, center); + let Some(node_id) = graph_modification_utils::get_circle_id(layer, &document.network_interface) else { + return; + }; + + let dimensions = (start - end).abs(); + + // We keep the smaller dimension's scale at 1 and scale the other dimension accordingly + let radius: f64 = if dimensions.x > dimensions.y { dimensions.y / 2. } else { dimensions.x / 2. }; + + responses.add(NodeGraphMessage::SetInput { + input_connector: InputConnector::node(node_id, 1), + input: NodeInput::value(TaggedValue::F64(radius), false), + }); + + responses.add(GraphOperationMessage::TransformSet { + layer, + transform: DAffine2::from_scale_angle_translation(DVec2::ONE, 0., start.midpoint(end)), + transform_in: TransformIn::Viewport, + skip_rerender: false, + }); + } +} diff --git a/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs b/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs index 700f3c2779..3cc86193dd 100644 --- a/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs @@ -28,7 +28,7 @@ impl Ellipse { modifier: ShapeToolModifierKey, responses: &mut VecDeque, ) { - let [center, lock_ratio, _, _] = modifier; + let [center, lock_ratio, _] = modifier; if let Some([start, end]) = shape_tool_data.data.calculate_points(document, ipp, center, lock_ratio) { let Some(node_id) = graph_modification_utils::get_ellipse_id(layer, &document.network_interface) else { diff --git a/editor/src/messages/tool/common_functionality/shapes/line_shape.rs b/editor/src/messages/tool/common_functionality/shapes/line_shape.rs index 985457c208..3fed8793e6 100644 --- a/editor/src/messages/tool/common_functionality/shapes/line_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/line_shape.rs @@ -53,7 +53,7 @@ impl Line { modifier: ShapeToolModifierKey, responses: &mut VecDeque, ) { - let [center, _, lock_angle, snap_angle] = modifier; + let [center, snap_angle, lock_angle] = modifier; shape_tool_data.line_data.drag_current = ipp.mouse.position; @@ -210,18 +210,18 @@ mod test_line_tool { async fn get_line_node_inputs(editor: &mut EditorTestUtils) -> Option<(DVec2, DVec2)> { let document = editor.active_document(); let network_interface = &document.network_interface; - let node_id = network_interface + + network_interface .selected_nodes() .selected_visible_and_unlocked_layers(network_interface) .filter_map(|layer| { - let node_inputs = NodeGraphLayer::new(layer, &network_interface).find_node_inputs("Line")?; + let node_inputs = NodeGraphLayer::new(layer, network_interface).find_node_inputs("Line")?; let (Some(&TaggedValue::DVec2(start)), Some(&TaggedValue::DVec2(end))) = (node_inputs[1].as_value(), node_inputs[2].as_value()) else { return None; }; Some((start, end)) }) - .next(); - node_id + .next() } #[tokio::test] @@ -245,11 +245,7 @@ mod test_line_tool { editor.new_document().await; editor.handle_message(NavigationMessage::CanvasZoomSet { zoom_factor: 2. }).await; editor.handle_message(NavigationMessage::CanvasPan { delta: DVec2::new(100., 50.) }).await; - editor - .handle_message(NavigationMessage::CanvasTiltSet { - angle_radians: (30. as f64).to_radians(), - }) - .await; + editor.handle_message(NavigationMessage::CanvasTiltSet { angle_radians: 30_f64.to_radians() }).await; editor.drag_tool(ToolType::Line, 0., 0., 100., 100., ModifierKeys::empty()).await; if let Some((start_input, end_input)) = get_line_node_inputs(&mut editor).await { let document = editor.active_document(); @@ -261,15 +257,11 @@ mod test_line_tool { assert!( (start_input - expected_start).length() < 1., - "Start point should match expected document coordinates. Got {:?}, expected {:?}", - start_input, - expected_start + "Start point should match expected document coordinates. Got {start_input:?}, expected {expected_start:?}" ); assert!( (end_input - expected_end).length() < 1., - "End point should match expected document coordinates. Got {:?}, expected {:?}", - end_input, - expected_end + "End point should match expected document coordinates. Got {end_input:?}, expected {expected_end:?}" ); } else { panic!("Line was not created successfully with transformed viewport"); @@ -282,27 +274,19 @@ mod test_line_tool { editor.new_document().await; editor.drag_tool(ToolType::Line, 0., 0., 100., 100., ModifierKeys::CONTROL).await; if let Some((start_input, end_input)) = get_line_node_inputs(&mut editor).await { - match (start_input, end_input) { - (start_input, end_input) => { - let line_vec = end_input - start_input; - let original_angle = line_vec.angle_to(DVec2::X); - editor.drag_tool(ToolType::Line, 0., 0., 200., 50., ModifierKeys::CONTROL).await; - if let Some((updated_start, updated_end)) = get_line_node_inputs(&mut editor).await { - match (updated_start, updated_end) { - (updated_start, updated_end) => { - let updated_line_vec = updated_end - updated_start; - let updated_angle = updated_line_vec.angle_to(DVec2::X); - print!("{:?}", original_angle); - print!("{:?}", updated_angle); - assert!( - line_vec.normalize().dot(updated_line_vec.normalize()).abs() - 1. < 1e-6, - "Line angle should be locked when Ctrl is kept pressed" - ); - assert!((updated_start - updated_end).length() > 1., "Line should be able to change length when Ctrl is kept pressed"); - } - } - } - } + let line_vec = end_input - start_input; + let original_angle = line_vec.angle_to(DVec2::X); + editor.drag_tool(ToolType::Line, 0., 0., 200., 50., ModifierKeys::CONTROL).await; + if let Some((updated_start, updated_end)) = get_line_node_inputs(&mut editor).await { + let updated_line_vec = updated_end - updated_start; + let updated_angle = updated_line_vec.angle_to(DVec2::X); + print!("{original_angle:?}"); + print!("{updated_angle:?}"); + assert!( + line_vec.normalize().dot(updated_line_vec.normalize()).abs() - 1. < 1e-6, + "Line angle should be locked when Ctrl is kept pressed" + ); + assert!((updated_start - updated_end).length() > 1., "Line should be able to change length when Ctrl is kept pressed"); } } } @@ -313,14 +297,10 @@ mod test_line_tool { editor.new_document().await; editor.drag_tool(ToolType::Line, 100., 100., 200., 100., ModifierKeys::ALT).await; if let Some((start_input, end_input)) = get_line_node_inputs(&mut editor).await { - match (start_input, end_input) { - (start_input, end_input) => { - let expected_start = DVec2::new(0., 100.); - let expected_end = DVec2::new(200., 100.); - assert!((start_input - expected_start).length() < 1., "Start point should be near (0, 100)"); - assert!((end_input - expected_end).length() < 1., "End point should be near (200, 100)"); - } - } + let expected_start = DVec2::new(0., 100.); + let expected_end = DVec2::new(200., 100.); + assert!((start_input - expected_start).length() < 1., "Start point should be near (0, 100)"); + assert!((end_input - expected_end).length() < 1., "End point should be near (200, 100)"); } } diff --git a/editor/src/messages/tool/common_functionality/shapes/mod.rs b/editor/src/messages/tool/common_functionality/shapes/mod.rs index 44f40b5982..a994ac52d1 100644 --- a/editor/src/messages/tool/common_functionality/shapes/mod.rs +++ b/editor/src/messages/tool/common_functionality/shapes/mod.rs @@ -1,3 +1,5 @@ +pub mod arc_shape; +pub mod circle_shape; pub mod ellipse_shape; pub mod line_shape; pub mod polygon_shape; diff --git a/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs b/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs index 82dcf10cfc..ef90e7a4fa 100644 --- a/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs @@ -67,7 +67,7 @@ impl ShapeGizmoHandler for PolygonGizmoHandler { overlay_context: &mut OverlayContext, ) { self.number_of_points_dial.overlays(document, selected_polygon_layer, shape_editor, mouse_position, overlay_context); - self.point_radius_handle.overlays(selected_polygon_layer, document, input, mouse_position, overlay_context); + self.point_radius_handle.overlays(selected_polygon_layer, document, input, overlay_context); polygon_outline(selected_polygon_layer, document, overlay_context); } @@ -85,10 +85,22 @@ impl ShapeGizmoHandler for PolygonGizmoHandler { } if self.point_radius_handle.is_dragging_or_snapped() { - self.point_radius_handle.overlays(None, document, input, mouse_position, overlay_context); + self.point_radius_handle.overlays(None, document, input, overlay_context); } } + fn mouse_cursor_icon(&self) -> Option { + if self.number_of_points_dial.is_dragging() || self.number_of_points_dial.is_hovering() { + return Some(MouseCursorIcon::EWResize); + } + + if self.point_radius_handle.is_dragging_or_snapped() || self.point_radius_handle.hovered() { + return Some(MouseCursorIcon::Default); + } + + None + } + fn cleanup(&mut self) { self.number_of_points_dial.cleanup(); self.point_radius_handle.cleanup(); @@ -112,7 +124,7 @@ impl Polygon { modifier: ShapeToolModifierKey, responses: &mut VecDeque, ) { - let [center, lock_ratio, _, _] = modifier; + let [center, lock_ratio, _] = modifier; if let Some([start, end]) = shape_tool_data.data.calculate_points(document, ipp, center, lock_ratio) { // TODO: We need to determine how to allow the polygon node to make irregular shapes diff --git a/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs b/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs index cbd6722960..56cdbe4d1f 100644 --- a/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs @@ -28,7 +28,7 @@ impl Rectangle { modifier: ShapeToolModifierKey, responses: &mut VecDeque, ) { - let [center, lock_ratio, _, _] = modifier; + let [center, lock_ratio, _] = modifier; if let Some([start, end]) = shape_tool_data.data.calculate_points(document, ipp, center, lock_ratio) { let Some(node_id) = graph_modification_utils::get_rectangle_id(layer, &document.network_interface) else { diff --git a/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs b/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs index 955984150b..17c7f8e574 100644 --- a/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs +++ b/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs @@ -1,4 +1,6 @@ use super::ShapeToolData; +use crate::consts::{ARC_SWEEP_GIZMO_RADIUS, ARC_SWEEP_GIZMO_TEXT_HEIGHT}; +use crate::messages::frontend::utility_types::MouseCursorIcon; use crate::messages::message::Message; use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; @@ -9,12 +11,12 @@ use crate::messages::tool::common_functionality::shape_editor::ShapeState; use crate::messages::tool::common_functionality::transformation_cage::BoundingBoxManager; use crate::messages::tool::tool_messages::tool_prelude::Key; use crate::messages::tool::utility_types::*; -use bezier_rs::Subpath; use glam::{DAffine2, DMat2, DVec2}; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::subpath::{self, Subpath}; use graphene_std::vector::click_target::ClickTargetType; -use graphene_std::vector::misc::dvec2_to_point; +use graphene_std::vector::misc::{ArcType, dvec2_to_point}; use kurbo::{BezPath, PathEl, Shape}; use std::collections::VecDeque; use std::f64::consts::{PI, TAU}; @@ -23,10 +25,12 @@ use std::f64::consts::{PI, TAU}; pub enum ShapeType { #[default] Polygon = 0, - Star = 1, - Rectangle = 2, - Ellipse = 3, - Line = 4, + Star, + Circle, + Arc, + Rectangle, + Ellipse, + Line, } impl ShapeType { @@ -34,6 +38,8 @@ impl ShapeType { (match self { Self::Polygon => "Polygon", Self::Star => "Star", + Self::Circle => "Circle", + Self::Arc => "Arc", Self::Rectangle => "Rectangle", Self::Ellipse => "Ellipse", Self::Line => "Line", @@ -71,7 +77,7 @@ impl ShapeType { } } -pub type ShapeToolModifierKey = [Key; 4]; +pub type ShapeToolModifierKey = [Key; 3]; /// The `ShapeGizmoHandler` trait defines the interactive behavior and overlay logic for shape-specific tools in the editor. /// A gizmo is a visual handle or control point used to manipulate a shape's properties (e.g., number of sides, radius, angle). @@ -124,6 +130,8 @@ pub trait ShapeGizmoHandler { /// /// For example, dragging states or hover flags should be cleared to avoid visual glitches when switching tools or shapes. fn cleanup(&mut self); + + fn mouse_cursor_icon(&self) -> Option; } /// Center, Lock Ratio, Lock Angle, Snap Angle, Increase/Decrease Side @@ -197,12 +205,12 @@ pub fn transform_cage_overlays(document: &DocumentMessageHandler, tool_data: &mu pub fn anchor_overlays(document: &DocumentMessageHandler, overlay_context: &mut OverlayContext) { for layer in document.network_interface.selected_nodes().selected_layers(document.metadata()) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let transform = document.metadata().transform_to_viewport(layer); - overlay_context.outline_vector(&vector_data, transform); + overlay_context.outline_vector(&vector, transform); - for (_, &position) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { + for (_, &position) in vector.point_domain.ids().iter().zip(vector.point_domain.positions()) { overlay_context.manipulator_anchor(transform.transform_point2(position), false, None); } } @@ -234,6 +242,58 @@ pub fn extract_polygon_parameters(layer: Option, document: Some((n, radius)) } +/// Extract the node input values of an arc. +/// Returns an option of (radius, start angle, sweep angle, arc type). +pub fn extract_arc_parameters(layer: Option, document: &DocumentMessageHandler) -> Option<(f64, f64, f64, ArcType)> { + let node_inputs = NodeGraphLayer::new(layer?, &document.network_interface).find_node_inputs("Arc")?; + + let (Some(&TaggedValue::F64(radius)), Some(&TaggedValue::F64(start_angle)), Some(&TaggedValue::F64(sweep_angle)), Some(&TaggedValue::ArcType(arc_type))) = ( + node_inputs.get(1)?.as_value(), + node_inputs.get(2)?.as_value(), + node_inputs.get(3)?.as_value(), + node_inputs.get(4)?.as_value(), + ) else { + return None; + }; + + Some((radius, start_angle, sweep_angle, arc_type)) +} + +/// Calculate the viewport positions of arc endpoints +pub fn arc_end_points(layer: Option, document: &DocumentMessageHandler) -> Option<(DVec2, DVec2)> { + let (radius, start_angle, sweep_angle, _) = extract_arc_parameters(Some(layer?), document)?; + + let viewport = document.metadata().transform_to_viewport(layer?); + + arc_end_points_ignore_layer(radius, start_angle, sweep_angle, Some(viewport)) +} + +pub fn arc_end_points_ignore_layer(radius: f64, start_angle: f64, sweep_angle: f64, viewport: Option) -> Option<(DVec2, DVec2)> { + let end_angle = start_angle.to_radians() + sweep_angle.to_radians(); + + let start_point = radius * DVec2::from_angle(start_angle.to_radians()); + let end_point = radius * DVec2::from_angle(end_angle); + + if let Some(transform) = viewport { + return Some((transform.transform_point2(start_point), transform.transform_point2(end_point))); + } + + Some((start_point, end_point)) +} + +/// Calculate the viewport position of a star vertex given its index +/// Extract the node input values of Circle. +/// Returns an option of (radius). +pub fn extract_circle_radius(layer: LayerNodeIdentifier, document: &DocumentMessageHandler) -> Option { + let node_inputs = NodeGraphLayer::new(layer, &document.network_interface).find_node_inputs("Circle")?; + + let Some(&TaggedValue::F64(radius)) = node_inputs.get(1)?.as_value() else { + return None; + }; + + Some(radius) +} + /// Calculate the viewport position of as a star vertex given its index pub fn star_vertex_position(viewport: DAffine2, vertex_index: i32, n: u32, radius1: f64, radius2: f64) -> DVec2 { let angle = ((vertex_index as f64) * PI) / (n as f64); @@ -290,6 +350,29 @@ pub fn polygon_outline(layer: Option, document: &DocumentMe overlay_context.outline(subpath.iter(), viewport, None); } +/// Outlines the geometric shape made by an Arc node +pub fn arc_outline(layer: Option, document: &DocumentMessageHandler, overlay_context: &mut OverlayContext) { + let Some(layer) = layer else { return }; + + let Some((radius, start_angle, sweep_angle, arc_type)) = extract_arc_parameters(Some(layer), document) else { + return; + }; + + let subpath: Vec = vec![ClickTargetType::Subpath(Subpath::new_arc( + radius, + start_angle / 360. * std::f64::consts::TAU, + sweep_angle / 360. * std::f64::consts::TAU, + match arc_type { + ArcType::Open => subpath::ArcType::Open, + ArcType::Closed => subpath::ArcType::Closed, + ArcType::PieSlice => subpath::ArcType::PieSlice, + }, + ))]; + let viewport = document.metadata().transform_to_viewport(layer); + + overlay_context.outline(subpath.iter(), viewport, None); +} + /// Check if the the cursor is inside the geometric star shape made by the Star node without any upstream node modifications pub fn inside_star(viewport: DAffine2, n: u32, radius1: f64, radius2: f64, mouse_position: DVec2) -> bool { let mut paths = Vec::new(); @@ -363,3 +446,32 @@ pub fn draw_snapping_ticks(snap_radii: &[f64], direction: DVec2, viewport: DAffi overlay_context.line(tick_position, tick_position - tick_direction * 5., None, Some(2.)); } } + +/// Wraps an angle (in radians) into the range [0, 2ฯ€). +pub fn wrap_to_tau(angle: f64) -> f64 { + (angle % TAU + TAU) % TAU +} + +pub fn format_rounded(value: f64, precision: usize) -> String { + format!("{value:.precision$}").trim_end_matches('0').trim_end_matches('.').to_string() +} + +/// Gives the approximated angle to display in degrees, given an angle in degrees. +pub fn calculate_display_angle(angle: f64) -> f64 { + if angle.is_sign_positive() { + angle - (angle / 360.).floor() * 360. + } else if angle.is_sign_negative() { + angle - ((angle / 360.).floor() + 1.) * 360. + } else { + angle + } +} + +pub fn calculate_arc_text_transform(angle: f64, offset_angle: f64, center: DVec2, width: f64) -> DAffine2 { + let text_angle_on_unit_circle = DVec2::from_angle((angle.to_radians() % TAU) / 2. + offset_angle); + let text_texture_position = DVec2::new( + (ARC_SWEEP_GIZMO_RADIUS + 4. + width) * text_angle_on_unit_circle.x, + (ARC_SWEEP_GIZMO_RADIUS + ARC_SWEEP_GIZMO_TEXT_HEIGHT) * text_angle_on_unit_circle.y, + ); + DAffine2::from_translation(text_texture_position + center) +} diff --git a/editor/src/messages/tool/common_functionality/shapes/star_shape.rs b/editor/src/messages/tool/common_functionality/shapes/star_shape.rs index 653b22f3ba..4effa98957 100644 --- a/editor/src/messages/tool/common_functionality/shapes/star_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/star_shape.rs @@ -64,7 +64,7 @@ impl ShapeGizmoHandler for StarGizmoHandler { overlay_context: &mut OverlayContext, ) { self.number_of_points_dial.overlays(document, selected_star_layer, shape_editor, mouse_position, overlay_context); - self.point_radius_handle.overlays(selected_star_layer, document, input, mouse_position, overlay_context); + self.point_radius_handle.overlays(selected_star_layer, document, input, overlay_context); star_outline(selected_star_layer, document, overlay_context); } @@ -82,7 +82,7 @@ impl ShapeGizmoHandler for StarGizmoHandler { } if self.point_radius_handle.is_dragging_or_snapped() { - self.point_radius_handle.overlays(None, document, input, mouse_position, overlay_context); + self.point_radius_handle.overlays(None, document, input, overlay_context); } } @@ -90,6 +90,18 @@ impl ShapeGizmoHandler for StarGizmoHandler { self.number_of_points_dial.cleanup(); self.point_radius_handle.cleanup(); } + + fn mouse_cursor_icon(&self) -> Option { + if self.number_of_points_dial.is_dragging() || self.number_of_points_dial.is_hovering() { + return Some(MouseCursorIcon::EWResize); + } + + if self.point_radius_handle.is_dragging_or_snapped() || self.point_radius_handle.hovered() { + return Some(MouseCursorIcon::Default); + } + + None + } } #[derive(Default)] @@ -114,7 +126,7 @@ impl Star { modifier: ShapeToolModifierKey, responses: &mut VecDeque, ) { - let [center, lock_ratio, _, _] = modifier; + let [center, lock_ratio, _] = modifier; if let Some([start, end]) = shape_tool_data.data.calculate_points(document, ipp, center, lock_ratio) { // TODO: We need to determine how to allow the polygon node to make irregular shapes diff --git a/editor/src/messages/tool/common_functionality/snapping.rs b/editor/src/messages/tool/common_functionality/snapping.rs index c9628e3c99..27b658e9a9 100644 --- a/editor/src/messages/tool/common_functionality/snapping.rs +++ b/editor/src/messages/tool/common_functionality/snapping.rs @@ -10,14 +10,16 @@ use crate::messages::portfolio::document::utility_types::document_metadata::Laye use crate::messages::portfolio::document::utility_types::misc::{GridSnapTarget, PathSnapTarget, SnapTarget}; use crate::messages::prelude::*; pub use alignment_snapper::*; -use bezier_rs::TValue; pub use distribution_snapper::*; use glam::{DAffine2, DVec2}; use graphene_std::renderer::Quad; use graphene_std::renderer::Rect; use graphene_std::vector::NoHashBuilder; use graphene_std::vector::PointId; +use graphene_std::vector::algorithms::intersection::filtered_segment_intersections; +use graphene_std::vector::misc::point_to_dvec2; pub use grid_snapper::*; +use kurbo::ParamCurve; pub use layer_snapper::*; pub use snap_results::*; use std::cmp::Ordering; @@ -81,6 +83,7 @@ impl SnapConstraint { } } } + pub fn snap_tolerance(document: &DocumentMessageHandler) -> f64 { document.snapping_state.tolerance / document.document_ptz.zoom() } @@ -127,13 +130,16 @@ fn get_closest_point(points: Vec) -> Option { } } } + fn get_closest_curve(curves: &[SnappedCurve], exclude_paths: bool) -> Option<&SnappedPoint> { let keep_curve = |curve: &&SnappedCurve| !exclude_paths || curve.point.target != SnapTarget::Path(PathSnapTarget::AlongPath); curves.iter().filter(keep_curve).map(|curve| &curve.point).min_by(compare_points) } + fn get_closest_line(lines: &[SnappedLine]) -> Option<&SnappedPoint> { lines.iter().map(|curve| &curve.point).min_by(compare_points) } + fn get_closest_intersection(snap_to: DVec2, curves: &[SnappedCurve]) -> Option { let mut best = None; for curve_i in curves { @@ -141,8 +147,8 @@ fn get_closest_intersection(snap_to: DVec2, curves: &[SnappedCurve]) -> Option Option Option { let mut best = None; for line_i in lines { @@ -237,6 +244,7 @@ impl<'a> SnapData<'a> { self.node_snap_cache.is_some_and(|cache| !cache.manipulators.is_empty()) } } + impl SnapManager { pub fn update_indicator(&mut self, snapped_point: SnappedPoint) { self.indicator = snapped_point.is_snapped().then_some(snapped_point); @@ -324,7 +332,8 @@ impl SnapManager { } return; } - let Some(bounds) = document.metadata().bounding_box_with_transform(layer, DAffine2::IDENTITY) else { + // We use a loose bounding box here since these are potential candidates which will be filtered later anyway + let Some(bounds) = document.metadata().loose_bounding_box_with_transform(layer, DAffine2::IDENTITY) else { return; }; let layer_bounds = document.metadata().transform_to_document(layer) * Quad::from_box(bounds); diff --git a/editor/src/messages/tool/common_functionality/snapping/layer_snapper.rs b/editor/src/messages/tool/common_functionality/snapping/layer_snapper.rs index 3a30671357..9919855716 100644 --- a/editor/src/messages/tool/common_functionality/snapping/layer_snapper.rs +++ b/editor/src/messages/tool/common_functionality/snapping/layer_snapper.rs @@ -3,11 +3,17 @@ use crate::consts::HIDE_HANDLE_DISTANCE; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::misc::*; use crate::messages::prelude::*; -use bezier_rs::{Bezier, Identifier, Subpath, TValue}; -use glam::{DAffine2, DVec2}; +use glam::{DAffine2, DVec2, FloatExt}; use graphene_std::math::math_ext::QuadExt; use graphene_std::renderer::Quad; +use graphene_std::subpath::pathseg_points; +use graphene_std::subpath::{Identifier, ManipulatorGroup, Subpath}; use graphene_std::vector::PointId; +use graphene_std::vector::algorithms::bezpath_algorithms::{pathseg_normals_to_point, pathseg_tangents_to_point}; +use graphene_std::vector::algorithms::intersection::filtered_segment_intersections; +use graphene_std::vector::misc::dvec2_to_point; +use graphene_std::vector::misc::point_to_dvec2; +use kurbo::{Affine, ParamCurve, PathSeg}; #[derive(Clone, Debug, Default)] pub struct LayerSnapper { @@ -37,7 +43,7 @@ impl LayerSnapper { return; } - for document_curve in bounds.bezier_lines() { + for document_curve in bounds.to_lines() { self.paths_to_snap.push(SnapCandidatePath { document_curve, layer, @@ -70,7 +76,7 @@ impl LayerSnapper { if document.snapping_state.target_enabled(SnapTarget::Path(PathSnapTarget::IntersectionPoint)) || document.snapping_state.target_enabled(SnapTarget::Path(PathSnapTarget::AlongPath)) { for subpath in document.metadata().layer_outline(layer) { for (start_index, curve) in subpath.iter().enumerate() { - let document_curve = curve.apply_transformation(|p| transform.transform_point2(p)); + let document_curve = Affine::new(transform.to_cols_array()) * curve; let start = subpath.manipulator_groups()[start_index].id; if snap_data.ignore_manipulator(layer, start) || snap_data.ignore_manipulator(layer, subpath.manipulator_groups()[(start_index + 1) % subpath.len()].id) { continue; @@ -98,13 +104,14 @@ impl LayerSnapper { for path in &self.paths_to_snap { // Skip very short paths - if path.document_curve.start.distance_squared(path.document_curve.end) < tolerance * tolerance * 2. { + if path.document_curve.start().distance_squared(path.document_curve.end()) < tolerance * tolerance * 2. { continue; } - let time = path.document_curve.project(point.document_point); - let snapped_point_document = path.document_curve.evaluate(bezier_rs::TValue::Parametric(time)); - - let distance = snapped_point_document.distance(point.document_point); + let Some((distance_squared, closest)) = path.approx_nearest_point(point.document_point, 10) else { + continue; + }; + let snapped_point_document = point_to_dvec2(closest); + let distance = distance_squared.sqrt(); if distance < tolerance { snap_results.curves.push(SnappedCurve { @@ -144,8 +151,8 @@ impl LayerSnapper { for path in &self.paths_to_snap { for constraint_path in constraint_path.iter() { - for time in path.document_curve.intersections(&constraint_path, None, None) { - let snapped_point_document = path.document_curve.evaluate(bezier_rs::TValue::Parametric(time)); + for time in filtered_segment_intersections(path.document_curve, constraint_path, None, None) { + let snapped_point_document = point_to_dvec2(path.document_curve.eval(time)); let distance = snapped_point_document.distance(point.document_point); @@ -266,8 +273,8 @@ impl LayerSnapper { fn normals_and_tangents(path: &SnapCandidatePath, normals: bool, tangents: bool, point: &SnapCandidatePoint, tolerance: f64, snap_results: &mut SnapResults) { if normals && path.bounds.is_none() { for &neighbor in &point.neighbors { - for t in path.document_curve.normals_to_point(neighbor) { - let normal_point = path.document_curve.evaluate(TValue::Parametric(t)); + for t in pathseg_normals_to_point(path.document_curve, dvec2_to_point(neighbor)) { + let normal_point = point_to_dvec2(path.document_curve.eval(t)); let distance = normal_point.distance(point.document_point); if distance > tolerance { continue; @@ -287,8 +294,8 @@ fn normals_and_tangents(path: &SnapCandidatePath, normals: bool, tangents: bool, } if tangents && path.bounds.is_none() { for &neighbor in &point.neighbors { - for t in path.document_curve.tangents_to_point(neighbor) { - let tangent_point = path.document_curve.evaluate(TValue::Parametric(t)); + for t in pathseg_tangents_to_point(path.document_curve, dvec2_to_point(neighbor)) { + let tangent_point = point_to_dvec2(path.document_curve.eval(t)); let distance = tangent_point.distance(point.document_point); if distance > tolerance { continue; @@ -310,13 +317,106 @@ fn normals_and_tangents(path: &SnapCandidatePath, normals: bool, tangents: bool, #[derive(Clone, Debug)] struct SnapCandidatePath { - document_curve: Bezier, + document_curve: PathSeg, layer: LayerNodeIdentifier, start: PointId, target: SnapTarget, bounds: Option, } +impl SnapCandidatePath { + /// Calculates the point on the curve which lies closest to `point`. + /// + /// ## Algorithm: + /// 1. We first perform a coarse scan of the path segment to find the most promising starting point. + /// 2. Afterwards we refine this point by performing a binary search to either side assuming that the segment contains at most one extremal point. + /// 3. The smaller of the two resulting distances is returned. + /// + /// ## Visualization: + /// ```text + /// Query Point (ร—) + /// ร— + /// /|\ + /// / | \ distance checks + /// / | \ + /// v v v + /// โ—---โ—---โ—---โ—---โ— <- Curve with coarse scan points + /// 0 0.25 0.5 0.75 1 (parameter t values) + /// ^ ^ + /// | | | + /// min mid max + /// Find closest scan point + /// + /// Refine left region using binary search: + /// + /// โ—------โ—------โ— + /// 0.25 0.375 0.5 + /// + /// Result: | (=0.4) + /// And the right region: + /// + /// โ—------โ—------โ— + /// 0.5 0.625 0.75 + /// Result: | (=0.5) + /// + /// The t value with minimal dist is thus 0.4 + /// Return: (dist_closest, point_on_curve) + /// ``` + pub fn approx_nearest_point(&self, point: DVec2, lut_steps: usize) -> Option<(f64, kurbo::Point)> { + let point = dvec2_to_point(point); + + let time_values = (0..lut_steps).map(|x| x as f64 / lut_steps as f64); + let points = time_values.map(|t| (t, self.document_curve.eval(t))); + let points_with_distances = points.map(|(t, p)| (t, p.distance_squared(point), p)); + let (t, _, _) = points_with_distances.min_by(|(_, a, _), (_, b, _)| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal))?; + + let min_t = (t - (lut_steps as f64).recip()).max(0.); + let max_t = (t + (lut_steps as f64).recip()).min(1.); + let left = self.refine_nearest_point(point, min_t, t); + let right = self.refine_nearest_point(point, t, max_t); + + if left.0 < right.0 { Some(left) } else { Some(right) } + } + + /// Refines the nearest point search within a given parameter range using binary search. + /// + /// This method performs iterative refinement by: + /// 1. Evaluating the midpoint of the current parameter range + /// 2. Comparing distances at the endpoints and midpoint + /// 3. Narrowing the search range to the side with the shorter distance + /// 4. Continuing until convergence (when the range becomes very small) + /// + /// Returns a tuple of (parameter_t, closest_point) where parameter_t is in the range [min_t, max_t]. + fn refine_nearest_point(&self, point: kurbo::Point, mut min_t: f64, mut max_t: f64) -> (f64, kurbo::Point) { + let mut min_dist = self.document_curve.eval(min_t).distance_squared(point); + let mut max_dist = self.document_curve.eval(max_t).distance_squared(point); + let mut mid_t = max_t.lerp(min_t, 0.5); + let mut mid_point = self.document_curve.eval(mid_t); + let mut mid_dist = mid_point.distance_squared(point); + + for _ in 0..10 { + if (min_dist - max_dist).abs() < 1e-3 { + return (mid_dist, mid_point); + } + if mid_dist > min_dist && mid_dist > max_dist { + return (mid_dist, mid_point); + } + if max_dist > min_dist { + max_t = mid_t; + max_dist = mid_dist; + } else { + min_t = mid_t; + min_dist = mid_dist; + } + mid_t = max_t.lerp(min_t, 0.5); + mid_point = self.document_curve.eval(mid_t); + mid_dist = mid_point.distance_squared(point); + } + + (mid_dist, mid_point) + } +} + #[derive(Clone, Debug, Default)] pub struct SnapCandidatePoint { pub document_point: DVec2, @@ -440,12 +540,13 @@ fn subpath_anchor_snap_points(layer: LayerNodeIdentifier, subpath: &Subpath= crate::consts::MAX_LAYER_SNAP_POINTS { return; } + let curve = pathseg_points(curve); - let in_handle = curve.handle_start().map(|handle| handle - curve.start).filter(handle_not_under(to_document)); - let out_handle = curve.handle_end().map(|handle| handle - curve.end).filter(handle_not_under(to_document)); + let in_handle = curve.p1.map(|handle| handle - curve.p0).filter(handle_not_under(to_document)); + let out_handle = curve.p2.map(|handle| handle - curve.p3).filter(handle_not_under(to_document)); if in_handle.is_none() && out_handle.is_none() { points.push(SnapCandidatePoint::new( - to_document.transform_point2(curve.start() * 0.5 + curve.end * 0.5), + to_document.transform_point2(curve.p0 * 0.5 + curve.p3 * 0.5), SnapSource::Path(PathSnapSource::LineMidpoint), SnapTarget::Path(PathSnapTarget::LineMidpoint), Some(layer), @@ -455,8 +556,8 @@ fn subpath_anchor_snap_points(layer: LayerNodeIdentifier, subpath: &Subpath, to_document: DAffine2, subpath: &Subpath, index: usize) -> bool { - let anchor = group.anchor; - let handle_in = group.in_handle.map(|handle| anchor - handle).filter(handle_not_under(to_document)); - let handle_out = group.out_handle.map(|handle| handle - anchor).filter(handle_not_under(to_document)); +pub fn are_manipulator_handles_colinear(manipulators: &ManipulatorGroup, to_document: DAffine2, subpath: &Subpath, index: usize) -> bool { + let anchor = manipulators.anchor; + let handle_in = manipulators.in_handle.map(|handle| anchor - handle).filter(handle_not_under(to_document)); + let handle_out = manipulators.out_handle.map(|handle| handle - anchor).filter(handle_not_under(to_document)); let anchor_is_endpoint = !subpath.closed() && (index == 0 || index == subpath.len() - 1); // Unless this is an endpoint, check if both handles are colinear (within an angular epsilon) diff --git a/editor/src/messages/tool/common_functionality/snapping/snap_results.rs b/editor/src/messages/tool/common_functionality/snapping/snap_results.rs index 3ab53e4dd7..415ead679f 100644 --- a/editor/src/messages/tool/common_functionality/snapping/snap_results.rs +++ b/editor/src/messages/tool/common_functionality/snapping/snap_results.rs @@ -2,11 +2,11 @@ use super::DistributionMatch; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::portfolio::document::utility_types::misc::{DistributionSnapTarget, SnapSource, SnapTarget}; use crate::messages::tool::common_functionality::snapping::SnapCandidatePoint; -use bezier_rs::Bezier; use glam::DVec2; use graphene_std::renderer::Quad; use graphene_std::renderer::Rect; use graphene_std::vector::PointId; +use kurbo::PathSeg; use std::collections::VecDeque; #[derive(Clone, Debug, Default)] @@ -120,5 +120,5 @@ pub struct SnappedCurve { pub layer: LayerNodeIdentifier, pub start: PointId, pub point: SnappedPoint, - pub document_curve: Bezier, + pub document_curve: PathSeg, } diff --git a/editor/src/messages/tool/common_functionality/utility_functions.rs b/editor/src/messages/tool/common_functionality/utility_functions.rs index c6707ab3c0..4d0a268449 100644 --- a/editor/src/messages/tool/common_functionality/utility_functions.rs +++ b/editor/src/messages/tool/common_functionality/utility_functions.rs @@ -2,18 +2,24 @@ use super::snapping::{SnapCandidatePoint, SnapData, SnapManager}; use super::transformation_cage::{BoundingBoxManager, SizeSnapData}; use crate::consts::ROTATE_INCREMENT; use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; +use crate::messages::portfolio::document::utility_types::network_interface::{NodeNetworkInterface, OutputConnector}; use crate::messages::portfolio::document::utility_types::transformation::Selected; use crate::messages::prelude::*; -use crate::messages::tool::common_functionality::graph_modification_utils::get_text; +use crate::messages::tool::common_functionality::graph_modification_utils::{NodeGraphLayer, get_text}; use crate::messages::tool::common_functionality::transformation_cage::SelectedEdges; use crate::messages::tool::tool_messages::path_tool::PathOverlayMode; use crate::messages::tool::utility_types::ToolType; -use bezier_rs::{Bezier, BezierHandles}; use glam::{DAffine2, DVec2}; +use graph_craft::concrete; +use graph_craft::document::value::TaggedValue; use graphene_std::renderer::Quad; +use graphene_std::subpath::{Bezier, BezierHandles}; +use graphene_std::table::Table; use graphene_std::text::{FontCache, load_font}; -use graphene_std::vector::{HandleExt, HandleId, ManipulatorPointId, PointId, SegmentId, VectorData, VectorModificationType}; -use kurbo::{CubicBez, Line, ParamCurveExtrema, PathSeg, Point, QuadBez}; +use graphene_std::vector::algorithms::bezpath_algorithms::pathseg_compute_lookup_table; +use graphene_std::vector::misc::{HandleId, ManipulatorPointId, dvec2_to_point}; +use graphene_std::vector::{HandleExt, PointId, SegmentId, Vector, VectorModification, VectorModificationType}; +use kurbo::{CubicBez, DEFAULT_ACCURACY, Line, ParamCurve, PathSeg, Point, QuadBez, Shape}; /// Determines if a path should be extended. Goal in viewport space. Returns the path and if it is extending from the start, if applicable. pub fn should_extend( @@ -43,14 +49,12 @@ where let mut best_distance_squared = max_distance * max_distance; for layer in layers { let viewspace = document.metadata().transform_to_viewport(layer); - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; - for id in vector_data.extendable_points(preferences.vector_meshes) { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + for id in vector.extendable_points(preferences.vector_meshes) { if exclude(id) { continue; } - let Some(point) = vector_data.point_domain.position_from_id(id) else { continue }; + let Some(point) = vector.point_domain.position_from_id(id) else { continue }; let distance_squared = viewspace.transform_point2(point).distance_squared(goal); @@ -73,7 +77,7 @@ pub fn text_bounding_box(layer: LayerNodeIdentifier, document: &DocumentMessageH let font_data = font_cache.get(font).map(|data| load_font(data)); let far = graphene_std::text::bounding_box(text, font_data, typesetting, false); - // TODO: Once the instances refactor is complete and per_glyph_instances can be removed (since it'll be the default), + // TODO: Once the instance tables refactor is complete and per_glyph_instances can be removed (since it'll be the default), // TODO: remove this because the top of the dashed bounding overlay should no longer be based on the first line's baseline. let vertical_offset = if per_glyph_instances { DVec2::NEG_Y * typesetting.font_size * (1. + (typesetting.line_height_ratio - 1.) / 2.) @@ -84,16 +88,16 @@ pub fn text_bounding_box(layer: LayerNodeIdentifier, document: &DocumentMessageH Quad::from_box([DVec2::ZERO + vertical_offset, far + vertical_offset]) } -pub fn calculate_segment_angle(anchor: PointId, segment: SegmentId, vector_data: &VectorData, prefer_handle_direction: bool) -> Option { - let is_start = |point: PointId, segment: SegmentId| vector_data.segment_start_from_id(segment) == Some(point); - let anchor_position = vector_data.point_domain.position_from_id(anchor)?; - let end_handle = ManipulatorPointId::EndHandle(segment).get_position(vector_data); - let start_handle = ManipulatorPointId::PrimaryHandle(segment).get_position(vector_data); +pub fn calculate_segment_angle(anchor: PointId, segment: SegmentId, vector: &Vector, prefer_handle_direction: bool) -> Option { + let is_start = |point: PointId, segment: SegmentId| vector.segment_start_from_id(segment) == Some(point); + let anchor_position = vector.point_domain.position_from_id(anchor)?; + let end_handle = ManipulatorPointId::EndHandle(segment).get_position(vector); + let start_handle = ManipulatorPointId::PrimaryHandle(segment).get_position(vector); let start_point = if is_start(anchor, segment) { - vector_data.segment_end_from_id(segment).and_then(|id| vector_data.point_domain.position_from_id(id)) + vector.segment_end_from_id(segment).and_then(|id| vector.point_domain.position_from_id(id)) } else { - vector_data.segment_start_from_id(segment).and_then(|id| vector_data.point_domain.position_from_id(id)) + vector.segment_start_from_id(segment).and_then(|id| vector.point_domain.position_from_id(id)) }; let required_handle = if is_start(anchor, segment) { @@ -111,9 +115,9 @@ pub fn calculate_segment_angle(anchor: PointId, segment: SegmentId, vector_data: required_handle.map(|handle| -(handle - anchor_position).angle_to(DVec2::X)) } -pub fn adjust_handle_colinearity(handle: HandleId, anchor_position: DVec2, target_control_point: DVec2, vector_data: &VectorData, layer: LayerNodeIdentifier, responses: &mut VecDeque) { - let Some(other_handle) = vector_data.other_colinear_handle(handle) else { return }; - let Some(handle_position) = other_handle.to_manipulator_point().get_position(vector_data) else { +pub fn adjust_handle_colinearity(handle: HandleId, anchor_position: DVec2, target_control_point: DVec2, vector: &Vector, layer: LayerNodeIdentifier, responses: &mut VecDeque) { + let Some(other_handle) = vector.other_colinear_handle(handle) else { return }; + let Some(handle_position) = other_handle.to_manipulator_point().get_position(vector) else { return; }; let Some(direction) = (anchor_position - target_control_point).try_normalize() else { return }; @@ -128,12 +132,12 @@ pub fn restore_previous_handle_position( handle: HandleId, original_c: DVec2, anchor_position: DVec2, - vector_data: &VectorData, + vector: &Vector, layer: LayerNodeIdentifier, responses: &mut VecDeque, ) -> Option { - let other_handle = vector_data.other_colinear_handle(handle)?; - let handle_position = other_handle.to_manipulator_point().get_position(vector_data)?; + let other_handle = vector.other_colinear_handle(handle)?; + let handle_position = other_handle.to_manipulator_point().get_position(vector)?; let direction = (anchor_position - original_c).try_normalize()?; let old_relative_position = (handle_position - anchor_position).length() * direction; @@ -147,16 +151,8 @@ pub fn restore_previous_handle_position( Some(other_handle) } -pub fn restore_g1_continuity( - handle: HandleId, - other_handle: HandleId, - control_point: DVec2, - anchor_position: DVec2, - vector_data: &VectorData, - layer: LayerNodeIdentifier, - responses: &mut VecDeque, -) { - let Some(handle_position) = other_handle.to_manipulator_point().get_position(vector_data) else { +pub fn restore_g1_continuity(handle: HandleId, other_handle: HandleId, control_point: DVec2, anchor_position: DVec2, vector: &Vector, layer: LayerNodeIdentifier, responses: &mut VecDeque) { + let Some(handle_position) = other_handle.to_manipulator_point().get_position(vector) else { return; }; let Some(direction) = (anchor_position - control_point).try_normalize() else { return }; @@ -173,10 +169,10 @@ pub fn restore_g1_continuity( /// Check whether a point is visible in the current overlay mode. pub fn is_visible_point( manipulator_point_id: ManipulatorPointId, - vector_data: &VectorData, + vector: &Vector, path_overlay_mode: PathOverlayMode, - frontier_handles_info: Option>>, - selected_segments: Vec, + frontier_handles_for_layer: Option<&HashMap>>, + selected_segments: &[SegmentId], selected_points: &HashSet, ) -> bool { match manipulator_point_id { @@ -190,18 +186,18 @@ pub fn is_visible_point( } // Either the segment is a part of selected segments or the opposite handle is a part of existing selection - let Some(handle_pair) = manipulator_point_id.get_handle_pair(vector_data) else { return false }; + let Some(handle_pair) = manipulator_point_id.get_handle_pair(vector) else { return false }; let other_handle = handle_pair[1].to_manipulator_point(); // Return whether the list of selected points contain the other handle selected_points.contains(&other_handle) } (PathOverlayMode::FrontierHandles, false) => { - let Some(anchor) = manipulator_point_id.get_anchor(vector_data) else { + let Some(anchor) = manipulator_point_id.get_anchor(vector) else { warn!("No anchor for selected handle"); return false; }; - let Some(frontier_handles) = &frontier_handles_info else { + let Some(frontier_handles) = frontier_handles_for_layer else { warn!("No frontier handles info provided"); return false; }; @@ -213,25 +209,6 @@ pub fn is_visible_point( } } -/// Function to find the bounding box of bezier (uses method from kurbo) -pub fn calculate_bezier_bbox(bezier: Bezier) -> [DVec2; 2] { - let start = Point::new(bezier.start.x, bezier.start.y); - let end = Point::new(bezier.end.x, bezier.end.y); - let bbox = match bezier.handles { - BezierHandles::Cubic { handle_start, handle_end } => { - let p1 = Point::new(handle_start.x, handle_start.y); - let p2 = Point::new(handle_end.x, handle_end.y); - CubicBez::new(start, p1, p2, end).bounding_box() - } - BezierHandles::Quadratic { handle } => { - let p1 = Point::new(handle.x, handle.y); - QuadBez::new(start, p1, end).bounding_box() - } - BezierHandles::Linear => Line::new(start, end).bounding_box(), - }; - [DVec2::new(bbox.x0, bbox.y0), DVec2::new(bbox.x1, bbox.y1)] -} - pub fn is_intersecting(bezier: Bezier, quad: [DVec2; 2], transform: DAffine2) -> bool { let to_layerspace = transform.inverse(); let quad = [to_layerspace.transform_point2(quad[0]), to_layerspace.transform_point2(quad[1])]; @@ -501,19 +478,19 @@ pub fn log_optimization(a: f64, b: f64, p1: DVec2, p3: DVec2, d1: DVec2, d2: DVe let c1 = p1 + d1 * start_handle_length; let c2 = p3 + d2 * end_handle_length; - let new_curve = Bezier::from_cubic_coordinates(p1.x, p1.y, c1.x, c1.y, c2.x, c2.y, p3.x, p3.y); + let new_curve = PathSeg::Cubic(CubicBez::new(Point::new(p1.x, p1.y), Point::new(c1.x, c1.y), Point::new(c2.x, c2.y), Point::new(p3.x, p3.y))); // Sample 2*n points from new curve and get the L2 metric between all of points - let points = new_curve.compute_lookup_table(Some(2 * n), None).collect::>(); + let points = pathseg_compute_lookup_table(new_curve, Some(2 * n), false); - let dist = points1.iter().zip(points.iter()).map(|(p1, p2)| (p1.x - p2.x).powi(2) + (p1.y - p2.y).powi(2)).sum::(); + let dist = points1.iter().zip(points).map(|(p1, p2)| (p1.x - p2.x).powi(2) + (p1.y - p2.y).powi(2)).sum::(); dist / (2 * n) as f64 } /// Calculates optimal handle lengths with adam optimization. #[allow(clippy::too_many_arguments)] -pub fn find_two_param_best_approximate(p1: DVec2, p3: DVec2, d1: DVec2, d2: DVec2, min_len1: f64, min_len2: f64, farther_segment: Bezier, other_segment: Bezier) -> (DVec2, DVec2) { +pub fn find_two_param_best_approximate(p1: DVec2, p3: DVec2, d1: DVec2, d2: DVec2, min_len1: f64, min_len2: f64, further_segment: PathSeg, other_segment: PathSeg) -> (DVec2, DVec2) { let h = 1e-6; let tol = 1e-6; let max_iter = 200; @@ -535,21 +512,25 @@ pub fn find_two_param_best_approximate(p1: DVec2, p3: DVec2, d1: DVec2, d2: DVec let n = 20; - let farther_segment = if farther_segment.start.distance(p1) >= f64::EPSILON { - farther_segment.reverse() + let further_segment = if further_segment.start().distance(dvec2_to_point(p1)) >= f64::EPSILON { + further_segment.reverse() } else { - farther_segment + further_segment }; - let other_segment = if other_segment.end.distance(p3) >= f64::EPSILON { other_segment.reverse() } else { other_segment }; + let other_segment = if other_segment.end().distance(dvec2_to_point(p3)) >= f64::EPSILON { + other_segment.reverse() + } else { + other_segment + }; // Now we sample points proportional to the lengths of the beziers - let l1 = farther_segment.length(None); - let l2 = other_segment.length(None); + let l1 = further_segment.perimeter(DEFAULT_ACCURACY); + let l2 = other_segment.perimeter(DEFAULT_ACCURACY); let ratio = l1 / (l1 + l2); let n_points1 = ((2 * n) as f64 * ratio).floor() as usize; - let mut points1 = farther_segment.compute_lookup_table(Some(n_points1), None).collect::>(); - let mut points2 = other_segment.compute_lookup_table(Some(n), None).collect::>(); + let mut points1 = pathseg_compute_lookup_table(further_segment, Some(n_points1), false).collect::>(); + let mut points2 = pathseg_compute_lookup_table(other_segment, Some(n), false).collect::>(); points1.append(&mut points2); let f = |a: f64, b: f64| -> f64 { log_optimization(a, b, p1, p3, d1, d2, &points1, n) }; @@ -586,3 +567,32 @@ pub fn find_two_param_best_approximate(p1: DVec2, p3: DVec2, d1: DVec2, d2: DVec (d1 * len1, d2 * len2) } + +pub fn make_path_editable_is_allowed(network_interface: &mut NodeNetworkInterface) -> Option { + // Must have exactly one layer selected + let selected_nodes = network_interface.selected_nodes(); + let mut selected_layers = selected_nodes.selected_layers(network_interface.document_metadata()); + let first_layer = selected_layers.next()?; + if selected_layers.next().is_some() { + return None; + } + for _ in selected_layers {} + + // Must be a layer of type Table + let node_id = NodeGraphLayer::new(first_layer, network_interface).horizontal_layer_flow().nth(1)?; + + let (output_type, _) = network_interface.output_type(&OutputConnector::node(node_id, 0), &[]); + if output_type.nested_type() != concrete!(Table).nested_type() { + return None; + } + + // Must not already have an existing Path node, in the right-most part of the layer chain, which has an empty set of modifications + // (otherwise users could repeatedly keep running this command and stacking up empty Path nodes) + if let Some(TaggedValue::VectorModification(modifications)) = NodeGraphLayer::new(first_layer, network_interface).find_input("Path", 1) { + if modifications.as_ref() == &VectorModification::default() { + return None; + } + } + + Some(first_layer) +} diff --git a/editor/src/messages/tool/tool_message_handler.rs b/editor/src/messages/tool/tool_message_handler.rs index 93b3796394..c3dc278463 100644 --- a/editor/src/messages/tool/tool_message_handler.rs +++ b/editor/src/messages/tool/tool_message_handler.rs @@ -11,7 +11,7 @@ use crate::messages::tool::utility_types::ToolType; use crate::node_graph_executor::NodeGraphExecutor; use graphene_std::raster::color::Color; -const ARTBOARD_OVERLAY_PROVIDER: OverlayProvider = |overlay_context| DocumentMessage::DrawArtboardOverlays(overlay_context).into(); +const ARTBOARD_OVERLAY_PROVIDER: OverlayProvider = |context| DocumentMessage::DrawArtboardOverlays { context }.into(); #[derive(ExtractField)] pub struct ToolMessageContext<'a> { @@ -75,8 +75,8 @@ impl MessageHandler> for ToolMessageHandler self.tool_state.tool_data.active_tool_type = ToolType::Shape; } responses.add_front(ToolMessage::ActivateTool { tool_type: ToolType::Shape }); - responses.add(ShapeToolMessage::SetShape(ShapeType::Polygon)); - responses.add(ShapeToolMessage::HideShapeTypeWidget(false)) + responses.add(ShapeToolMessage::SetShape { shape: ShapeType::Polygon }); + responses.add(ShapeToolMessage::HideShapeTypeWidget { hide: false }) } ToolMessage::ActivateToolBrush => responses.add_front(ToolMessage::ActivateTool { tool_type: ToolType::Brush }), ToolMessage::ActivateToolShapeLine | ToolMessage::ActivateToolShapeRectangle | ToolMessage::ActivateToolShapeEllipse => { @@ -89,8 +89,8 @@ impl MessageHandler> for ToolMessageHandler self.tool_state.tool_data.active_shape_type = Some(shape.tool_type()); responses.add_front(ToolMessage::ActivateTool { tool_type: ToolType::Shape }); - responses.add(ShapeToolMessage::HideShapeTypeWidget(true)); - responses.add(ShapeToolMessage::SetShape(shape)); + responses.add(ShapeToolMessage::HideShapeTypeWidget { hide: true }); + responses.add(ShapeToolMessage::SetShape { shape }); } ToolMessage::ActivateTool { tool_type } => { let tool_data = &mut self.tool_state.tool_data; @@ -156,11 +156,14 @@ impl MessageHandler> for ToolMessageHandler // Subscribe new tool tool_data.tools.get(&tool_type).unwrap().activate(responses); + // Re-add the artboard overlay provider when tools are reactivated + responses.add(OverlaysMessage::AddProvider { provider: ARTBOARD_OVERLAY_PROVIDER }); + // Send the SelectionChanged message to the active tool, this will ensure the selection is updated - responses.add(BroadcastEvent::SelectionChanged); + responses.add(EventMessage::SelectionChanged); // Update the working colors for the active tool - responses.add(BroadcastEvent::WorkingColorChanged); + responses.add(EventMessage::WorkingColorChanged); // Send tool options to the frontend responses.add(ToolMessage::RefreshToolOptions); @@ -173,11 +176,12 @@ impl MessageHandler> for ToolMessageHandler tool_data.tools.get(&tool_data.active_tool_type).unwrap().deactivate(responses); // Unsubscribe the transform layer to selection change events - let message = Box::new(TransformLayerMessage::SelectionChanged.into()); - let on = BroadcastEvent::SelectionChanged; - responses.add(BroadcastMessage::UnsubscribeEvent { message, on }); + responses.add(BroadcastMessage::UnsubscribeEvent { + on: EventMessage::SelectionChanged, + send: Box::new(TransformLayerMessage::SelectionChanged.into()), + }); - responses.add(OverlaysMessage::RemoveProvider(ARTBOARD_OVERLAY_PROVIDER)); + responses.add(OverlaysMessage::RemoveProvider { provider: ARTBOARD_OVERLAY_PROVIDER }); responses.add(FrontendMessage::UpdateInputHints { hint_data: Default::default() }); responses.add(FrontendMessage::UpdateMouseCursor { cursor: Default::default() }); @@ -187,12 +191,12 @@ impl MessageHandler> for ToolMessageHandler ToolMessage::InitTools => { // Subscribe the transform layer to selection change events responses.add(BroadcastMessage::SubscribeEvent { - on: BroadcastEvent::SelectionChanged, + on: EventMessage::SelectionChanged, send: Box::new(TransformLayerMessage::SelectionChanged.into()), }); responses.add(BroadcastMessage::SubscribeEvent { - on: BroadcastEvent::SelectionChanged, + on: EventMessage::SelectionChanged, send: Box::new(SelectToolMessage::SyncHistory.into()), }); @@ -229,12 +233,12 @@ impl MessageHandler> for ToolMessageHandler tool_data.active_tool_mut().process_message(ToolMessage::UpdateHints, responses, &mut data); tool_data.active_tool_mut().process_message(ToolMessage::UpdateCursor, responses, &mut data); - responses.add(OverlaysMessage::AddProvider(ARTBOARD_OVERLAY_PROVIDER)); + responses.add(OverlaysMessage::AddProvider { provider: ARTBOARD_OVERLAY_PROVIDER }); } ToolMessage::PreUndo => { let tool_data = &mut self.tool_state.tool_data; if tool_data.active_tool_type != ToolType::Pen { - responses.add(BroadcastEvent::ToolAbort); + responses.add(EventMessage::ToolAbort); } } ToolMessage::Redo => { diff --git a/editor/src/messages/tool/tool_messages/artboard_tool.rs b/editor/src/messages/tool/tool_messages/artboard_tool.rs index 810cb4636f..7c9d667551 100644 --- a/editor/src/messages/tool/tool_messages/artboard_tool.rs +++ b/editor/src/messages/tool/tool_messages/artboard_tool.rs @@ -4,6 +4,7 @@ use crate::messages::portfolio::document::overlays::utility_types::OverlayContex use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::tool::common_functionality::auto_panning::AutoPanning; use crate::messages::tool::common_functionality::compass_rose::Axis; +use crate::messages::tool::common_functionality::measure; use crate::messages::tool::common_functionality::resize::Resize; use crate::messages::tool::common_functionality::snapping; use crate::messages::tool::common_functionality::snapping::SnapCandidatePoint; @@ -11,7 +12,9 @@ use crate::messages::tool::common_functionality::snapping::SnapData; use crate::messages::tool::common_functionality::snapping::SnapManager; use crate::messages::tool::common_functionality::transformation_cage::*; use graph_craft::document::NodeId; -use graphene_std::renderer::Quad; +use graphene_std::Artboard; +use graphene_std::renderer::{Quad, Rect}; +use graphene_std::table::Table; #[derive(Default, ExtractField)] pub struct ArtboardTool { @@ -24,7 +27,7 @@ pub struct ArtboardTool { pub enum ArtboardToolMessage { // Standard messages Abort, - Overlays(OverlayContext), + Overlays { context: OverlayContext }, // Tool-specific messages UpdateSelectedArtboard, @@ -81,7 +84,7 @@ impl ToolTransition for ArtboardTool { fn event_to_message_map(&self) -> EventToMessageMap { EventToMessageMap { tool_abort: Some(ArtboardToolMessage::Abort.into()), - overlay_provider: Some(|overlay_context| ArtboardToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| ArtboardToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -177,7 +180,7 @@ impl ArtboardToolData { let Some(movement) = &bounds.selected_edges else { return; }; - if self.selected_artboard.unwrap() == LayerNodeIdentifier::ROOT_PARENT { + if self.selected_artboard == Some(LayerNodeIdentifier::ROOT_PARENT) { log::error!("Selected artboard cannot be ROOT_PARENT"); return; } @@ -225,7 +228,7 @@ impl Fsm for ArtboardToolFsmState { let ToolMessage::Artboard(event) = event else { return self }; match (self, event) { - (state, ArtboardToolMessage::Overlays(mut overlay_context)) => { + (state, ArtboardToolMessage::Overlays { context: mut overlay_context }) => { let display_transform_cage = overlay_context.visibility_settings.transform_cage(); if display_transform_cage && state != ArtboardToolFsmState::Drawing { if let Some(bounds) = tool_data.selected_artboard.and_then(|layer| document.metadata().bounding_box_document(layer)) { @@ -239,6 +242,39 @@ impl Fsm for ArtboardToolFsmState { tool_data.bounding_box_manager.take(); } + // Measure with Alt held down between selected artboard and hovered layers/artboards + // TODO: Don't use `Key::Alt` directly, instead take it as a variable from the input mappings list like in all other places + let alt_pressed = input.keyboard.get(Key::Alt as usize); + let quick_measurement_enabled = overlay_context.visibility_settings.quick_measurement(); + let not_resizing = !matches!(state, ArtboardToolFsmState::ResizingBounds); + + if quick_measurement_enabled && not_resizing && alt_pressed { + // Get the selected artboard bounds + let selected_artboard_bounds = tool_data.selected_artboard.and_then(|layer| document.metadata().bounding_box_document(layer)).map(Rect::from_box); + + // Find hovered artboard or regular layer + let hovered_artboard = ArtboardToolData::hovered_artboard(document, input); + let hovered_layer = document.click_xray(input).find(|&layer| !document.network_interface.is_artboard(&layer.to_node(), &[])); + + // Get bounds for the hovered object (prioritize artboards) + let hovered_bounds = if let Some(artboard) = hovered_artboard { + document.metadata().bounding_box_document(artboard).map(Rect::from_box) + } else if let Some(layer) = hovered_layer { + document.metadata().bounding_box_document(layer).map(Rect::from_box) + } else { + None + }; + + // If both selected artboard and hovered object bounds exist, overlay measurement lines + if let (Some(selected_bounds), Some(hovered_bounds)) = (selected_artboard_bounds, hovered_bounds) { + // Don't measure if it's the same artboard + if selected_artboard_bounds != Some(hovered_bounds) { + let document_to_viewport = document.metadata().document_to_viewport; + measure::overlay(selected_bounds, hovered_bounds, document_to_viewport, document_to_viewport, &mut overlay_context); + } + } + } + tool_data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context); self @@ -336,8 +372,8 @@ impl Fsm for ArtboardToolFsmState { responses.add(GraphOperationMessage::NewArtboard { id, - artboard: graphene_std::Artboard { - graphic_group: graphene_std::GraphicGroupTable::default(), + artboard: Artboard { + content: Table::new(), label: String::from("Artboard"), location: start.min(end).round().as_ivec2(), dimensions: (start.round() - end.round()).abs().as_ivec2(), @@ -562,13 +598,17 @@ impl Fsm for ArtboardToolFsmState { #[cfg(test)] mod test_artboard { pub use crate::test_utils::test_prelude::*; + use graphene_std::table::Table; - async fn get_artboards(editor: &mut EditorTestUtils) -> Vec { + async fn get_artboards(editor: &mut EditorTestUtils) -> Table { let instrumented = match editor.eval_graph().await { Ok(instrumented) => instrumented, - Err(e) => panic!("Failed to evaluate graph: {}", e), + Err(e) => panic!("Failed to evaluate graph: {e}"), }; - instrumented.grab_all_input::(&editor.runtime).collect() + instrumented + .grab_all_input::>(&editor.runtime) + .flatten() + .collect() } #[tokio::test] @@ -580,8 +620,8 @@ mod test_artboard { let artboards = get_artboards(&mut editor).await; assert_eq!(artboards.len(), 1); - assert_eq!(artboards[0].location, IVec2::new(10, 0)); - assert_eq!(artboards[0].dimensions, IVec2::new(10, 11)); + assert_eq!(artboards.get(0).unwrap().element.location, IVec2::new(10, 0)); + assert_eq!(artboards.get(0).unwrap().element.dimensions, IVec2::new(10, 11)); } #[tokio::test] @@ -592,8 +632,8 @@ mod test_artboard { let artboards = get_artboards(&mut editor).await; assert_eq!(artboards.len(), 1); - assert_eq!(artboards[0].location, IVec2::new(-10, 10)); - assert_eq!(artboards[0].dimensions, IVec2::new(20, 20)); + assert_eq!(artboards.get(0).unwrap().element.location, IVec2::new(-10, 10)); + assert_eq!(artboards.get(0).unwrap().element.dimensions, IVec2::new(20, 20)); } #[tokio::test] @@ -611,9 +651,9 @@ mod test_artboard { let artboards = get_artboards(&mut editor).await; assert_eq!(artboards.len(), 1); - assert_eq!(artboards[0].location, IVec2::new(0, 0)); + assert_eq!(artboards.get(0).unwrap().element.location, IVec2::new(0, 0)); let desired_size = DVec2::splat(f64::consts::FRAC_1_SQRT_2 * 10.); - assert_eq!(artboards[0].dimensions, desired_size.round().as_ivec2()); + assert_eq!(artboards.get(0).unwrap().element.dimensions, desired_size.round().as_ivec2()); } #[tokio::test] @@ -632,9 +672,9 @@ mod test_artboard { let artboards = get_artboards(&mut editor).await; assert_eq!(artboards.len(), 1); - assert_eq!(artboards[0].location, DVec2::splat(f64::consts::FRAC_1_SQRT_2 * -10.).as_ivec2()); + assert_eq!(artboards.get(0).unwrap().element.location, DVec2::splat(f64::consts::FRAC_1_SQRT_2 * -10.).as_ivec2()); let desired_size = DVec2::splat(f64::consts::FRAC_1_SQRT_2 * 20.); - assert_eq!(artboards[0].dimensions, desired_size.round().as_ivec2()); + assert_eq!(artboards.get(0).unwrap().element.dimensions, desired_size.round().as_ivec2()); } #[tokio::test] diff --git a/editor/src/messages/tool/tool_messages/brush_tool.rs b/editor/src/messages/tool/tool_messages/brush_tool.rs index 202d026e0b..650031acc0 100644 --- a/editor/src/messages/tool/tool_messages/brush_tool.rs +++ b/editor/src/messages/tool/tool_messages/brush_tool.rs @@ -28,7 +28,6 @@ pub struct BrushTool { } pub struct BrushOptions { - legacy_warning_was_shown: bool, diameter: f64, hardness: f64, flow: f64, @@ -41,7 +40,6 @@ pub struct BrushOptions { impl Default for BrushOptions { fn default() -> Self { Self { - legacy_warning_was_shown: false, diameter: DEFAULT_BRUSH_SIZE, hardness: 0., flow: 100., @@ -64,7 +62,7 @@ pub enum BrushToolMessage { DragStart, DragStop, PointerMove, - UpdateOptions(BrushToolMessageOptionsUpdate), + UpdateOptions { options: BrushToolMessageOptionsUpdate }, } #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] @@ -79,7 +77,6 @@ pub enum BrushToolMessageOptionsUpdate { Hardness(f64), Spacing(f64), WorkingColors(Option, Option), - NoDisplayLegacyWarning, } #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] @@ -109,7 +106,7 @@ impl LayoutHolder for BrushTool { .min(1.) .max(BRUSH_MAX_SIZE) /* Anything bigger would cause the application to be unresponsive and eventually die */ .unit(" px") - .on_update(|number_input: &NumberInput| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::Diameter(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| BrushToolMessage::UpdateOptions { options: BrushToolMessageOptionsUpdate::Diameter(number_input.value.unwrap()) }.into()) .widget_holder(), Separator::new(SeparatorType::Related).widget_holder(), NumberInput::new(Some(self.options.hardness)) @@ -118,7 +115,12 @@ impl LayoutHolder for BrushTool { .max(100.) .mode_range() .unit("%") - .on_update(|number_input: &NumberInput| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::Hardness(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::Hardness(number_input.value.unwrap()), + } + .into() + }) .widget_holder(), Separator::new(SeparatorType::Related).widget_holder(), NumberInput::new(Some(self.options.flow)) @@ -127,7 +129,12 @@ impl LayoutHolder for BrushTool { .max(100.) .mode_range() .unit("%") - .on_update(|number_input: &NumberInput| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::Flow(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::Flow(number_input.value.unwrap()), + } + .into() + }) .widget_holder(), Separator::new(SeparatorType::Related).widget_holder(), NumberInput::new(Some(self.options.spacing)) @@ -136,7 +143,12 @@ impl LayoutHolder for BrushTool { .max(100.) .mode_range() .unit("%") - .on_update(|number_input: &NumberInput| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::Spacing(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::Spacing(number_input.value.unwrap()), + } + .into() + }) .widget_holder(), ]; @@ -144,7 +156,14 @@ impl LayoutHolder for BrushTool { let draw_mode_entries: Vec<_> = [DrawMode::Draw, DrawMode::Erase, DrawMode::Restore] .into_iter() - .map(|draw_mode| RadioEntryData::new(format!("{draw_mode:?}")).on_update(move |_| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::DrawMode(draw_mode)).into())) + .map(|draw_mode| { + RadioEntryData::new(format!("{draw_mode:?}")).label(format!("{draw_mode:?}")).on_update(move |_| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::DrawMode(draw_mode), + } + .into() + }) + }) .collect(); widgets.push(RadioInput::new(draw_mode_entries).selected_index(Some(self.options.draw_mode as u32)).widget_holder()); @@ -153,22 +172,42 @@ impl LayoutHolder for BrushTool { widgets.append(&mut self.options.color.create_widgets( "Color", false, - |_| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::Color(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::ColorType(color_type.clone())).into()), - |color: &ColorInput| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::Color(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::Color(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::ColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::Color(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); widgets.push(Separator::new(SeparatorType::Related).widget_holder()); let blend_mode_entries: Vec> = BlendMode::list() .iter() - .map(|group| { - group + .map(|section| { + section .iter() .map(|blend_mode| { - MenuListEntry::new(format!("{blend_mode:?}")) - .label(blend_mode.to_string()) - .on_commit(|_| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::BlendMode(*blend_mode)).into()) + MenuListEntry::new(format!("{blend_mode:?}")).label(blend_mode.to_string()).on_commit(|_| { + BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::BlendMode(*blend_mode), + } + .into() + }) }) .collect() }) @@ -188,11 +227,11 @@ impl LayoutHolder for BrushTool { #[message_handler_data] impl<'a> MessageHandler> for BrushTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Brush(BrushToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Brush(BrushToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.data, context, &self.options, responses, true); return; }; - match action { + match options { BrushToolMessageOptionsUpdate::BlendMode(blend_mode) => self.options.blend_mode = blend_mode, BrushToolMessageOptionsUpdate::ChangeDiameter(change) => { let needs_rounding = ((self.options.diameter + change.abs() / 2.) % change.abs() - change.abs() / 2.).abs() > 0.5; @@ -220,7 +259,6 @@ impl<'a> MessageHandler> for Brus self.options.color.primary_working_color = primary; self.options.color.secondary_working_color = secondary; } - BrushToolMessageOptionsUpdate::NoDisplayLegacyWarning => self.options.legacy_warning_was_shown = true, } self.send_layout(responses, LayoutTarget::ToolOptions); @@ -318,20 +356,6 @@ impl Fsm for BrushToolFsmState { document, global_tool_data, input, .. } = tool_action_data; - if !tool_options.legacy_warning_was_shown { - responses.add(DialogMessage::DisplayDialogError { - title: "Unsupported tool".into(), - description: " - The current Brush tool is a legacy feature with\n\ - significant quality and performance limitations.\n\ - It will be replaced soon by a new implementation.\n\ - " - .trim() - .into(), - }); - responses.add(BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::NoDisplayLegacyWarning)); - } - let ToolMessage::Brush(event) = event else { return self }; match (self, event) { (BrushToolFsmState::Ready, BrushToolMessage::DragStart) => { @@ -379,8 +403,9 @@ impl Fsm for BrushToolFsmState { else { new_brush_layer(document, responses); responses.add(NodeGraphMessage::RunDocumentGraph); - responses.add(Message::StartBuffer); - responses.add(BrushToolMessage::DragStart); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![BrushToolMessage::DragStart.into()], + }); BrushToolFsmState::Ready } } @@ -421,10 +446,9 @@ impl Fsm for BrushToolFsmState { BrushToolFsmState::Ready } (_, BrushToolMessage::WorkingColorChanged) => { - responses.add(BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::WorkingColors( - Some(global_tool_data.primary_color), - Some(global_tool_data.secondary_color), - ))); + responses.add(BrushToolMessage::UpdateOptions { + options: BrushToolMessageOptionsUpdate::WorkingColors(Some(global_tool_data.primary_color), Some(global_tool_data.secondary_color)), + }); self } _ => self, diff --git a/editor/src/messages/tool/tool_messages/fill_tool.rs b/editor/src/messages/tool/tool_messages/fill_tool.rs index 6a9429e3e9..228ab5a5f3 100644 --- a/editor/src/messages/tool/tool_messages/fill_tool.rs +++ b/editor/src/messages/tool/tool_messages/fill_tool.rs @@ -14,7 +14,7 @@ pub enum FillToolMessage { // Standard messages Abort, WorkingColorChanged, - Overlays(OverlayContext), + Overlays { context: OverlayContext }, // Tool-specific messages PointerMove, @@ -67,7 +67,7 @@ impl ToolTransition for FillTool { EventToMessageMap { tool_abort: Some(FillToolMessage::Abort.into()), working_color_changed: Some(FillToolMessage::WorkingColorChanged.into()), - overlay_provider: Some(|overlay_context| FillToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| FillToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -99,7 +99,7 @@ impl Fsm for FillToolFsmState { let ToolMessage::Fill(event) = event else { return self }; match (self, event) { - (_, FillToolMessage::Overlays(mut overlay_context)) => { + (_, FillToolMessage::Overlays { context: mut overlay_context }) => { // Choose the working color to preview let use_secondary = input.keyboard.get(Key::Shift as usize); let preview_color = if use_secondary { global_tool_data.secondary_color } else { global_tool_data.primary_color }; diff --git a/editor/src/messages/tool/tool_messages/freehand_tool.rs b/editor/src/messages/tool/tool_messages/freehand_tool.rs index 8b0dbb73f3..f33b043563 100644 --- a/editor/src/messages/tool/tool_messages/freehand_tool.rs +++ b/editor/src/messages/tool/tool_messages/freehand_tool.rs @@ -40,7 +40,7 @@ impl Default for FreehandOptions { #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub enum FreehandToolMessage { // Standard messages - Overlays(OverlayContext), + Overlays { context: OverlayContext }, Abort, WorkingColorChanged, @@ -48,7 +48,7 @@ pub enum FreehandToolMessage { DragStart { append_to_selected: Key }, DragStop, PointerMove, - UpdateOptions(FreehandOptionsUpdate), + UpdateOptions { options: FreehandOptionsUpdate }, } #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] @@ -86,7 +86,12 @@ fn create_weight_widget(line_weight: f64) -> WidgetHolder { .label("Weight") .min(1.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) - .on_update(|number_input: &NumberInput| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::LineWeight(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::LineWeight(number_input.value.unwrap()), + } + .into() + }) .widget_holder() } @@ -95,9 +100,26 @@ impl LayoutHolder for FreehandTool { let mut widgets = self.options.fill.create_widgets( "Fill", true, - |_| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::FillColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::FillColorType(color_type.clone())).into()), - |color: &ColorInput| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::FillColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::FillColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, ); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); @@ -105,9 +127,26 @@ impl LayoutHolder for FreehandTool { widgets.append(&mut self.options.stroke.create_widgets( "Stroke", true, - |_| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::StrokeColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::StrokeColorType(color_type.clone())).into()), - |color: &ColorInput| FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::StrokeColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::StrokeColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); widgets.push(create_weight_widget(self.options.line_weight)); @@ -119,11 +158,11 @@ impl LayoutHolder for FreehandTool { #[message_handler_data] impl<'a> MessageHandler> for FreehandTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Freehand(FreehandToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Freehand(FreehandToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.data, context, &self.options, responses, true); return; }; - match action { + match options { FreehandOptionsUpdate::FillColor(color) => { self.options.fill.custom_color = color; self.options.fill.color_type = ToolColorType::Custom; @@ -164,7 +203,7 @@ impl<'a> MessageHandler> for Free impl ToolTransition for FreehandTool { fn event_to_message_map(&self) -> EventToMessageMap { EventToMessageMap { - overlay_provider: Some(|overlay_context: OverlayContext| FreehandToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context: OverlayContext| FreehandToolMessage::Overlays { context }.into()), tool_abort: Some(FreehandToolMessage::Abort.into()), working_color_changed: Some(FreehandToolMessage::WorkingColorChanged.into()), ..Default::default() @@ -203,7 +242,7 @@ impl Fsm for FreehandToolFsmState { let ToolMessage::Freehand(event) = event else { return self }; match (self, event) { - (_, FreehandToolMessage::Overlays(mut overlay_context)) => { + (_, FreehandToolMessage::Overlays { context: mut overlay_context }) => { path_endpoint_overlays(document, shape_editor, &mut overlay_context, tool_action_data.preferences); self @@ -251,7 +290,6 @@ impl Fsm for FreehandToolFsmState { let nodes = vec![(NodeId(0), node)]; let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses); - responses.add(Message::StartBuffer); tool_options.fill.apply_fill(layer, responses); tool_options.stroke.apply_stroke(tool_data.weight, layer, responses); tool_data.layer = Some(layer); @@ -288,10 +326,9 @@ impl Fsm for FreehandToolFsmState { FreehandToolFsmState::Ready } (_, FreehandToolMessage::WorkingColorChanged) => { - responses.add(FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::WorkingColors( - Some(global_tool_data.primary_color), - Some(global_tool_data.secondary_color), - ))); + responses.add(FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::WorkingColors(Some(global_tool_data.primary_color), Some(global_tool_data.secondary_color)), + }); self } _ => self, @@ -353,48 +390,44 @@ fn extend_path_with_next_segment(tool_data: &mut FreehandToolData, position: DVe mod test_freehand { use crate::messages::input_mapper::utility_types::input_mouse::{EditorMouseState, MouseKeys, ScrollDelta}; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; - use crate::messages::tool::common_functionality::graph_modification_utils::get_stroke_width; + use crate::messages::tool::common_functionality::graph_modification_utils::{NodeGraphLayer, get_stroke_width}; use crate::messages::tool::tool_messages::freehand_tool::FreehandOptionsUpdate; use crate::test_utils::test_prelude::*; use glam::{DAffine2, DVec2}; - use graphene_std::vector::VectorData; + use graphene_std::vector::Vector; - async fn get_vector_data(editor: &mut EditorTestUtils) -> Vec<(VectorData, DAffine2)> { + async fn get_vector_and_transform_list(editor: &mut EditorTestUtils) -> Vec<(Vector, DAffine2)> { let document = editor.active_document(); let layers = document.metadata().all_layers(); layers .filter_map(|layer| { - let vector_data = document.network_interface.compute_modified_vector(layer)?; + let graph_layer = NodeGraphLayer::new(layer, &document.network_interface); + // Only get layers with path nodes + let _ = graph_layer.upstream_visible_node_id_from_name_in_layer("Path")?; + + let vector = document.network_interface.compute_modified_vector(layer)?; let transform = document.metadata().transform_to_viewport(layer); - Some((vector_data, transform)) + Some((vector, transform)) }) .collect() } - fn verify_path_points(vector_data_list: &[(VectorData, DAffine2)], expected_captured_points: &[DVec2], tolerance: f64) -> Result<(), String> { - if vector_data_list.len() == 0 { - return Err("No vector data found after drawing".to_string()); - } + fn verify_path_points(vector_and_transform_list: &[(Vector, DAffine2)], expected_captured_points: &[DVec2], tolerance: f64) -> Result<(), String> { + assert_eq!(vector_and_transform_list.len(), 1, "There should be one row of Vector geometry"); - let path_data = vector_data_list.iter().find(|(data, _)| data.point_domain.ids().len() > 0).ok_or("Could not find path data")?; - - let (vector_data, transform) = path_data; - let point_count = vector_data.point_domain.ids().len(); - let segment_count = vector_data.segment_domain.ids().len(); - - let actual_positions: Vec = vector_data - .point_domain - .ids() + let (vector, transform) = vector_and_transform_list .iter() - .filter_map(|&point_id| { - let position = vector_data.point_domain.position_from_id(point_id)?; - Some(transform.transform_point2(position)) - }) - .collect(); + .find(|(data, _)| !data.point_domain.ids().is_empty()) + .ok_or("Could not find path data")?; + + let point_count = vector.point_domain.ids().len(); + let segment_count = vector.segment_domain.ids().len(); + + let actual_positions: Vec = vector.point_domain.positions().iter().map(|&position| transform.transform_point2(position)).collect(); if segment_count != point_count - 1 { - return Err(format!("Expected segments to be one less than points, got {} segments for {} points", segment_count, point_count)); + return Err(format!("Expected segments to be one less than points, got {segment_count} segments for {point_count} points")); } if point_count != expected_captured_points.len() { @@ -404,7 +437,7 @@ mod test_freehand { for (i, (&expected, &actual)) in expected_captured_points.iter().zip(actual_positions.iter()).enumerate() { let distance = (expected - actual).length(); if distance >= tolerance { - return Err(format!("Point {} position mismatch: expected {:?}, got {:?} (distance: {})", i, expected, actual, distance)); + return Err(format!("Point {i} position mismatch: expected {expected:?}, got {actual:?} (distance: {distance})")); } } @@ -438,8 +471,8 @@ mod test_freehand { let expected_captured_points = &mouse_points[1..]; editor.drag_path(&mouse_points, ModifierKeys::empty()).await; - let vector_data_list = get_vector_data(&mut editor).await; - verify_path_points(&vector_data_list, expected_captured_points, 1.).expect("Path points verification failed"); + let vector_and_transform_list = get_vector_and_transform_list(&mut editor).await; + verify_path_points(&vector_and_transform_list, expected_captured_points, 1.).expect("Path points verification failed"); } #[tokio::test] @@ -471,14 +504,14 @@ mod test_freehand { ) .await; - let initial_vector_data = get_vector_data(&mut editor).await; - assert!(!initial_vector_data.is_empty(), "No vector data found after initial drawing"); + let initial_vector_and_transform_list = get_vector_and_transform_list(&mut editor).await; + assert!(!initial_vector_and_transform_list.is_empty(), "No Vector geometry found after initial drawing"); - let (initial_data, transform) = &initial_vector_data[0]; - let initial_point_count = initial_data.point_domain.ids().len(); - let initial_segment_count = initial_data.segment_domain.ids().len(); + let (initial_vector, initial_transform) = &initial_vector_and_transform_list[0]; + let initial_point_count = initial_vector.point_domain.ids().len(); + let initial_segment_count = initial_vector.segment_domain.ids().len(); - assert!(initial_point_count >= 2, "Expected at least 2 points in initial path, found {}", initial_point_count); + assert!(initial_point_count >= 2, "Expected at least 2 points in initial path, found {initial_point_count}"); assert_eq!( initial_segment_count, initial_point_count - 1, @@ -487,15 +520,15 @@ mod test_freehand { initial_segment_count ); - let extendable_points = initial_data.extendable_points(false).collect::>(); + let extendable_points = initial_vector.extendable_points(false).collect::>(); assert!(!extendable_points.is_empty(), "No extendable points found in the path"); let endpoint_id = extendable_points[0]; - let endpoint_pos_option = initial_data.point_domain.position_from_id(endpoint_id); + let endpoint_pos_option = initial_vector.point_domain.position_from_id(endpoint_id); assert!(endpoint_pos_option.is_some(), "Could not find position for endpoint"); let endpoint_pos = endpoint_pos_option.unwrap(); - let endpoint_viewport_pos = transform.transform_point2(endpoint_pos); + let endpoint_viewport_pos = initial_transform.transform_point2(endpoint_pos); assert!(endpoint_viewport_pos.is_finite(), "Endpoint position is not finite"); @@ -530,26 +563,22 @@ mod test_freehand { ) .await; - let extended_vector_data = get_vector_data(&mut editor).await; - assert!(!extended_vector_data.is_empty(), "No vector data found after extension"); + let extended_vector_and_transform = get_vector_and_transform_list(&mut editor).await; + assert!(!extended_vector_and_transform.is_empty(), "No Vector geometry found after extension"); - let (extended_data, _) = &extended_vector_data[0]; - let extended_point_count = extended_data.point_domain.ids().len(); - let extended_segment_count = extended_data.segment_domain.ids().len(); + let (extended_vector, _) = &extended_vector_and_transform[0]; + let extended_point_count = extended_vector.point_domain.ids().len(); + let extended_segment_count = extended_vector.segment_domain.ids().len(); assert!( extended_point_count > initial_point_count, - "Expected more points after extension, initial: {}, after extension: {}", - initial_point_count, - extended_point_count + "Expected more points after extension, initial: {initial_point_count}, after extension: {extended_point_count}" ); assert_eq!( extended_segment_count, extended_point_count - 1, - "Expected segments to be one less than points, points: {}, segments: {}", - extended_point_count, - extended_segment_count + "Expected segments to be one less than points, points: {extended_point_count}, segments: {extended_segment_count}" ); let layer_count = { @@ -588,17 +617,17 @@ mod test_freehand { ) .await; - let initial_vector_data = get_vector_data(&mut editor).await; - assert!(!initial_vector_data.is_empty(), "No vector data found after initial drawing"); + let initial_vector_and_transform = get_vector_and_transform_list(&mut editor).await; + assert!(!initial_vector_and_transform.is_empty(), "No vector geometry found after initial drawing"); - let (initial_data, _) = &initial_vector_data[0]; - let initial_point_count = initial_data.point_domain.ids().len(); - let initial_segment_count = initial_data.segment_domain.ids().len(); + let (initial_vector, _) = &initial_vector_and_transform[0]; + let initial_point_count = initial_vector.point_domain.ids().len(); + let initial_segment_count = initial_vector.segment_domain.ids().len(); let existing_layer_id = { let document = editor.active_document(); - let layer = document.metadata().all_layers().next().unwrap(); - layer + + document.metadata().all_layers().next().unwrap() }; editor @@ -639,8 +668,8 @@ mod test_freehand { ) .await; - let final_vector_data = get_vector_data(&mut editor).await; - assert!(!final_vector_data.is_empty(), "No vector data found after second drawing"); + let final_vector_and_transform = get_vector_and_transform_list(&mut editor).await; + assert!(!final_vector_and_transform.is_empty(), "No vector geometry found after second drawing"); // Verify we still have only one layer let layer_count = { @@ -649,15 +678,13 @@ mod test_freehand { }; assert_eq!(layer_count, 1, "Expected only one layer after drawing with Shift key"); - let (final_data, _) = &final_vector_data[0]; - let final_point_count = final_data.point_domain.ids().len(); - let final_segment_count = final_data.segment_domain.ids().len(); + let (final_vector, _) = &final_vector_and_transform[0]; + let final_point_count = final_vector.point_domain.ids().len(); + let final_segment_count = final_vector.segment_domain.ids().len(); assert!( final_point_count > initial_point_count, - "Expected more points after appending to layer, initial: {}, after append: {}", - initial_point_count, - final_point_count + "Expected more points after appending to layer, initial: {initial_point_count}, after append: {final_point_count}" ); let expected_new_points = second_path_points.len(); @@ -687,7 +714,9 @@ mod test_freehand { let custom_line_weight = 5.; editor - .handle_message(ToolMessage::Freehand(FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::LineWeight(custom_line_weight)))) + .handle_message(ToolMessage::Freehand(FreehandToolMessage::UpdateOptions { + options: FreehandOptionsUpdate::LineWeight(custom_line_weight), + })) .await; let points = [DVec2::new(100., 100.), DVec2::new(200., 200.), DVec2::new(300., 100.)]; diff --git a/editor/src/messages/tool/tool_messages/gradient_tool.rs b/editor/src/messages/tool/tool_messages/gradient_tool.rs index de6d5753d8..848dfaf60f 100644 --- a/editor/src/messages/tool/tool_messages/gradient_tool.rs +++ b/editor/src/messages/tool/tool_messages/gradient_tool.rs @@ -24,7 +24,7 @@ pub struct GradientOptions { pub enum GradientToolMessage { // Standard messages Abort, - Overlays(OverlayContext), + Overlays { context: OverlayContext }, // Tool-specific messages DeleteStop, @@ -33,7 +33,7 @@ pub enum GradientToolMessage { PointerMove { constrain_axis: Key }, PointerOutsideViewport { constrain_axis: Key }, PointerUp, - UpdateOptions(GradientOptionsUpdate), + UpdateOptions { options: GradientOptionsUpdate }, } #[derive(PartialEq, Eq, Clone, Debug, Hash, serde::Serialize, serde::Deserialize, specta::Type)] @@ -56,11 +56,11 @@ impl ToolMetadata for GradientTool { #[message_handler_data] impl<'a> MessageHandler> for GradientTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Gradient(GradientToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Gradient(GradientToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.data, context, &self.options, responses, false); return; }; - match action { + match options { GradientOptionsUpdate::Type(gradient_type) => { self.options.gradient_type = gradient_type; // Update the selected gradient if it exists @@ -91,14 +91,18 @@ impl<'a> MessageHandler> for Grad impl LayoutHolder for GradientTool { fn layout(&self) -> Layout { let gradient_type = RadioInput::new(vec![ - RadioEntryData::new("Linear") - .label("Linear") - .tooltip("Linear gradient") - .on_update(move |_| GradientToolMessage::UpdateOptions(GradientOptionsUpdate::Type(GradientType::Linear)).into()), - RadioEntryData::new("Radial") - .label("Radial") - .tooltip("Radial gradient") - .on_update(move |_| GradientToolMessage::UpdateOptions(GradientOptionsUpdate::Type(GradientType::Radial)).into()), + RadioEntryData::new("Linear").label("Linear").tooltip("Linear gradient").on_update(move |_| { + GradientToolMessage::UpdateOptions { + options: GradientOptionsUpdate::Type(GradientType::Linear), + } + .into() + }), + RadioEntryData::new("Radial").label("Radial").tooltip("Radial gradient").on_update(move |_| { + GradientToolMessage::UpdateOptions { + options: GradientOptionsUpdate::Type(GradientType::Radial), + } + .into() + }), ]) .selected_index(Some((self.selected_gradient().unwrap_or(self.options.gradient_type) == GradientType::Radial) as u32)) .widget_holder(); @@ -204,7 +208,6 @@ impl SelectedGradient { /// Update the layer fill to the current gradient pub fn render_gradient(&mut self, responses: &mut VecDeque) { - self.gradient.transform = self.transform; if let Some(layer) = self.layer { responses.add(GraphOperationMessage::FillSet { layer, @@ -225,7 +228,7 @@ impl ToolTransition for GradientTool { fn event_to_message_map(&self) -> EventToMessageMap { EventToMessageMap { tool_abort: Some(GradientToolMessage::Abort.into()), - overlay_provider: Some(|overlay_context| GradientToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| GradientToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -257,7 +260,7 @@ impl Fsm for GradientToolFsmState { let ToolMessage::Gradient(event) = event else { return self }; match (self, event) { - (_, GradientToolMessage::Overlays(mut overlay_context)) => { + (_, GradientToolMessage::Overlays { context: mut overlay_context }) => { let selected = tool_data.selected_gradient.as_ref(); for layer in document.network_interface.selected_nodes().selected_visible_layers(&document.network_interface) { @@ -436,14 +439,7 @@ impl Fsm for GradientToolFsmState { gradient.clone() } else { // Generate a new gradient - Gradient::new( - DVec2::ZERO, - global_tool_data.secondary_color, - DVec2::ONE, - global_tool_data.primary_color, - DAffine2::IDENTITY, - tool_options.gradient_type, - ) + Gradient::new(DVec2::ZERO, global_tool_data.secondary_color, DVec2::ONE, global_tool_data.primary_color, tool_options.gradient_type) }; let selected_gradient = SelectedGradient::new(gradient, layer, document).with_gradient_start(input.mouse.position); @@ -556,7 +552,7 @@ mod test_gradient { async fn get_fills(editor: &mut EditorTestUtils) -> Vec<(Fill, DAffine2)> { let instrumented = match editor.eval_graph().await { Ok(instrumented) => instrumented, - Err(e) => panic!("Failed to evaluate graph: {}", e), + Err(e) => panic!("Failed to evaluate graph: {e}"), }; let document = editor.active_document(); @@ -577,7 +573,7 @@ mod test_gradient { let (fill, transform) = fills.first().unwrap(); let gradient = fill.as_gradient().expect("Expected gradient fill type"); - (gradient.clone(), transform.clone()) + (gradient.clone(), *transform) } fn assert_stops_at_positions(actual_positions: &[f64], expected_positions: &[f64], tolerance: f64) { @@ -590,7 +586,7 @@ mod test_gradient { ); for (i, (actual, expected)) in actual_positions.iter().zip(expected_positions.iter()).enumerate() { - assert!((actual - expected).abs() < tolerance, "Stop {}: Expected position near {}, got {}", i, expected, actual); + assert!((actual - expected).abs() < tolerance, "Stop {i}: Expected position near {expected}, got {actual}"); } } @@ -674,6 +670,7 @@ mod test_gradient { let folder = layers.next().unwrap(); let rectangle = layers.next().unwrap(); assert_eq!(rectangle.parent(metadata), Some(folder)); + // Transform the group editor .handle_message(GraphOperationMessage::TransformSet { @@ -716,8 +713,7 @@ mod test_gradient { let positions: Vec = updated_gradient.stops.iter().map(|(pos, _)| *pos).collect(); assert!( positions.iter().any(|pos| (pos - 0.5).abs() < 0.1), - "Expected to find a stop near position 0.5, but found: {:?}", - positions + "Expected to find a stop near position 0.5, but found: {positions:?}" ); } @@ -785,7 +781,7 @@ mod test_gradient { // Verify the end point has been updated to the new position let updated_end = transform.transform_point2(updated_gradient.end); - assert!(updated_end.abs_diff_eq(DVec2::new(100., 50.), 1e-10), "Expected end point at (100, 50), got {:?}", updated_end); + assert!(updated_end.abs_diff_eq(DVec2::new(100., 50.), 1e-10), "Expected end point at (100, 50), got {updated_end:?}"); } #[tokio::test] diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index f5ebc33189..3dadf888b0 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -1,11 +1,14 @@ use super::select_tool::extend_lasso; use super::tool_prelude::*; use crate::consts::{ - COLOR_OVERLAY_BLUE, COLOR_OVERLAY_GRAY, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, DOUBLE_CLICK_MILLISECONDS, DRAG_DIRECTION_MODE_DETERMINATION_THRESHOLD, DRAG_THRESHOLD, DRILL_THROUGH_THRESHOLD, - HANDLE_ROTATE_SNAP_ANGLE, SEGMENT_INSERTION_DISTANCE, SEGMENT_OVERLAY_SIZE, SELECTION_THRESHOLD, SELECTION_TOLERANCE, + COLOR_OVERLAY_BLUE, COLOR_OVERLAY_GRAY, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, DEFAULT_STROKE_WIDTH, DOUBLE_CLICK_MILLISECONDS, DRAG_DIRECTION_MODE_DETERMINATION_THRESHOLD, DRAG_THRESHOLD, + DRILL_THROUGH_THRESHOLD, HANDLE_ROTATE_SNAP_ANGLE, SEGMENT_INSERTION_DISTANCE, SEGMENT_OVERLAY_SIZE, SELECTION_THRESHOLD, SELECTION_TOLERANCE, }; +use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; +use crate::messages::portfolio::document::node_graph::document_node_definitions::resolve_document_node_type; use crate::messages::portfolio::document::overlays::utility_functions::{path_overlays, selected_segments}; use crate::messages::portfolio::document::overlays::utility_types::{DrawHandles, OverlayContext}; +use crate::messages::portfolio::document::utility_types::clipboards::Clipboard; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; use crate::messages::portfolio::document::utility_types::transformation::Axis; @@ -17,14 +20,17 @@ use crate::messages::tool::common_functionality::shape_editor::{ ClosestSegment, ManipulatorAngle, OpposingHandleLengths, SelectedLayerState, SelectedPointsInfo, SelectionChange, SelectionShape, SelectionShapeType, ShapeState, }; use crate::messages::tool::common_functionality::snapping::{SnapCache, SnapCandidatePoint, SnapConstraint, SnapData, SnapManager}; -use crate::messages::tool::common_functionality::utility_functions::{calculate_segment_angle, find_two_param_best_approximate}; -use bezier_rs::{Bezier, BezierHandles, TValue}; -use graph_craft::document::value::TaggedValue; +use crate::messages::tool::common_functionality::utility_functions::{calculate_segment_angle, find_two_param_best_approximate, make_path_editable_is_allowed}; +use graphene_std::Color; use graphene_std::renderer::Quad; +use graphene_std::subpath::pathseg_points; use graphene_std::transform::ReferencePoint; +use graphene_std::uuid::NodeId; +use graphene_std::vector::algorithms::util::pathseg_tangent; use graphene_std::vector::click_target::ClickTargetType; -use graphene_std::vector::{HandleExt, HandleId, NoHashBuilder, SegmentId, VectorData}; -use graphene_std::vector::{ManipulatorPointId, PointId, VectorModificationType}; +use graphene_std::vector::misc::{HandleId, ManipulatorPointId, dvec2_to_point, point_to_dvec2}; +use graphene_std::vector::{HandleExt, NoHashBuilder, PointId, SegmentId, Vector, VectorModificationType}; +use kurbo::{DEFAULT_ACCURACY, ParamCurve, ParamCurveNearest, PathSeg, Rect}; use std::vec; #[derive(Default, ExtractField)] @@ -45,12 +51,14 @@ pub struct PathToolOptions { pub enum PathToolMessage { // Standard messages Abort, - Overlays(OverlayContext), SelectionChanged, + Overlays { + context: OverlayContext, + }, // Tool-specific messages BreakPath, - DeselectAllPoints, + DeselectAllSelected, Delete, DeleteAndBreakPath, DragStop { @@ -78,7 +86,7 @@ pub enum PathToolMessage { lasso_select: Key, handle_drag_from_anchor: Key, drag_restore_handle: Key, - molding_in_segment_edit: Key, + segment_editing_modifier: Key, }, NudgeSelectedPoints { delta_x: f64, @@ -92,6 +100,7 @@ pub enum PathToolMessage { lock_angle: Key, delete_segment: Key, break_colinear_molding: Key, + segment_editing_modifier: Key, }, PointerOutsideViewport { equidistant: Key, @@ -101,9 +110,10 @@ pub enum PathToolMessage { lock_angle: Key, delete_segment: Key, break_colinear_molding: Key, + segment_editing_modifier: Key, }, RightClick, - SelectAllAnchors, + SelectAll, SelectedPointUpdated, SelectedPointXChanged { new_x: f64, @@ -115,10 +125,26 @@ pub enum PathToolMessage { position: ReferencePoint, }, SwapSelectedHandles, - UpdateOptions(PathOptionsUpdate), + UpdateOptions { + options: PathOptionsUpdate, + }, UpdateSelectedPointsStatus { overlay_context: OverlayContext, }, + StartSlidingPoint, + Copy { + clipboard: Clipboard, + }, + Cut { + clipboard: Clipboard, + }, + Paste { + data: String, + }, + DeleteSelected, + Duplicate, + TogglePointEditing, + ToggleSegmentEditing, } #[derive(PartialEq, Eq, Hash, Copy, Clone, Debug, Default, serde::Serialize, serde::Deserialize, specta::Type)] @@ -217,7 +243,7 @@ impl LayoutHolder for PathTool { }) // TODO: Remove `unwrap_or_default` once checkboxes are capable of displaying a mixed state .unwrap_or_default(); - let mut checkbox_id = CheckboxId::default(); + let checkbox_id = CheckboxId::new(); let colinear_handle_checkbox = CheckboxInput::new(colinear_handles_state) .disabled(!self.tool_data.can_toggle_colinearity) .on_update(|&CheckboxInput { checked, .. }| { @@ -228,50 +254,65 @@ impl LayoutHolder for PathTool { } }) .tooltip(colinear_handles_tooltip) - .for_label(checkbox_id.clone()) + .for_label(checkbox_id) .widget_holder(); let colinear_handles_label = TextLabel::new("Colinear Handles") .disabled(!self.tool_data.can_toggle_colinearity) .tooltip(colinear_handles_tooltip) - .for_checkbox(&mut checkbox_id) + .for_checkbox(checkbox_id) .widget_holder(); let point_editing_mode = CheckboxInput::new(self.options.path_editing_mode.point_editing_mode) // TODO(Keavon): Replace with a real icon .icon("Dot") - .tooltip("Point Editing Mode") - .on_update(|input| PathToolMessage::UpdateOptions(PathOptionsUpdate::PointEditingMode { enabled: input.checked }).into()) + .tooltip("Point Editing Mode\n\nShift + click to select both modes.") + .on_update(|_| PathToolMessage::TogglePointEditing.into()) .widget_holder(); let segment_editing_mode = CheckboxInput::new(self.options.path_editing_mode.segment_editing_mode) // TODO(Keavon): Replace with a real icon .icon("Remove") - .tooltip("Segment Editing Mode") - .on_update(|input| PathToolMessage::UpdateOptions(PathOptionsUpdate::SegmentEditingMode { enabled: input.checked }).into()) + .tooltip("Segment Editing Mode\n\nShift + click to select both modes.") + .on_update(|_| PathToolMessage::ToggleSegmentEditing.into()) .widget_holder(); let path_overlay_mode_widget = RadioInput::new(vec![ RadioEntryData::new("all") .icon("HandleVisibilityAll") .tooltip("Show all handles regardless of selection") - .on_update(move |_| PathToolMessage::UpdateOptions(PathOptionsUpdate::OverlayModeType(PathOverlayMode::AllHandles)).into()), + .on_update(move |_| { + PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::OverlayModeType(PathOverlayMode::AllHandles), + } + .into() + }), RadioEntryData::new("selected") .icon("HandleVisibilitySelected") .tooltip("Show only handles of the segments connected to selected points") - .on_update(move |_| PathToolMessage::UpdateOptions(PathOptionsUpdate::OverlayModeType(PathOverlayMode::SelectedPointHandles)).into()), + .on_update(move |_| { + PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::OverlayModeType(PathOverlayMode::SelectedPointHandles), + } + .into() + }), RadioEntryData::new("frontier") .icon("HandleVisibilityFrontier") .tooltip("Show only handles at the frontiers of the segments connected to selected points") - .on_update(move |_| PathToolMessage::UpdateOptions(PathOptionsUpdate::OverlayModeType(PathOverlayMode::FrontierHandles)).into()), + .on_update(move |_| { + PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::OverlayModeType(PathOverlayMode::FrontierHandles), + } + .into() + }), ]) .selected_index(Some(self.options.path_overlay_mode as u32)) .widget_holder(); - // Works only if a single layer is selected and its type is vectordata + // Works only if a single layer is selected and its type is Vector let path_node_button = TextButton::new("Make Path Editable") .icon(Some("NodeShape".into())) .tooltip("Make Path Editable") .on_update(|_| NodeGraphMessage::AddPathNode.into()) - .disabled(!self.tool_data.single_path_node_compatible_layer_selected) + .disabled(!self.tool_data.make_path_editable_is_allowed) .widget_holder(); let [_checkbox, _dropdown] = { @@ -323,7 +364,7 @@ impl<'a> MessageHandler> for Path let updating_point = message == ToolMessage::Path(PathToolMessage::SelectedPointUpdated); match message { - ToolMessage::Path(PathToolMessage::UpdateOptions(action)) => match action { + ToolMessage::Path(PathToolMessage::UpdateOptions { options }) => match options { PathOptionsUpdate::OverlayModeType(overlay_mode_type) => { self.options.path_overlay_mode = overlay_mode_type; responses.add(OverlaysMessage::Draw); @@ -360,12 +401,6 @@ impl<'a> MessageHandler> for Path self.send_layout(responses, LayoutTarget::ToolOptions); } }, - ToolMessage::Path(PathToolMessage::ClosePath) => { - responses.add(DocumentMessage::AddTransaction); - context.shape_editor.close_selected_path(context.document, responses); - responses.add(DocumentMessage::EndTransaction); - responses.add(OverlaysMessage::Draw); - } ToolMessage::Path(PathToolMessage::SwapSelectedHandles) => { if context.shape_editor.handle_with_pair_selected(&context.document.network_interface) { context.shape_editor.alternate_selected_handles(&context.document.network_interface); @@ -393,12 +428,20 @@ impl<'a> MessageHandler> for Path Delete, NudgeSelectedPoints, Enter, - SelectAllAnchors, - DeselectAllPoints, + SelectAll, + DeselectAllSelected, BreakPath, DeleteAndBreakPath, ClosePath, PointerMove, + StartSlidingPoint, + Copy, + Cut, + DeleteSelected, + Paste, + Duplicate, + TogglePointEditing, + ToggleSegmentEditing ), PathToolFsmState::Dragging(_) => actions!(PathToolMessageDiscriminant; Escape, @@ -410,6 +453,14 @@ impl<'a> MessageHandler> for Path BreakPath, DeleteAndBreakPath, SwapSelectedHandles, + StartSlidingPoint, + Copy, + Cut, + DeleteSelected, + Paste, + Duplicate, + TogglePointEditing, + ToggleSegmentEditing ), PathToolFsmState::Drawing { .. } => actions!(PathToolMessageDiscriminant; DoubleClick, @@ -421,6 +472,9 @@ impl<'a> MessageHandler> for Path DeleteAndBreakPath, Escape, RightClick, + StartSlidingPoint, + TogglePointEditing, + ToggleSegmentEditing ), PathToolFsmState::SlidingPoint => actions!(PathToolMessageDiscriminant; PointerMove, @@ -437,7 +491,7 @@ impl ToolTransition for PathTool { EventToMessageMap { tool_abort: Some(PathToolMessage::Abort.into()), selection_changed: Some(PathToolMessage::SelectionChanged.into()), - overlay_provider: Some(|overlay_context| PathToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| PathToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -459,7 +513,7 @@ pub enum PointSelectState { #[derive(Clone, Copy)] pub struct SlidingSegmentData { segment_id: SegmentId, - bezier: Bezier, + bezier: PathSeg, start: PointId, } @@ -500,12 +554,14 @@ struct PathToolData { snap_cache: SnapCache, double_click_handled: bool, delete_segment_pressed: bool, + segment_editing_modifier: bool, + multiple_toggle_pressed: bool, auto_panning: AutoPanning, - saved_points_before_anchor_select_toggle: Vec, + saved_points_before_anchor_select_toggle: HashMap>, select_anchor_toggled: bool, - saved_points_before_handle_drag: Vec, + saved_selection_before_handle_drag: HashMap, HashSet)>, handle_drag_toggle: bool, - saved_points_before_anchor_convert_smooth_sharp: HashSet, + saved_points_before_anchor_convert_smooth_sharp: HashMap>, last_click_time: u64, dragging_state: DraggingState, angle: f64, @@ -522,7 +578,7 @@ struct PathToolData { molding_info: Option<(DVec2, DVec2)>, molding_segment: bool, temporary_adjacent_handles_while_molding: Option<[Option; 2]>, - frontier_handles_info: Option>>, + frontier_handles_info: Option>>>, adjacent_anchor_offset: Option, sliding_point_info: Option, started_drawing_from_inside: bool, @@ -532,12 +588,12 @@ struct PathToolData { drill_through_cycle_index: usize, drill_through_cycle_count: usize, hovered_layers: Vec, - ghost_outline: Vec<(Vec, DAffine2)>, - single_path_node_compatible_layer_selected: bool, + ghost_outline: Vec<(Vec, LayerNodeIdentifier)>, + make_path_editable_is_allowed: bool, } impl PathToolData { - fn save_points_before_anchor_toggle(&mut self, points: Vec) -> PathToolFsmState { + fn save_points_before_anchor_toggle(&mut self, points: HashMap>) -> PathToolFsmState { self.saved_points_before_anchor_select_toggle = points; PathToolFsmState::Dragging(self.dragging_state) } @@ -582,8 +638,13 @@ impl PathToolData { self.can_toggle_colinearity = match &selection_status { SelectionStatus::None => false, SelectionStatus::One(single_selected_point) => { - let vector_data = document.network_interface.compute_modified_vector(single_selected_point.layer).unwrap(); - single_selected_point.id.get_handle_pair(&vector_data).is_some() + let vector = document.network_interface.compute_modified_vector(single_selected_point.layer).unwrap(); + if single_selected_point.id.get_handle_pair(&vector).is_some() { + let anchor = single_selected_point.id.get_anchor(&vector).expect("Cannot find connected anchor"); + vector.all_connected(anchor).count() <= 2 + } else { + false + } } SelectionStatus::Multiple(_) => true, }; @@ -600,7 +661,7 @@ impl PathToolData { } fn next_drill_through_cycle(&mut self, position: DVec2) -> usize { - if self.last_drill_through_click_position.map_or(true, |last_pos| last_pos.distance(position) > DRILL_THROUGH_THRESHOLD) { + if self.last_drill_through_click_position.is_none_or(|last_pos| last_pos.distance(position) > DRILL_THROUGH_THRESHOLD) { // New position, reset cycle self.drill_through_cycle_index = 0; } else { @@ -620,7 +681,7 @@ impl PathToolData { } fn has_drill_through_mouse_moved(&self, position: DVec2) -> bool { - self.last_drill_through_click_position.map_or(true, |last_pos| last_pos.distance(position) > DRILL_THROUGH_THRESHOLD) + self.last_drill_through_click_position.is_none_or(|last_pos| last_pos.distance(position) > DRILL_THROUGH_THRESHOLD) } fn set_ghost_outline(&mut self, shape_editor: &ShapeState, document: &DocumentMessageHandler) { @@ -628,8 +689,8 @@ impl PathToolData { for &layer in shape_editor.selected_shape_state.keys() { // We probably need to collect here let outline: Vec = document.metadata().layer_with_free_points_outline(layer).cloned().collect(); - let transform = document.metadata().transform_to_viewport(layer); - self.ghost_outline.push((outline, transform)); + + self.ghost_outline.push((outline, layer)); } } @@ -645,7 +706,7 @@ impl PathToolData { lasso_select: bool, handle_drag_from_anchor: bool, drag_zero_handle: bool, - molding_in_segment_edit: bool, + segment_editing_modifier: bool, path_overlay_mode: PathOverlayMode, segment_editing_mode: bool, point_editing_mode: bool, @@ -662,7 +723,13 @@ impl PathToolData { self.last_click_time = input.time; - let old_selection = shape_editor.selected_points().cloned().collect::>(); + let mut old_selection = HashMap::new(); + + for (layer, state) in &shape_editor.selected_shape_state { + let selected_points = state.selected_points().collect::>(); + let selected_segments = state.selected_segments().collect::>(); + old_selection.insert(*layer, (selected_points, selected_segments)); + } // Check if the point is already selected; if not, select the first point within the threshold (in pixels) // Don't select the points which are not shown currently in PathOverlayMode @@ -671,7 +738,7 @@ impl PathToolData { input.mouse.position, SELECTION_THRESHOLD, path_overlay_mode, - self.frontier_handles_info.clone(), + self.frontier_handles_info.as_ref(), point_editing_mode, ) { responses.add(DocumentMessage::StartTransaction); @@ -689,7 +756,7 @@ impl PathToolData { SELECTION_THRESHOLD, extend_selection, path_overlay_mode, - self.frontier_handles_info.clone(), + self.frontier_handles_info.as_ref(), ) { selection_info = updated_selection_info; } @@ -707,19 +774,19 @@ impl PathToolData { } } if dragging_only_handles && !self.handle_drag_toggle && !old_selection.is_empty() { - self.saved_points_before_handle_drag = old_selection; + self.saved_selection_before_handle_drag = old_selection; } if handle_drag_from_anchor { if let Some((layer, point)) = shape_editor.find_nearest_point_indices(&document.network_interface, input.mouse.position, SELECTION_THRESHOLD) { // Check that selected point is an anchor - if let (Some(point_id), Some(vector_data)) = (point.as_anchor(), document.network_interface.compute_modified_vector(layer)) { - let handles = vector_data.all_connected(point_id).collect::>(); + if let (Some(point_id), Some(vector)) = (point.as_anchor(), document.network_interface.compute_modified_vector(layer)) { + let handles = vector.all_connected(point_id).collect::>(); self.alt_clicked_on_anchor = true; for handle in &handles { let modification_type = handle.set_relative_position(DVec2::ZERO); responses.add(GraphOperationMessage::Vector { layer, modification_type }); - for &handles in &vector_data.colinear_manipulators { + for &handles in &vector.colinear_manipulators { if handles.contains(handle) { let modification_type = VectorModificationType::SetG1Continuous { handles, enabled: false }; responses.add(GraphOperationMessage::Vector { layer, modification_type }); @@ -729,26 +796,26 @@ impl PathToolData { let manipulator_point_id = handles[0].to_manipulator_point(); shape_editor.deselect_all_points(); - shape_editor.select_points_by_manipulator_id(&vec![manipulator_point_id]); + shape_editor.select_point_by_layer_and_id(manipulator_point_id, layer); responses.add(PathToolMessage::SelectedPointUpdated); } } } - if let Some((Some(point), Some(vector_data))) = shape_editor + if let Some((Some(point), Some(vector), layer)) = shape_editor .find_nearest_point_indices(&document.network_interface, input.mouse.position, SELECTION_THRESHOLD) - .map(|(layer, point)| (point.as_anchor(), document.network_interface.compute_modified_vector(layer))) + .map(|(layer, point)| (point.as_anchor(), document.network_interface.compute_modified_vector(layer), layer)) { - let handles = vector_data + let handles = vector .all_connected(point) - .filter(|handle| handle.length(&vector_data) < 1e-6) + .filter(|handle| handle.length(&vector) < 1e-6) .map(|handle| handle.to_manipulator_point()) .collect::>(); - let endpoint = vector_data.extendable_points(false).any(|anchor| point == anchor); + let endpoint = vector.extendable_points(false).any(|anchor| point == anchor); if drag_zero_handle && (handles.len() == 1 && !endpoint) { shape_editor.deselect_all_points(); - shape_editor.select_points_by_manipulator_id(&handles); + shape_editor.select_points_by_layer_and_id(&HashMap::from([(layer, handles)])); shape_editor.convert_selected_manipulators_to_colinear_handles(responses, document); } } @@ -764,7 +831,7 @@ impl PathToolData { self.set_ghost_outline(shape_editor, document); - if segment_editing_mode && !molding_in_segment_edit { + if segment_editing_mode && !segment_editing_modifier { let layer = segment.layer(); let segment_id = segment.segment(); let already_selected = shape_editor.selected_shape_state.get(&layer).is_some_and(|state| state.is_segment_selected(segment_id)); @@ -781,6 +848,8 @@ impl PathToolData { if let Some(selected_shape_state) = shape_editor.selected_shape_state.get_mut(&layer) { selected_shape_state.select_segment(segment_id); } + + // TODO: If the segment connected to one of the endpoints is also selected then select that point } self.drag_start_pos = input.mouse.position; @@ -790,13 +859,12 @@ impl PathToolData { responses.add(OverlaysMessage::Draw); PathToolFsmState::Dragging(self.dragging_state) } else { - let start_pos = segment.bezier().start; - let end_pos = segment.bezier().end; + let points = pathseg_points(segment.pathseg()); - let [pos1, pos2] = match segment.bezier().handles { - BezierHandles::Cubic { handle_start, handle_end } => [handle_start, handle_end], - BezierHandles::Quadratic { handle } => [handle, end_pos], - BezierHandles::Linear => [start_pos + (end_pos - start_pos) / 3., end_pos + (start_pos - end_pos) / 3.], + let [pos1, pos2] = match (points.p1, points.p2) { + (Some(p1), Some(p2)) => [p1, p2], + (Some(p1), None) | (None, Some(p1)) => [p1, points.p3], + (None, None) => [points.p0 + (points.p3 - points.p0) / 3., points.p3 + (points.p0 - points.p3) / 3.], }; self.molding_info = Some((pos1, pos2)); PathToolFsmState::Dragging(self.dragging_state) @@ -833,27 +901,25 @@ impl PathToolData { let mut manipulators = HashMap::with_hasher(NoHashBuilder); let mut unselected = Vec::new(); for (&layer, state) in &shape_editor.selected_shape_state { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - continue; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; let transform = document.metadata().transform_to_document_if_feeds(layer, &document.network_interface); let mut layer_manipulators = HashSet::with_hasher(NoHashBuilder); for point in state.selected_points() { - let Some(anchor) = point.get_anchor(&vector_data) else { continue }; + let Some(anchor) = point.get_anchor(&vector) else { continue }; layer_manipulators.insert(anchor); - let Some([handle1, handle2]) = point.get_handle_pair(&vector_data) else { continue }; + let Some([handle1, handle2]) = point.get_handle_pair(&vector) else { continue }; let Some(handle) = point.as_handle() else { continue }; // Check which handle is selected and which is opposite let opposite = if handle == handle1 { handle2 } else { handle1 }; self.opposite_handle_position = if self.opposite_handle_position.is_none() { - opposite.to_manipulator_point().get_position(&vector_data) + opposite.to_manipulator_point().get_position(&vector) } else { self.opposite_handle_position }; } - for (&id, &position) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { + for (&id, &position) in vector.point_domain.ids().iter().zip(vector.point_domain.positions()) { if layer_manipulators.contains(&id) { continue; } @@ -906,17 +972,17 @@ impl PathToolData { return false; }; - let Some(vector_data) = document.network_interface.compute_modified_vector(*layer) else { + let Some(vector) = document.network_interface.compute_modified_vector(*layer) else { self.opposing_handle_lengths = Some(shape_editor.opposing_handle_lengths(document)); return false; }; // Check if handle has a pair (to ignore handles of edges of open paths) - if let Some(handle_pair) = selected_handle_id.get_handle_pair(&vector_data) { + if let Some(handle_pair) = selected_handle_id.get_handle_pair(&vector) { let opposite_handle_length = handle_pair.iter().filter(|&&h| h.to_manipulator_point() != selected_handle_id).find_map(|&h| { - let opp_handle_pos = h.to_manipulator_point().get_position(&vector_data)?; - let opp_anchor_id = h.to_manipulator_point().get_anchor(&vector_data)?; - let opp_anchor_pos = vector_data.point_domain.position_from_id(opp_anchor_id)?; + let opp_handle_pos = h.to_manipulator_point().get_position(&vector)?; + let opp_anchor_id = h.to_manipulator_point().get_anchor(&vector)?; + let opp_anchor_pos = vector.point_domain.position_from_id(opp_anchor_id)?; Some((opp_handle_pos - opp_anchor_pos).length()) }); @@ -947,11 +1013,11 @@ impl PathToolData { let handle_id = selected_handle.to_manipulator_point(); let layer_to_document = document.metadata().transform_to_document_if_feeds(*layer, &document.network_interface); - let vector_data = document.network_interface.compute_modified_vector(*layer)?; + let vector = document.network_interface.compute_modified_vector(*layer)?; - let handle_position_local = selected_handle.to_manipulator_point().get_position(&vector_data)?; - let anchor_id = selected_handle.to_manipulator_point().get_anchor(&vector_data)?; - let anchor_position_local = vector_data.point_domain.position_from_id(anchor_id)?; + let handle_position_local = selected_handle.to_manipulator_point().get_position(&vector)?; + let anchor_id = selected_handle.to_manipulator_point().get_anchor(&vector)?; + let anchor_position_local = vector.point_domain.position_from_id(anchor_id)?; let handle_position_document = layer_to_document.transform_point2(handle_position_local); let anchor_position_document = layer_to_document.transform_point2(anchor_position_local); @@ -974,24 +1040,24 @@ impl PathToolData { ) -> f64 { let current_angle = -handle_vector.angle_to(DVec2::X); - if let Some((vector_data, layer)) = shape_editor + if let Some((vector, layer)) = shape_editor .selected_shape_state .iter() .next() - .and_then(|(layer, _)| document.network_interface.compute_modified_vector(*layer).map(|vector_data| (vector_data, layer))) + .and_then(|(layer, _)| document.network_interface.compute_modified_vector(*layer).map(|vector| (vector, layer))) { - let adjacent_anchor = check_handle_over_adjacent_anchor(handle_id, &vector_data); + let adjacent_anchor = check_handle_over_adjacent_anchor(handle_id, &vector); let mut required_angle = None; // If the handle is dragged over one of its adjacent anchors while holding down the Ctrl key, compute the angle based on the tangent formed with the neighboring anchor points. if adjacent_anchor.is_some() && lock_angle && !self.angle_locked { - let anchor = handle_id.get_anchor(&vector_data); - let (angle, anchor_position) = calculate_adjacent_anchor_tangent(handle_id, anchor, adjacent_anchor, &vector_data); + let anchor = handle_id.get_anchor(&vector); + let (angle, anchor_position) = calculate_adjacent_anchor_tangent(handle_id, anchor, adjacent_anchor, &vector); let layer_to_document = document.metadata().transform_to_document_if_feeds(*layer, &document.network_interface); self.adjacent_anchor_offset = handle_id - .get_anchor_position(&vector_data) + .get_anchor_position(&vector) .and_then(|handle_anchor| anchor_position.map(|adjacent_anchor| layer_to_document.transform_point2(adjacent_anchor) - layer_to_document.transform_point2(handle_anchor))); required_angle = angle; @@ -999,7 +1065,7 @@ impl PathToolData { // If the handle is dragged near its adjacent anchors while holding down the Ctrl key, compute the angle using the tangent direction of neighboring segments. if relative_vector.length() < 25. && lock_angle && !self.angle_locked { - required_angle = calculate_lock_angle(self, shape_editor, responses, document, &vector_data, handle_id, tangent_to_neighboring_tangents); + required_angle = calculate_lock_angle(self, shape_editor, responses, document, &vector, handle_id, tangent_to_neighboring_tangents); } // Finalize and apply angle locking if a valid target angle was determined. @@ -1108,28 +1174,30 @@ impl PathToolData { self.snapping_axis = None; } - fn get_normalized_tangent(&mut self, point: PointId, segment: SegmentId, vector_data: &VectorData) -> Option { - let other_point = vector_data.other_point(segment, point)?; - let position = ManipulatorPointId::Anchor(point).get_position(vector_data)?; + fn get_normalized_tangent(&mut self, point: PointId, segment: SegmentId, vector: &Vector) -> Option { + let other_point = vector.other_point(segment, point)?; + let position = ManipulatorPointId::Anchor(point).get_position(vector)?; - let mut handles = vector_data.all_connected(other_point); + let mut handles = vector.all_connected(other_point); let other_handle = handles.find(|handle| handle.segment == segment)?; - let target_position = if other_handle.length(vector_data) == 0. { - ManipulatorPointId::Anchor(other_point).get_position(vector_data)? + let target_position = if other_handle.length(vector) == 0. { + ManipulatorPointId::Anchor(other_point).get_position(vector)? } else { - other_handle.to_manipulator_point().get_position(vector_data)? + other_handle.to_manipulator_point().get_position(vector)? }; let tangent_vector = target_position - position; tangent_vector.try_normalize() } - fn update_closest_segment(&mut self, shape_editor: &mut ShapeState, position: DVec2, document: &DocumentMessageHandler, path_overlay_mode: PathOverlayMode) { + fn update_closest_segment(&mut self, shape_editor: &mut ShapeState, position: DVec2, document: &DocumentMessageHandler, path_overlay_mode: PathOverlayMode, point_editing_mode: bool) { // Check if there is no point nearby + // If the point mode is deactivated then don't override closest segment even if there is a closer point if shape_editor - .find_nearest_visible_point_indices(&document.network_interface, position, SELECTION_THRESHOLD, path_overlay_mode, self.frontier_handles_info.clone()) + .find_nearest_visible_point_indices(&document.network_interface, position, SELECTION_THRESHOLD, path_overlay_mode, self.frontier_handles_info.as_ref()) .is_some() + && point_editing_mode { self.segment = None; } @@ -1137,9 +1205,19 @@ impl PathToolData { else if let Some(closest_segment) = &mut self.segment { closest_segment.update_closest_point(document.metadata(), &document.network_interface, position); + let layer = closest_segment.layer(); + let segment_id = closest_segment.segment(); + if closest_segment.too_far(position, SEGMENT_INSERTION_DISTANCE) { self.segment = None; } + + // Check if that segment exists or it has been removed + if let Some(vector_data) = document.network_interface.compute_modified_vector(layer) + && !(vector_data.segment_domain.ids().iter().any(|segment| *segment == segment_id)) + { + self.segment = None; + } } // If not, check that if there is some closest segment or not else if let Some(closest_segment) = shape_editor.upper_closest_segment(&document.network_interface, position, SEGMENT_INSERTION_DISTANCE) { @@ -1155,19 +1233,12 @@ impl PathToolData { let Some(layer) = document.network_interface.selected_nodes().selected_layers(document.metadata()).next() else { return false; }; - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - return false; - }; - - // Check that the handles of anchor point are also colinear - if !vector_data.colinear(*anchor) { - return false; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return false }; let Some(point_id) = anchor.as_anchor() else { return false }; let mut connected_segments = [None, None]; - for (segment, bezier, start, end) in vector_data.segment_bezier_iter() { + for (segment, bezier, start, end) in vector.segment_iter() { if start == point_id || end == point_id { match (connected_segments[0], connected_segments[1]) { (None, None) => connected_segments[0] = Some(SlidingSegmentData { segment_id: segment, bezier, start }), @@ -1201,77 +1272,86 @@ impl PathToolData { let anchor = sliding_point_info.anchor; let layer = sliding_point_info.layer; - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { return }; + let Some(vector) = network_interface.compute_modified_vector(layer) else { return }; let transform = network_interface.document_metadata().transform_to_viewport_if_feeds(layer, network_interface); let layer_pos = transform.inverse().transform_point2(target_position); let segments = sliding_point_info.connected_segments; - let t1 = segments[0].bezier.project(layer_pos); - let position1 = segments[0].bezier.evaluate(TValue::Parametric(t1)); + let t1 = segments[0].bezier.nearest(dvec2_to_point(layer_pos), DEFAULT_ACCURACY).t; + let position1 = point_to_dvec2(segments[0].bezier.eval(t1)); - let t2 = segments[1].bezier.project(layer_pos); - let position2 = segments[1].bezier.evaluate(TValue::Parametric(t2)); + let t2 = segments[1].bezier.nearest(dvec2_to_point(layer_pos), DEFAULT_ACCURACY).t; + let position2 = point_to_dvec2(segments[1].bezier.eval(t2)); - let (closer_segment, farther_segment, t_value, new_position) = if position2.distance(layer_pos) < position1.distance(layer_pos) { + let (closer_segment, further_segment, t_value, new_position) = if position2.distance(layer_pos) < position1.distance(layer_pos) { (segments[1], segments[0], t2, position2) } else { (segments[0], segments[1], t1, position1) }; // Move the anchor to the new position - let Some(current_position) = ManipulatorPointId::Anchor(anchor).get_position(&vector_data) else { + let Some(current_position) = ManipulatorPointId::Anchor(anchor).get_position(&vector) else { return; }; let delta = new_position - current_position; - shape_editor.move_anchor(anchor, &vector_data, delta, layer, None, responses); + shape_editor.move_anchor(anchor, &vector, delta, layer, None, responses); // Make a split at the t_value - let [first, second] = closer_segment.bezier.split(TValue::Parametric(t_value)); - let closer_segment_other_point = if anchor == closer_segment.start { closer_segment.bezier.end } else { closer_segment.bezier.start }; + let first = closer_segment.bezier.subsegment(0_f64..t_value); + let second = closer_segment.bezier.subsegment(t_value..1.); - let (split_segment, other_segment) = if first.start == closer_segment_other_point { (first, second) } else { (second, first) }; + let closer_segment_other_point = if anchor == closer_segment.start { + closer_segment.bezier.end() + } else { + closer_segment.bezier.start() + }; + + let (split_segment, other_segment) = if first.start() == closer_segment_other_point { (first, second) } else { (second, first) }; + let split_segment_points = pathseg_points(split_segment); // Primary handle maps to primary handle and secondary maps to secondary let closer_primary_handle = HandleId::primary(closer_segment.segment_id); - let Some(handle_position) = split_segment.handle_start() else { return }; - let relative_position1 = handle_position - split_segment.start; + let Some(handle_position) = split_segment_points.p1 else { return }; + let relative_position1 = handle_position - split_segment_points.p0; let modification_type = closer_primary_handle.set_relative_position(relative_position1); responses.add(GraphOperationMessage::Vector { layer, modification_type }); let closer_secondary_handle = HandleId::end(closer_segment.segment_id); - let Some(handle_position) = split_segment.handle_end() else { return }; - let relative_position2 = handle_position - split_segment.end; + let Some(handle_position) = split_segment_points.p2 else { return }; + let relative_position2 = handle_position - split_segment_points.p3; let modification_type = closer_secondary_handle.set_relative_position(relative_position2); responses.add(GraphOperationMessage::Vector { layer, modification_type }); let end_handle_direction = if anchor == closer_segment.start { -relative_position1 } else { -relative_position2 }; - let (farther_other_point, start_handle, end_handle, start_handle_pos) = if anchor == farther_segment.start { + let further_segment_points = pathseg_points(further_segment.bezier); + + let (further_other_point, start_handle, end_handle, start_handle_pos) = if anchor == further_segment.start { ( - farther_segment.bezier.end, - HandleId::end(farther_segment.segment_id), - HandleId::primary(farther_segment.segment_id), - farther_segment.bezier.handle_end(), + further_segment_points.p3, + HandleId::end(further_segment.segment_id), + HandleId::primary(further_segment.segment_id), + further_segment_points.p2, ) } else { ( - farther_segment.bezier.start, - HandleId::primary(farther_segment.segment_id), - HandleId::end(farther_segment.segment_id), - farther_segment.bezier.handle_start(), + further_segment_points.p0, + HandleId::primary(further_segment.segment_id), + HandleId::end(further_segment.segment_id), + further_segment_points.p1, ) }; let Some(start_handle_position) = start_handle_pos else { return }; - let start_handle_direction = start_handle_position - farther_other_point; + let start_handle_direction = start_handle_position - further_other_point; // Get normalized direction vectors, if cubic handle is zero then we consider corresponding tangent let d1 = start_handle_direction.try_normalize().unwrap_or({ - if anchor == farther_segment.start { - -farther_segment.bezier.tangent(TValue::Parametric(0.99)) + if anchor == further_segment.start { + -pathseg_tangent(further_segment.bezier, 1.) } else { - farther_segment.bezier.tangent(TValue::Parametric(0.01)) + pathseg_tangent(further_segment.bezier, 0.) } }); @@ -1280,7 +1360,7 @@ impl PathToolData { let min_len1 = start_handle_direction.length() * 0.4; let min_len2 = end_handle_direction.length() * 0.4; - let (relative_pos1, relative_pos2) = find_two_param_best_approximate(farther_other_point, new_position, d1, d2, min_len1, min_len2, farther_segment.bezier, other_segment); + let (relative_pos1, relative_pos2) = find_two_param_best_approximate(further_other_point, new_position, d1, d2, min_len1, min_len2, further_segment.bezier, other_segment); // Now set those handles to these handle lengths keeping the directions d1, d2 let modification_type = start_handle.set_relative_position(relative_pos1); @@ -1367,19 +1447,19 @@ impl PathToolData { let Some(layer) = document.network_interface.selected_nodes().selected_layers(document.metadata()).next() else { return; }; - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { return }; - let Some(point_id) = shape_editor.selected_points().next().unwrap().get_anchor(&vector_data) else { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; + let Some(point_id) = shape_editor.selected_points().next().unwrap().get_anchor(&vector) else { return; }; - if vector_data.connected_count(point_id) == 2 { - let connected_segments: Vec = vector_data.all_connected(point_id).collect(); + if vector.connected_count(point_id) == 2 { + let connected_segments: Vec = vector.all_connected(point_id).collect(); let segment1 = connected_segments[0]; - let Some(tangent1) = self.get_normalized_tangent(point_id, segment1.segment, &vector_data) else { + let Some(tangent1) = self.get_normalized_tangent(point_id, segment1.segment, &vector) else { return; }; let segment2 = connected_segments[1]; - let Some(tangent2) = self.get_normalized_tangent(point_id, segment2.segment, &vector_data) else { + let Some(tangent2) = self.get_normalized_tangent(point_id, segment2.segment, &vector) else { return; }; @@ -1392,7 +1472,8 @@ impl PathToolData { // Now change the selection to this handle shape_editor.deselect_all_points(); - shape_editor.select_points_by_manipulator_id(&vec![handle]); + shape_editor.select_point_by_layer_and_id(handle, layer); + responses.add(PathToolMessage::SelectionChanged); } } @@ -1459,7 +1540,7 @@ impl Fsm for PathToolFsmState { ) -> Self { let ToolActionMessageContext { document, input, shape_editor, .. } = tool_action_data; - update_dynamic_hints(self, responses, shape_editor, document, tool_data, tool_options); + update_dynamic_hints(self, responses, shape_editor, document, tool_data, tool_options, input.mouse.position); let ToolMessage::Path(event) = event else { return self }; @@ -1488,10 +1569,115 @@ impl Fsm for PathToolFsmState { self } - (_, PathToolMessage::Overlays(mut overlay_context)) => { - if matches!(self, Self::Dragging(_)) { - for (outline, transform) in &tool_data.ghost_outline { - overlay_context.outline(outline.iter(), *transform, Some(COLOR_OVERLAY_GRAY)); + (_, PathToolMessage::TogglePointEditing) => { + // Clicked on the point edit mode button + let point_edit = tool_options.path_editing_mode.point_editing_mode; + let segment_edit = tool_options.path_editing_mode.segment_editing_mode; + let multiple_toggle = tool_data.multiple_toggle_pressed; + + if point_edit && !segment_edit { + return self; + } + + match (multiple_toggle, point_edit) { + (true, true) => { + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::PointEditingMode { enabled: false }, + }); + } + (true, false) => { + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::PointEditingMode { enabled: true }, + }); + } + (_, _) => { + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::PointEditingMode { enabled: true }, + }); + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::SegmentEditingMode { enabled: false }, + }); + + // Select all of the end points of selected segments + let selected_layers = shape_editor.selected_layers().cloned().collect::>(); + + for layer in selected_layers { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + + let selected_state = shape_editor.selected_shape_state.entry(layer).or_default(); + + for (segment, _, start, end) in vector.segment_bezier_iter() { + if selected_state.is_segment_selected(segment) { + selected_state.select_point(ManipulatorPointId::Anchor(start)); + selected_state.select_point(ManipulatorPointId::Anchor(end)); + } + } + } + + // Deselect all of the segments + shape_editor.deselect_all_segments(); + } + } + + self + } + (_, PathToolMessage::ToggleSegmentEditing) => { + // Clicked on the point edit mode button + let segment_edit = tool_options.path_editing_mode.segment_editing_mode; + let point_edit = tool_options.path_editing_mode.point_editing_mode; + + let multiple_toggle = tool_data.multiple_toggle_pressed; + + if segment_edit && !point_edit { + return self; + } + + match (multiple_toggle, segment_edit) { + (true, true) => { + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::SegmentEditingMode { enabled: false }, + }); + } + (true, false) => { + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::SegmentEditingMode { enabled: true }, + }); + } + (_, _) => { + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::PointEditingMode { enabled: false }, + }); + responses.add(PathToolMessage::UpdateOptions { + options: PathOptionsUpdate::SegmentEditingMode { enabled: true }, + }); + + // Select all the segments which have both of the ends selected + let selected_layers = shape_editor.selected_layers().cloned().collect::>(); + + for layer in selected_layers { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + + let selected_state = shape_editor.selected_shape_state.entry(layer).or_default(); + + for (segment, _, start, end) in vector.segment_bezier_iter() { + let first_selected = selected_state.is_point_selected(ManipulatorPointId::Anchor(start)); + let second_selected = selected_state.is_point_selected(ManipulatorPointId::Anchor(end)); + if first_selected && second_selected { + selected_state.select_segment(segment); + } + } + } + } + } + + self + } + (_, PathToolMessage::Overlays { context: mut overlay_context }) => { + // Set this to show ghost line only if drag actually happened + if matches!(self, Self::Dragging(_)) && tool_data.drag_start_pos.distance(input.mouse.position) > DRAG_THRESHOLD { + for (outline, layer) in &tool_data.ghost_outline { + let transform = document.metadata().transform_to_viewport(*layer); + overlay_context.outline(outline.iter(), transform, Some(COLOR_OVERLAY_GRAY)); } } @@ -1510,25 +1696,31 @@ impl Fsm for PathToolFsmState { } PathOverlayMode::FrontierHandles => { let selected_segments = selected_segments(&document.network_interface, shape_editor); - let selected_points = shape_editor.selected_points(); - let selected_anchors = selected_points - .filter_map(|point_id| if let ManipulatorPointId::Anchor(p) = point_id { Some(*p) } else { None }) - .collect::>(); // Match the behavior of `PathOverlayMode::SelectedPointHandles` when only one point is selected if shape_editor.selected_points().count() == 1 { path_overlays(document, DrawHandles::SelectedAnchors(selected_segments), shape_editor, &mut overlay_context); } else { - let mut segment_endpoints: HashMap> = HashMap::new(); + let mut segment_endpoints_by_layer = HashMap::new(); for layer in document.network_interface.selected_nodes().selected_layers(document.metadata()) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let mut segment_endpoints: HashMap> = HashMap::new(); + + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(state) = shape_editor.selected_shape_state.get_mut(&layer) else { continue }; + + let selected_points = state.selected_points(); + let selected_anchors = selected_points + .filter_map(|point_id| if let ManipulatorPointId::Anchor(p) = point_id { Some(p) } else { None }) + .collect::>(); + + let Some(focused_segments) = selected_segments.get(&layer) else { continue }; // The points which are part of only one segment will be rendered let mut selected_segments_by_point: HashMap> = HashMap::new(); - for (segment_id, _bezier, start, end) in vector_data.segment_bezier_iter() { - if selected_segments.contains(&segment_id) { + for (segment_id, _bezier, start, end) in vector.segment_bezier_iter() { + if focused_segments.contains(&segment_id) { selected_segments_by_point.entry(start).or_default().push(segment_id); selected_segments_by_point.entry(end).or_default().push(segment_id); } @@ -1544,32 +1736,71 @@ impl Fsm for PathToolFsmState { segment_endpoints.entry(attached_segments[1]).or_default().push(point); } } + + segment_endpoints_by_layer.insert(layer, segment_endpoints); } // Caching segment endpoints for use in point selection logic - tool_data.frontier_handles_info = Some(segment_endpoints.clone()); + tool_data.frontier_handles_info = Some(segment_endpoints_by_layer.clone()); // Now frontier anchors can be sent for rendering overlays - path_overlays(document, DrawHandles::FrontierHandles(segment_endpoints), shape_editor, &mut overlay_context); + path_overlays(document, DrawHandles::FrontierHandles(segment_endpoints_by_layer), shape_editor, &mut overlay_context); } } } match self { Self::Ready => { - tool_data.update_closest_segment(shape_editor, input.mouse.position, document, tool_options.path_overlay_mode); + tool_data.update_closest_segment( + shape_editor, + input.mouse.position, + document, + tool_options.path_overlay_mode, + tool_options.path_editing_mode.point_editing_mode, + ); + + // If there exists an underlying anchor, we show a hover overlay + (|| { + if !tool_options.path_editing_mode.point_editing_mode { + return; + } + + let nearest_visible_point_indices = shape_editor.find_nearest_visible_point_indices( + &document.network_interface, + input.mouse.position, + SELECTION_THRESHOLD, + tool_options.path_overlay_mode, + tool_data.frontier_handles_info.as_ref(), + ); + + let Some((layer, manipulator_point_id)) = nearest_visible_point_indices else { return }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; + let Some(position) = manipulator_point_id.get_position(&vector) else { + error!("No position for hovered point"); + return; + }; + + let transform = document.metadata().transform_to_viewport(layer); + let position = transform.transform_point2(position); + let selected = shape_editor.selected_shape_state.entry(layer).or_default().is_point_selected(manipulator_point_id); + + match manipulator_point_id { + ManipulatorPointId::Anchor(_) => overlay_context.hover_manipulator_anchor(position, selected), + _ => overlay_context.hover_manipulator_handle(position, selected), + } + })(); if let Some(closest_segment) = &tool_data.segment { - if tool_options.path_editing_mode.segment_editing_mode { + if tool_options.path_editing_mode.segment_editing_mode && !tool_data.segment_editing_modifier { let transform = document.metadata().transform_to_viewport_if_feeds(closest_segment.layer(), &document.network_interface); - overlay_context.outline_overlay_bezier(closest_segment.bezier(), transform); + overlay_context.outline_overlay_bezier(closest_segment.pathseg(), transform); // Draw the anchors again let display_anchors = overlay_context.visibility_settings.anchors(); if display_anchors { - let start_pos = transform.transform_point2(closest_segment.bezier().start); - let end_pos = transform.transform_point2(closest_segment.bezier().end); + let start_pos = transform.transform_point2(point_to_dvec2(closest_segment.pathseg().start())); + let end_pos = transform.transform_point2(point_to_dvec2(closest_segment.pathseg().end())); let start_id = closest_segment.points()[0]; let end_id = closest_segment.points()[1]; if let Some(shape_state) = shape_editor.selected_shape_state.get_mut(&closest_segment.layer()) { @@ -1578,6 +1809,7 @@ impl Fsm for PathToolFsmState { } } } else { + // We want this overlay also when in segment_editing_mode let perp = closest_segment.calculate_perp(document); let point = closest_segment.closest_point(document.metadata(), &document.network_interface); @@ -1639,14 +1871,70 @@ impl Fsm for PathToolFsmState { }; let quad = tool_data.selection_quad(document.metadata()); - let polygon = &tool_data.lasso_polygon; + + let select_segments = tool_options.path_editing_mode.segment_editing_mode; + let select_points = tool_options.path_editing_mode.point_editing_mode; + let (points_inside, segments_inside) = match selection_shape { + SelectionShapeType::Box => { + let previous_mouse = document.metadata().document_to_viewport.transform_point2(tool_data.previous_mouse_position); + let bbox = Rect::new(tool_data.drag_start_pos.x, tool_data.drag_start_pos.y, previous_mouse.x, previous_mouse.y).abs(); + shape_editor.get_inside_points_and_segments( + &document.network_interface, + SelectionShape::Box(bbox), + tool_options.path_overlay_mode, + tool_data.frontier_handles_info.as_ref(), + select_segments, + select_points, + selection_mode, + ) + } + SelectionShapeType::Lasso => shape_editor.get_inside_points_and_segments( + &document.network_interface, + SelectionShape::Lasso(&tool_data.lasso_polygon), + tool_options.path_overlay_mode, + tool_data.frontier_handles_info.as_ref(), + select_segments, + select_points, + selection_mode, + ), + }; + + for (layer, points) in points_inside { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + + for point in points { + let Some(position) = point.get_position(&vector) else { continue }; + + let transform = document.metadata().transform_to_viewport(layer); + let position = transform.transform_point2(position); + + let selected = shape_editor.selected_shape_state.entry(layer).or_default().is_point_selected(point); + + match point { + ManipulatorPointId::Anchor(_) => overlay_context.hover_manipulator_anchor(position, selected), + _ => overlay_context.hover_manipulator_handle(position, selected), + } + } + } + + for (layer, segments) in segments_inside { + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + + let transform = document.metadata().transform_to_viewport_if_feeds(layer, &document.network_interface); + + for (segment, bezier, _, _) in vector.segment_iter() { + if segments.contains(&segment) { + overlay_context.outline_overlay_bezier(bezier, transform); + } + } + } match (selection_shape, selection_mode, tool_data.started_drawing_from_inside) { // Don't draw box if it is from inside a shape and selection just began (SelectionShapeType::Box, SelectionMode::Enclosed, false) => overlay_context.dashed_quad(quad, None, fill_color, Some(4.), Some(4.), Some(0.5)), - (SelectionShapeType::Lasso, SelectionMode::Enclosed, _) => overlay_context.dashed_polygon(polygon, None, fill_color, Some(4.), Some(4.), Some(0.5)), + (SelectionShapeType::Lasso, SelectionMode::Enclosed, _) => overlay_context.dashed_polygon(&tool_data.lasso_polygon, None, fill_color, Some(4.), Some(4.), Some(0.5)), (SelectionShapeType::Box, _, false) => overlay_context.quad(quad, None, fill_color), - (SelectionShapeType::Lasso, _, _) => overlay_context.polygon(polygon, None, fill_color), + (SelectionShapeType::Lasso, _, _) => overlay_context.polygon(&tool_data.lasso_polygon, None, fill_color), (SelectionShapeType::Box, _, _) => {} } } @@ -1692,14 +1980,14 @@ impl Fsm for PathToolFsmState { lasso_select, handle_drag_from_anchor, drag_restore_handle, - molding_in_segment_edit, + segment_editing_modifier, }, ) => { let extend_selection = input.keyboard.get(extend_selection as usize); let lasso_select = input.keyboard.get(lasso_select as usize); let handle_drag_from_anchor = input.keyboard.get(handle_drag_from_anchor as usize); let drag_zero_handle = input.keyboard.get(drag_restore_handle as usize); - let molding_in_segment_edit = input.keyboard.get(molding_in_segment_edit as usize); + let segment_editing_modifier = input.keyboard.get(segment_editing_modifier as usize); tool_data.selection_mode = None; tool_data.lasso_polygon.clear(); @@ -1713,7 +2001,7 @@ impl Fsm for PathToolFsmState { lasso_select, handle_drag_from_anchor, drag_zero_handle, - molding_in_segment_edit, + segment_editing_modifier, tool_options.path_overlay_mode, tool_options.path_editing_mode.segment_editing_mode, tool_options.path_editing_mode.point_editing_mode, @@ -1729,6 +2017,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, }, ) => { tool_data.previous_mouse_position = document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position); @@ -1752,6 +2041,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, } .into(), PathToolMessage::PointerMove { @@ -1762,6 +2052,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, } .into(), ]; @@ -1779,12 +2070,13 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, }, ) => { let selected_only_handles = !shape_editor.selected_points().any(|point| matches!(point, ManipulatorPointId::Anchor(_))); tool_data.stored_selection = None; - if !tool_data.saved_points_before_handle_drag.is_empty() && (tool_data.drag_start_pos.distance(input.mouse.position) > DRAG_THRESHOLD) && (selected_only_handles) { + if !tool_data.saved_selection_before_handle_drag.is_empty() && (tool_data.drag_start_pos.distance(input.mouse.position) > DRAG_THRESHOLD) && (selected_only_handles) { tool_data.handle_drag_toggle = true; } @@ -1817,13 +2109,19 @@ impl Fsm for PathToolFsmState { if initial_press { responses.add(PathToolMessage::SelectedPointUpdated); tool_data.select_anchor_toggled = true; - tool_data.save_points_before_anchor_toggle(shape_editor.selected_points().cloned().collect()); - shape_editor.select_handles_and_anchor_connected_to_current_handle(&document.network_interface); + + let mut points_to_save = HashMap::new(); + for (layer, state) in &shape_editor.selected_shape_state { + points_to_save.insert(*layer, state.selected_points().collect::>()); + } + tool_data.save_points_before_anchor_toggle(points_to_save); + + shape_editor.select_anchor_and_connected_handles(&document.network_interface); } else if released_from_toggle { responses.add(PathToolMessage::SelectedPointUpdated); tool_data.select_anchor_toggled = false; shape_editor.deselect_all_points(); - shape_editor.select_points_by_manipulator_id(&tool_data.saved_points_before_anchor_select_toggle); + shape_editor.select_points_by_layer_and_id(&tool_data.saved_points_before_anchor_select_toggle); tool_data.remove_saved_points(); } @@ -1838,10 +2136,6 @@ impl Fsm for PathToolFsmState { } if !tool_data.update_colinear(equidistant_state, toggle_colinear_state, tool_action_data.shape_editor, tool_action_data.document, responses) { - if snap_angle_state && lock_angle_state && tool_data.start_sliding_point(tool_action_data.shape_editor, tool_action_data.document) { - return PathToolFsmState::SlidingPoint; - } - tool_data.drag( equidistant_state, lock_angle_state, @@ -1864,6 +2158,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, } .into(), PathToolMessage::PointerMove { @@ -1874,6 +2169,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, } .into(), ]; @@ -1885,8 +2181,18 @@ impl Fsm for PathToolFsmState { tool_data.slide_point(input.mouse.position, responses, &document.network_interface, shape_editor); PathToolFsmState::SlidingPoint } - (PathToolFsmState::Ready, PathToolMessage::PointerMove { delete_segment, .. }) => { + ( + PathToolFsmState::Ready, + PathToolMessage::PointerMove { + delete_segment, + segment_editing_modifier, + snap_angle, + .. + }, + ) => { tool_data.delete_segment_pressed = input.keyboard.get(delete_segment as usize); + tool_data.segment_editing_modifier = input.keyboard.get(segment_editing_modifier as usize); + tool_data.multiple_toggle_pressed = input.keyboard.get(snap_angle as usize); tool_data.saved_points_before_anchor_convert_smooth_sharp.clear(); tool_data.adjacent_anchor_offset = None; tool_data.stored_selection = None; @@ -1938,6 +2244,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, }, ) => { // Auto-panning @@ -1950,6 +2257,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, } .into(), PathToolMessage::PointerMove { @@ -1960,6 +2268,7 @@ impl Fsm for PathToolFsmState { lock_angle, delete_segment, break_colinear_molding, + segment_editing_modifier, } .into(), ]; @@ -1991,14 +2300,16 @@ impl Fsm for PathToolFsmState { match selection_shape { SelectionShapeType::Box => { - let bbox = [tool_data.drag_start_pos, previous_mouse]; + let bbox = Rect::new(tool_data.drag_start_pos.x, tool_data.drag_start_pos.y, previous_mouse.x, previous_mouse.y).abs(); + shape_editor.select_all_in_shape( &document.network_interface, SelectionShape::Box(bbox), selection_change, tool_options.path_overlay_mode, - tool_data.frontier_handles_info.clone(), + tool_data.frontier_handles_info.as_ref(), tool_options.path_editing_mode.segment_editing_mode, + tool_options.path_editing_mode.point_editing_mode, selection_mode, ); } @@ -2007,8 +2318,9 @@ impl Fsm for PathToolFsmState { SelectionShape::Lasso(&tool_data.lasso_polygon), selection_change, tool_options.path_overlay_mode, - tool_data.frontier_handles_info.clone(), + tool_data.frontier_handles_info.as_ref(), tool_options.path_editing_mode.segment_editing_mode, + tool_options.path_editing_mode.point_editing_mode, selection_mode, ), } @@ -2022,9 +2334,14 @@ impl Fsm for PathToolFsmState { if tool_data.handle_drag_toggle && tool_data.drag_start_pos.distance(input.mouse.position) > DRAG_THRESHOLD { shape_editor.deselect_all_points(); shape_editor.deselect_all_segments(); - shape_editor.select_points_by_manipulator_id(&tool_data.saved_points_before_handle_drag); - tool_data.saved_points_before_handle_drag.clear(); + for (layer, (selected_points, selected_segments)) in &tool_data.saved_selection_before_handle_drag { + let Some(state) = shape_editor.selected_shape_state.get_mut(layer) else { continue }; + selected_points.iter().for_each(|point| state.select_point(*point)); + selected_segments.iter().for_each(|segment| state.select_segment(*segment)); + } + + tool_data.saved_selection_before_handle_drag.clear(); tool_data.handle_drag_toggle = false; } tool_data.molding_info = None; @@ -2080,14 +2397,16 @@ impl Fsm for PathToolFsmState { } else { match selection_shape { SelectionShapeType::Box => { - let bbox = [tool_data.drag_start_pos, previous_mouse]; + let bbox = Rect::new(tool_data.drag_start_pos.x, tool_data.drag_start_pos.y, previous_mouse.x, previous_mouse.y).abs(); + shape_editor.select_all_in_shape( &document.network_interface, SelectionShape::Box(bbox), select_kind, tool_options.path_overlay_mode, - tool_data.frontier_handles_info.clone(), + tool_data.frontier_handles_info.as_ref(), tool_options.path_editing_mode.segment_editing_mode, + tool_options.path_editing_mode.point_editing_mode, selection_mode, ); } @@ -2096,8 +2415,9 @@ impl Fsm for PathToolFsmState { SelectionShape::Lasso(&tool_data.lasso_polygon), select_kind, tool_options.path_overlay_mode, - tool_data.frontier_handles_info.clone(), + tool_data.frontier_handles_info.as_ref(), tool_options.path_editing_mode.segment_editing_mode, + tool_options.path_editing_mode.point_editing_mode, selection_mode, ), } @@ -2111,26 +2431,38 @@ impl Fsm for PathToolFsmState { tool_data.ghost_outline.clear(); let extend_selection = input.keyboard.get(extend_selection as usize); let drag_occurred = tool_data.drag_start_pos.distance(input.mouse.position) > DRAG_THRESHOLD; + let mut segment_dissolved = false; + let mut point_inserted = false; let nearest_point = shape_editor.find_nearest_visible_point_indices( &document.network_interface, input.mouse.position, SELECTION_THRESHOLD, tool_options.path_overlay_mode, - tool_data.frontier_handles_info.clone(), + tool_data.frontier_handles_info.as_ref(), ); let nearest_segment = tool_data.segment.clone(); if let Some(segment) = &mut tool_data.segment { let segment_mode = tool_options.path_editing_mode.segment_editing_mode; - if !drag_occurred && !tool_data.molding_segment && !segment_mode { + let point_mode = tool_options.path_editing_mode.point_editing_mode; + // If segment mode and the insertion modifier is pressed or it is in point editing mode + + if !drag_occurred && !tool_data.molding_segment && ((point_mode && !segment_mode) || (segment_mode && tool_data.segment_editing_modifier)) { if tool_data.delete_segment_pressed { - if let Some(vector_data) = document.network_interface.compute_modified_vector(segment.layer()) { - shape_editor.dissolve_segment(responses, segment.layer(), &vector_data, segment.segment(), segment.points()); + if let Some(vector) = document.network_interface.compute_modified_vector(segment.layer()) { + shape_editor.dissolve_segment(responses, segment.layer(), &vector, segment.segment(), segment.points()); + segment_dissolved = true; } } else { - segment.adjusted_insert_and_select(shape_editor, responses, extend_selection); + let is_segment_selected = shape_editor + .selected_shape_state + .get(&segment.layer()) + .is_some_and(|state| state.is_segment_selected(segment.segment())); + + segment.adjusted_insert_and_select(shape_editor, responses, extend_selection, point_mode, is_segment_selected); + point_inserted = true; } } @@ -2138,11 +2470,17 @@ impl Fsm for PathToolFsmState { tool_data.molding_info = None; tool_data.molding_segment = false; tool_data.temporary_adjacent_handles_while_molding = None; + + if segment_dissolved || point_inserted { + responses.add(DocumentMessage::EndTransaction); + return PathToolFsmState::Ready; + } } let segment_mode = tool_options.path_editing_mode.segment_editing_mode; + let point_mode = tool_options.path_editing_mode.point_editing_mode; - if let Some((layer, nearest_point)) = nearest_point { + if let (Some((layer, nearest_point)), true) = (nearest_point, point_mode) { let clicked_selected = shape_editor.selected_points().any(|&point| nearest_point == point); if !drag_occurred && extend_selection { if clicked_selected && tool_data.last_clicked_point_was_selected { @@ -2154,7 +2492,11 @@ impl Fsm for PathToolFsmState { } if !drag_occurred && !extend_selection && clicked_selected { if tool_data.saved_points_before_anchor_convert_smooth_sharp.is_empty() { - tool_data.saved_points_before_anchor_convert_smooth_sharp = shape_editor.selected_points().copied().collect::>(); + let mut saved_points = HashMap::new(); + for (layer, state) in &shape_editor.selected_shape_state { + saved_points.insert(*layer, state.selected_points().collect::>()); + } + tool_data.saved_points_before_anchor_convert_smooth_sharp = saved_points; } shape_editor.deselect_all_points(); @@ -2176,6 +2518,17 @@ impl Fsm for PathToolFsmState { .entry(nearest_segment.layer()) .or_default() .deselect_segment(nearest_segment.segment()); + + // If in segment editing mode only, and upon deselecting a segment, we deselect both of its anchors + if segment_mode && !point_mode { + nearest_segment.points().iter().for_each(|point_id| { + shape_editor + .selected_shape_state + .entry(nearest_segment.layer()) + .or_default() + .deselect_point(ManipulatorPointId::Anchor(*point_id)); + }); + } } else { shape_editor.selected_shape_state.entry(nearest_segment.layer()).or_default().select_segment(nearest_segment.segment()); } @@ -2190,6 +2543,22 @@ impl Fsm for PathToolFsmState { responses.add(OverlaysMessage::Draw); } } + + // If only in segment select mode, we also select all of the endpoints of selected segments + let point_mode = tool_options.path_editing_mode.point_editing_mode; + if !point_mode { + let [start, end] = nearest_segment.points(); + shape_editor + .selected_shape_state + .entry(nearest_segment.layer()) + .or_default() + .select_point(ManipulatorPointId::Anchor(start)); + shape_editor + .selected_shape_state + .entry(nearest_segment.layer()) + .or_default() + .select_point(ManipulatorPointId::Anchor(end)); + } } // Deselect all points if the user clicks the filled region of the shape else if tool_data.drag_start_pos.distance(input.mouse.position) <= DRAG_THRESHOLD { @@ -2203,9 +2572,15 @@ impl Fsm for PathToolFsmState { if tool_data.handle_drag_toggle && drag_occurred { shape_editor.deselect_all_points(); - shape_editor.select_points_by_manipulator_id(&tool_data.saved_points_before_handle_drag); + shape_editor.deselect_all_segments(); - tool_data.saved_points_before_handle_drag.clear(); + for (layer, (selected_points, selected_segments)) in &tool_data.saved_selection_before_handle_drag { + let Some(state) = shape_editor.selected_shape_state.get_mut(layer) else { continue }; + selected_points.iter().for_each(|point| state.select_point(*point)); + selected_segments.iter().for_each(|segment| state.select_segment(*segment)); + } + + tool_data.saved_selection_before_handle_drag.clear(); tool_data.handle_drag_toggle = false; } @@ -2215,7 +2590,7 @@ impl Fsm for PathToolFsmState { if tool_data.select_anchor_toggled { shape_editor.deselect_all_points(); - shape_editor.select_points_by_manipulator_id(&tool_data.saved_points_before_anchor_select_toggle); + shape_editor.select_points_by_layer_and_id(&tool_data.saved_points_before_anchor_select_toggle); tool_data.remove_saved_points(); tool_data.select_anchor_toggled = false; } @@ -2223,7 +2598,9 @@ impl Fsm for PathToolFsmState { tool_data.snapping_axis = None; tool_data.sliding_point_info = None; - responses.add(DocumentMessage::EndTransaction); + if drag_occurred || extend_selection { + responses.add(DocumentMessage::EndTransaction); + } responses.add(PathToolMessage::SelectedPointUpdated); tool_data.snap_manager.cleanup(responses); tool_data.opposite_handle_position = None; @@ -2235,8 +2612,17 @@ impl Fsm for PathToolFsmState { (_, PathToolMessage::Delete) => { // Delete the selected points and clean up overlays responses.add(DocumentMessage::AddTransaction); + let point_mode = tool_options.path_editing_mode.point_editing_mode; + let segment_mode = tool_options.path_editing_mode.segment_editing_mode; + + let only_segment_mode = segment_mode && !point_mode; + shape_editor.delete_selected_segments(document, responses); - shape_editor.delete_selected_points(document, responses); + if only_segment_mode { + shape_editor.delete_hanging_selected_anchors(document, responses); + } else { + shape_editor.delete_selected_points(document, responses); + } responses.add(PathToolMessage::SelectionChanged); PathToolFsmState::Ready @@ -2249,6 +2635,309 @@ impl Fsm for PathToolFsmState { shape_editor.delete_point_and_break_path(document, responses); PathToolFsmState::Ready } + (_, PathToolMessage::ClosePath) => { + responses.add(DocumentMessage::AddTransaction); + shape_editor.close_selected_path(document, responses, tool_action_data.preferences.vector_meshes); + responses.add(DocumentMessage::EndTransaction); + + responses.add(OverlaysMessage::Draw); + + self + } + (_, PathToolMessage::StartSlidingPoint) => { + responses.add(DocumentMessage::StartTransaction); + if tool_data.start_sliding_point(shape_editor, document) { + PathToolFsmState::SlidingPoint + } else { + PathToolFsmState::Ready + } + } + (_, PathToolMessage::Copy { clipboard }) => { + // TODO: Add support for selected segments + + let mut buffer = Vec::new(); + + for (&layer, layer_selection_state) in &shape_editor.selected_shape_state { + if layer_selection_state.is_empty() { + continue; + } + + let Some(old_vector) = document.network_interface.compute_modified_vector(layer) else { continue }; + + // Also get the transform node that is applied on the layer if it exists + let transform = document.metadata().transform_to_document(layer); + + let mut new_vector = Vector::default(); + + let mut selected_points_by_segment = HashSet::new(); + old_vector + .segment_bezier_iter() + .filter(|(segment, _, _, _)| layer_selection_state.is_segment_selected(*segment)) + .for_each(|(_, _, start, end)| { + selected_points_by_segment.insert(start); + selected_points_by_segment.insert(end); + }); + + // Add all the selected points + for (point, position) in old_vector.point_domain.iter() { + if layer_selection_state.is_point_selected(ManipulatorPointId::Anchor(point)) || selected_points_by_segment.contains(&point) { + new_vector.point_domain.push(point, position); + } + } + + let find_index = |id: PointId| new_vector.point_domain.iter().enumerate().find(|(_, (point_id, _))| *point_id == id).map(|(index, _)| index); + + // Add segments which have selected ends + for ((segment_id, bezier, start, end), stroke) in old_vector.segment_bezier_iter().zip(old_vector.segment_domain.stroke().iter()) { + let both_ends_selected = layer_selection_state.is_point_selected(ManipulatorPointId::Anchor(start)) && layer_selection_state.is_point_selected(ManipulatorPointId::Anchor(end)); + + let segment_selected = layer_selection_state.is_segment_selected(segment_id); + + if both_ends_selected || segment_selected { + let Some((start_index, end_index)) = find_index(start).zip(find_index(end)) else { + error!("Point does not exist in point domain"); + return PathToolFsmState::Ready; + }; + new_vector.segment_domain.push(segment_id, start_index, end_index, bezier.handles, *stroke); + } + } + + for handles in old_vector.colinear_manipulators { + if new_vector.segment_domain.ids().contains(&handles[0].segment) && new_vector.segment_domain.ids().contains(&handles[1].segment) { + new_vector.colinear_manipulators.push(handles); + } + } + + buffer.push((layer, new_vector, transform)); + } + + if clipboard == Clipboard::Device { + let mut copy_text = String::from("graphite/vector: "); + copy_text += &serde_json::to_string(&buffer).expect("Could not serialize paste"); + + responses.add(FrontendMessage::TriggerTextCopy { copy_text }); + } + // TODO: Add implementation for internal clipboard + + PathToolFsmState::Ready + } + (_, PathToolMessage::Cut { clipboard }) => { + responses.add(PathToolMessage::Copy { clipboard }); + // Delete the selected points/segments + responses.add(PathToolMessage::DeleteSelected); + + PathToolFsmState::Ready + } + (_, PathToolMessage::Paste { data }) => { + // Deserialize the data + if let Ok(data) = serde_json::from_str::>(&data) { + shape_editor.deselect_all_points(); + responses.add(DocumentMessage::AddTransaction); + let mut new_layers = Vec::new(); + for (layer, new_vector, transform) in data { + // If layer is not selected then create a new selected layer + let layer = if shape_editor.selected_shape_state.contains_key(&layer) { + layer + } else { + let Some(node_type) = resolve_document_node_type("Path") else { + error!("Could not resolve node type for Path"); + continue; + }; + let nodes = vec![(NodeId(0), node_type.default_node_template())]; + + let parent = document.new_layer_parent(false); + + let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses); + + let fill_color = Color::WHITE; + let stroke_color = Color::BLACK; + + let fill = graphene_std::vector::style::Fill::solid(fill_color.to_gamma_srgb()); + responses.add(GraphOperationMessage::FillSet { layer, fill }); + + let stroke = graphene_std::vector::style::Stroke::new(Some(stroke_color.to_gamma_srgb()), DEFAULT_STROKE_WIDTH); + responses.add(GraphOperationMessage::StrokeSet { layer, stroke }); + + new_layers.push(layer); + + responses.add(GraphOperationMessage::TransformSet { + layer, + transform, + transform_in: TransformIn::Local, + skip_rerender: false, + }); + + layer + }; + + // Create new point ids and add those into the existing vector content + let mut points_map = HashMap::new(); + for (point, position) in new_vector.point_domain.iter() { + let new_point_id = PointId::generate(); + points_map.insert(point, new_point_id); + + let modification_type = VectorModificationType::InsertPoint { id: new_point_id, position }; + + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + + // Create new segment ids and add the segments into the existing vector content + let mut segments_map = HashMap::new(); + for (segment_id, bezier, start, end) in new_vector.segment_iter() { + let new_segment_id = SegmentId::generate(); + + segments_map.insert(segment_id, new_segment_id); + + let points = pathseg_points(bezier); + let handles = [points.p1, points.p2]; + + let points = [points_map[&start], points_map[&end]]; + let modification_type = VectorModificationType::InsertSegment { id: new_segment_id, points, handles }; + + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + + // Set G1 continuity + for handles in new_vector.colinear_manipulators { + let to_new_handle = |handle: HandleId| -> HandleId { + HandleId { + ty: handle.ty, + segment: segments_map[&handle.segment], + } + }; + let new_handles = [to_new_handle(handles[0]), to_new_handle(handles[1])]; + let modification_type = VectorModificationType::SetG1Continuous { handles: new_handles, enabled: true }; + + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + + shape_editor.selected_shape_state.entry(layer).or_insert(Default::default()); + + // Set selection to newly inserted points + let Some(state) = shape_editor.selected_shape_state.get_mut(&layer) else { + error!("No state for layer: {layer:?}"); + continue; + }; + + // If point editing mode is enabled, select all the pasted points + if tool_options.path_editing_mode.point_editing_mode { + points_map.values().for_each(|point| state.select_point(ManipulatorPointId::Anchor(*point))); + } + // If segment editing mode is enabled, select all the pasted segments + if tool_options.path_editing_mode.segment_editing_mode { + segments_map.values().for_each(|segment| state.select_segment(*segment)); + } + } + + // If there are new layers created, we need to center them in the viewport + if !new_layers.is_empty() { + responses.add(Message::Defer(DeferMessage::AfterGraphRun { + messages: vec![PortfolioMessage::CenterPastedLayers { layers: new_layers }.into()], + })); + } + } + + PathToolFsmState::Ready + } + (_, PathToolMessage::DeleteSelected) => { + // Delete the selected points and segments + shape_editor.delete_point_and_break_path(document, responses); + shape_editor.delete_selected_segments(document, responses); + + PathToolFsmState::Ready + } + (_, PathToolMessage::Duplicate) => { + responses.add(DocumentMessage::AddTransaction); + + // Copy the existing selected geometry and paste it in the existing layers + for (layer, layer_selection_state) in shape_editor.selected_shape_state.clone() { + if layer_selection_state.is_empty() { + continue; + } + let Some(old_vector) = document.network_interface.compute_modified_vector(layer) else { + continue; + }; + + // Add all the selected points + let mut selected_points_by_segment = HashSet::new(); + old_vector + .segment_bezier_iter() + .filter(|(segment, _, _, _)| layer_selection_state.is_segment_selected(*segment)) + .for_each(|(_, _, start, end)| { + selected_points_by_segment.insert(start); + selected_points_by_segment.insert(end); + }); + + let mut points_map = HashMap::new(); + for (point, position) in old_vector.point_domain.iter() { + // TODO: Either the point is selected or it is an endpoint of a selected segment + + if layer_selection_state.is_point_selected(ManipulatorPointId::Anchor(point)) || selected_points_by_segment.contains(&point) { + // Insert the same point with a new id + let new_id = PointId::generate(); + points_map.insert(point, new_id); + + let modification_type = VectorModificationType::InsertPoint { id: new_id, position }; + + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + } + + let mut segments_map = HashMap::new(); + + for (segment_id, bezier, start, end) in old_vector.segment_iter() { + let both_ends_selected = layer_selection_state.is_point_selected(ManipulatorPointId::Anchor(start)) && layer_selection_state.is_point_selected(ManipulatorPointId::Anchor(end)); + + let segment_selected = layer_selection_state.is_segment_selected(segment_id); + + if both_ends_selected || segment_selected { + let new_id = SegmentId::generate(); + segments_map.insert(segment_id, new_id); + + let points = pathseg_points(bezier); + let handles = [points.p1, points.p2]; + + let points = [points_map[&start], points_map[&end]]; + let modification_type = VectorModificationType::InsertSegment { id: new_id, points, handles }; + + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + } + + for handles in old_vector.colinear_manipulators { + let to_new_handle = |handle: HandleId| -> HandleId { + HandleId { + ty: handle.ty, + segment: segments_map[&handle.segment], + } + }; + + if segments_map.contains_key(&handles[0].segment) && segments_map.contains_key(&handles[1].segment) { + let new_handles = [to_new_handle(handles[0]), to_new_handle(handles[1])]; + let modification_type = VectorModificationType::SetG1Continuous { handles: new_handles, enabled: true }; + + responses.add(GraphOperationMessage::Vector { layer, modification_type }); + } + } + + shape_editor.deselect_all_points(); + shape_editor.deselect_all_segments(); + + // Set selection to newly inserted points and segments + let Some(state) = shape_editor.selected_shape_state.get_mut(&layer) else { + error!("No state for layer: {layer:?}"); + continue; + }; + if tool_options.path_editing_mode.point_editing_mode { + points_map.values().for_each(|point| state.select_point(ManipulatorPointId::Anchor(*point))); + } + if tool_options.path_editing_mode.segment_editing_mode { + segments_map.values().for_each(|segment| state.select_segment(*segment)); + } + } + + PathToolFsmState::Ready + } (_, PathToolMessage::DoubleClick { extend_selection, shrink_selection }) => { // Double-clicked on a point (flip smooth/sharp behavior) let nearest_point = shape_editor.find_nearest_point_indices(&document.network_interface, input.mouse.position, SELECTION_THRESHOLD); @@ -2271,12 +2960,14 @@ impl Fsm for PathToolFsmState { if !tool_data.double_click_handled && tool_data.drag_start_pos.distance(input.mouse.position) <= DRAG_THRESHOLD { responses.add(DocumentMessage::StartTransaction); - shape_editor.select_points_by_manipulator_id(&tool_data.saved_points_before_anchor_convert_smooth_sharp.iter().copied().collect::>()); - shape_editor.flip_smooth_sharp(&document.network_interface, input.mouse.position, SELECTION_TOLERANCE, responses); + shape_editor.select_points_by_layer_and_id(&tool_data.saved_points_before_anchor_convert_smooth_sharp); + shape_editor.flip_smooth_sharp(&document.network_interface, responses); tool_data.saved_points_before_anchor_convert_smooth_sharp.clear(); responses.add(DocumentMessage::EndTransaction); - responses.add(PathToolMessage::SelectedPointUpdated); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PathToolMessage::SelectedPointUpdated.into()], + }); } return PathToolFsmState::Ready; @@ -2367,14 +3058,28 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } - (_, PathToolMessage::SelectAllAnchors) => { + (_, PathToolMessage::SelectAll) => { shape_editor.select_all_anchors_in_selected_layers(document); + + let point_editing_mode = tool_options.path_editing_mode.point_editing_mode; + let segment_editing_mode = tool_options.path_editing_mode.segment_editing_mode; + + if point_editing_mode { + shape_editor.select_all_anchors_in_selected_layers(document); + } + if segment_editing_mode { + shape_editor.select_all_segments_in_selected_layers(document); + } + responses.add(OverlaysMessage::Draw); PathToolFsmState::Ready } - (_, PathToolMessage::DeselectAllPoints) => { + (_, PathToolMessage::DeselectAllSelected) => { shape_editor.deselect_all_points(); + shape_editor.deselect_all_segments(); + responses.add(OverlaysMessage::Draw); + PathToolFsmState::Ready } (_, PathToolMessage::SelectedPointXChanged { new_x }) => { @@ -2396,30 +3101,7 @@ impl Fsm for PathToolFsmState { colinear, }; - tool_data.single_path_node_compatible_layer_selected = { - let selected_nodes = document.network_interface.selected_nodes(); - let mut selected_layers = selected_nodes.selected_layers(document.metadata()); - let first_layer = selected_layers.next(); - let second_layer = selected_layers.next(); - let has_single_selection = first_layer.is_some() && second_layer.is_none(); - - let compatible_type = first_layer.and_then(|layer| { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &document.network_interface); - graph_layer.horizontal_layer_flow().nth(1).and_then(|node_id| { - let (output_type, _) = document.network_interface.output_type(&node_id, 0, &[]); - Some(format!("type:{}", output_type.nested_type())) - }) - }); - - let is_compatible = compatible_type.as_deref() == Some("type:Instances"); - - let is_modifiable = first_layer.map_or(false, |layer| { - let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &document.network_interface); - matches!(graph_layer.find_input("Path", 1), Some(TaggedValue::VectorModification(_))) - }); - - first_layer.is_some() && has_single_selection && is_compatible && !is_modifiable - }; + tool_data.make_path_editable_is_allowed = make_path_editable_is_allowed(&mut document.network_interface).is_some(); tool_data.update_selection_status(shape_editor, document); self } @@ -2510,13 +3192,13 @@ fn get_selection_status(network_interface: &NodeNetworkInterface, shape_state: & let Some(layer) = selection_layers.find(|(_, v)| *v > 0).map(|(k, _)| k) else { return SelectionStatus::None; }; - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { + let Some(vector) = network_interface.compute_modified_vector(layer) else { return SelectionStatus::None; }; let Some(&point) = shape_state.selected_points().next() else { return SelectionStatus::None; }; - let Some(local_position) = point.get_position(&vector_data) else { + let Some(local_position) = point.get_position(&vector) else { return SelectionStatus::None; }; @@ -2524,7 +3206,7 @@ fn get_selection_status(network_interface: &NodeNetworkInterface, shape_state: & .document_metadata() .transform_to_document_if_feeds(layer, network_interface) .transform_point2(local_position); - let manipulator_angle = if vector_data.colinear(point) { ManipulatorAngle::Colinear } else { ManipulatorAngle::Free }; + let manipulator_angle = if vector.colinear(point) { ManipulatorAngle::Colinear } else { ManipulatorAngle::Free }; return SelectionStatus::One(SingleSelectedPoint { coordinates, @@ -2549,40 +3231,40 @@ fn calculate_lock_angle( shape_state: &mut ShapeState, responses: &mut VecDeque, document: &DocumentMessageHandler, - vector_data: &VectorData, + vector: &Vector, handle_id: ManipulatorPointId, tangent_to_neighboring_tangents: bool, ) -> Option { - let anchor = handle_id.get_anchor(vector_data)?; - let anchor_position = vector_data.point_domain.position_from_id(anchor); + let anchor = handle_id.get_anchor(vector)?; + let anchor_position = vector.point_domain.position_from_id(anchor); let current_segment = handle_id.get_segment(); - let points_connected = vector_data.connected_count(anchor); + let points_connected = vector.connected_count(anchor); let (anchor_position, segment) = anchor_position.zip(current_segment)?; if points_connected == 1 { - calculate_segment_angle(anchor, segment, vector_data, false) + calculate_segment_angle(anchor, segment, vector, false) } else { let opposite_handle = handle_id - .get_handle_pair(vector_data) + .get_handle_pair(vector) .iter() .flatten() .find(|&h| h.to_manipulator_point() != handle_id) .copied() .map(|h| h.to_manipulator_point()); - let opposite_handle_position = opposite_handle.and_then(|h| h.get_position(vector_data)).filter(|pos| (pos - anchor_position).length() > 1e-6); + let opposite_handle_position = opposite_handle.and_then(|h| h.get_position(vector)).filter(|pos| (pos - anchor_position).length() > 1e-6); if let Some(opposite_pos) = opposite_handle_position { - if !vector_data.colinear_manipulators.iter().flatten().map(|h| h.to_manipulator_point()).any(|h| h == handle_id) { + if !vector.colinear_manipulators.iter().flatten().map(|h| h.to_manipulator_point()).any(|h| h == handle_id) { shape_state.convert_selected_manipulators_to_colinear_handles(responses, document); tool_data.temporary_colinear_handles = true; } Some(-(opposite_pos - anchor_position).angle_to(DVec2::X)) } else { - let angle_1 = vector_data + let angle_1 = vector .adjacent_segment(&handle_id) - .and_then(|(_, adjacent_segment)| calculate_segment_angle(anchor, adjacent_segment, vector_data, false)); + .and_then(|(_, adjacent_segment)| calculate_segment_angle(anchor, adjacent_segment, vector, false)); - let angle_2 = calculate_segment_angle(anchor, segment, vector_data, false); + let angle_2 = calculate_segment_angle(anchor, segment, vector, false); match (angle_1, angle_2) { (Some(angle_1), Some(angle_2)) => { @@ -2601,37 +3283,32 @@ fn calculate_lock_angle( } } -fn check_handle_over_adjacent_anchor(handle_id: ManipulatorPointId, vector_data: &VectorData) -> Option { - let (anchor, handle_position) = handle_id.get_anchor(vector_data).zip(handle_id.get_position(vector_data))?; +fn check_handle_over_adjacent_anchor(handle_id: ManipulatorPointId, vector: &Vector) -> Option { + let (anchor, handle_position) = handle_id.get_anchor(vector).zip(handle_id.get_position(vector))?; let check_if_close = |point_id: &PointId| { - let Some(anchor_position) = vector_data.point_domain.position_from_id(*point_id) else { + let Some(anchor_position) = vector.point_domain.position_from_id(*point_id) else { return false; }; (anchor_position - handle_position).length() < 10. }; - vector_data.connected_points(anchor).find(check_if_close) + vector.connected_points(anchor).find(check_if_close) } -fn calculate_adjacent_anchor_tangent( - currently_dragged_handle: ManipulatorPointId, - anchor: Option, - adjacent_anchor: Option, - vector_data: &VectorData, -) -> (Option, Option) { +fn calculate_adjacent_anchor_tangent(currently_dragged_handle: ManipulatorPointId, anchor: Option, adjacent_anchor: Option, vector: &Vector) -> (Option, Option) { // Early return if no anchor or no adjacent anchors let Some((dragged_handle_anchor, adjacent_anchor)) = anchor.zip(adjacent_anchor) else { return (None, None); }; - let adjacent_anchor_position = vector_data.point_domain.position_from_id(adjacent_anchor); + let adjacent_anchor_position = vector.point_domain.position_from_id(adjacent_anchor); - let handles: Vec<_> = vector_data.all_connected(adjacent_anchor).filter(|handle| handle.length(vector_data) > 1e-6).collect(); + let handles: Vec<_> = vector.all_connected(adjacent_anchor).filter(|handle| handle.length(vector) > 1e-6).collect(); match handles.len() { 0 => { // Find non-shared segments - let non_shared_segment: Vec<_> = vector_data + let non_shared_segment: Vec<_> = vector .segment_bezier_iter() .filter_map(|(segment_id, _, start, end)| { let touches_adjacent = start == adjacent_anchor || end == adjacent_anchor; @@ -2643,7 +3320,7 @@ fn calculate_adjacent_anchor_tangent( match non_shared_segment.first() { Some(&segment) => { - let angle = calculate_segment_angle(adjacent_anchor, segment, vector_data, true); + let angle = calculate_segment_angle(adjacent_anchor, segment, vector, true); (angle, adjacent_anchor_position) } None => (None, None), @@ -2652,7 +3329,7 @@ fn calculate_adjacent_anchor_tangent( 1 => { let segment = handles[0].segment; - let angle = calculate_segment_angle(adjacent_anchor, segment, vector_data, true); + let angle = calculate_segment_angle(adjacent_anchor, segment, vector, true); (angle, adjacent_anchor_position) } @@ -2667,7 +3344,7 @@ fn calculate_adjacent_anchor_tangent( }; let angle = shared_segment_handle - .get_position(vector_data) + .get_position(vector) .zip(adjacent_anchor_position) .map(|(handle, anchor)| -(handle - anchor).angle_to(DVec2::X)); @@ -2685,6 +3362,7 @@ fn update_dynamic_hints( document: &DocumentMessageHandler, tool_data: &PathToolData, tool_options: &PathToolOptions, + position: DVec2, ) { // Condinting based on currently selected segment if it has any one g1 continuous handle @@ -2701,13 +3379,13 @@ fn update_dynamic_hints( shape_editor.selected_points().next(), document.network_interface.selected_nodes().selected_layers(document.metadata()).next(), ) { - if let Some(vector_data) = document.network_interface.compute_modified_vector(layer) { - single_colinear_anchor_selected = vector_data.colinear(*anchor) + if let Some(vector) = document.network_interface.compute_modified_vector(layer) { + single_colinear_anchor_selected = vector.colinear(*anchor) } } } - let mut drag_selected_hints = vec![HintInfo::mouse(MouseMotion::LmbDrag, "Drag Selected")]; + let drag_selected_hints = vec![HintInfo::mouse(MouseMotion::LmbDrag, "Drag Selected")]; let mut delete_selected_hints = vec![HintInfo::keys([Key::Delete], "Delete Selected")]; if at_least_one_anchor_selected { @@ -2715,30 +3393,55 @@ fn update_dynamic_hints( delete_selected_hints.push(HintInfo::keys([Key::Shift], "Cut Anchor").prepend_plus()); } - if single_colinear_anchor_selected { - drag_selected_hints.push(HintInfo::multi_keys([[Key::Control], [Key::Shift]], "Slide").prepend_plus()); - } + let segment_edit = tool_options.path_editing_mode.segment_editing_mode; + let point_edit = tool_options.path_editing_mode.point_editing_mode; - let mut hint_data = match (tool_data.segment.is_some(), tool_options.path_editing_mode.segment_editing_mode) { - (true, true) => { + let hovering_segment = tool_data.segment.is_some(); + let hovering_point = shape_editor + .find_nearest_visible_point_indices( + &document.network_interface, + position, + SELECTION_THRESHOLD, + tool_options.path_overlay_mode, + tool_data.frontier_handles_info.as_ref(), + ) + .is_some(); + + let mut hint_data = if hovering_segment { + if segment_edit { + // Hovering a segment in segment editing mode vec![ HintGroup(vec![HintInfo::mouse(MouseMotion::Lmb, "Select Segment"), HintInfo::keys([Key::Shift], "Extend").prepend_plus()]), - HintGroup(vec![HintInfo::keys_and_mouse([Key::KeyA], MouseMotion::Lmb, "Mold Segment")]), + HintGroup(vec![HintInfo::keys_and_mouse([Key::Control], MouseMotion::Lmb, "Insert Point on Segment")]), + HintGroup(vec![HintInfo::keys_and_mouse([Key::Control], MouseMotion::LmbDrag, "Mold Segment")]), ] - } - (true, false) => { + } else { + // Hovering a segment in point editing mode vec![ HintGroup(vec![HintInfo::mouse(MouseMotion::Lmb, "Insert Point on Segment")]), HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Mold Segment")]), HintGroup(vec![HintInfo::keys_and_mouse([Key::Alt], MouseMotion::Lmb, "Delete Segment")]), ] } - (false, _) => { - vec![ - HintGroup(vec![HintInfo::mouse(MouseMotion::Lmb, "Select Point"), HintInfo::keys([Key::Shift], "Extend").prepend_plus()]), - HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Select Area"), HintInfo::keys([Key::Control], "Lasso").prepend_plus()]), - ] + } else if hovering_point { + if point_edit { + // Hovering over a point in point editing mode + vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::Lmb, "Select Point"), + HintInfo::keys([Key::Shift], "Extend").prepend_plus(), + ])] + } else { + // Hovering over a point in segment selection mode (will select a nearby segment) + vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::Lmb, "Select Segment"), + HintInfo::keys([Key::Shift], "Extend").prepend_plus(), + ])] } + } else { + vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Select Area"), + HintInfo::keys([Key::Control], "Lasso").prepend_plus(), + ])] }; if at_least_one_anchor_selected { @@ -2754,9 +3457,15 @@ fn update_dynamic_hints( let mut groups = vec![ HintGroup(drag_selected_hints), HintGroup(vec![HintInfo::multi_keys([[Key::KeyG], [Key::KeyR], [Key::KeyS]], "Grab/Rotate/Scale Selected")]), - HintGroup(vec![HintInfo::arrow_keys("Nudge Selected"), HintInfo::keys([Key::Shift], "10x").prepend_plus()]), - HintGroup(delete_selected_hints), ]; + + if single_colinear_anchor_selected { + groups.push(HintGroup(vec![HintInfo::multi_keys([[Key::KeyG], [Key::KeyG]], "Slide")])); + } + + groups.push(HintGroup(vec![HintInfo::arrow_keys("Nudge Selected"), HintInfo::keys([Key::Shift], "10x").prepend_plus()])); + groups.push(HintGroup(delete_selected_hints)); + hint_data.append(&mut groups); } @@ -2824,9 +3533,9 @@ fn update_dynamic_hints( let handle1 = HandleId::primary(segment.segment()); let handle2 = HandleId::end(segment.segment()); - if let Some(vector_data) = document.network_interface.compute_modified_vector(segment.layer()) { - let other_handle1 = vector_data.other_colinear_handle(handle1); - let other_handle2 = vector_data.other_colinear_handle(handle2); + if let Some(vector) = document.network_interface.compute_modified_vector(segment.layer()) { + let other_handle1 = vector.other_colinear_handle(handle1); + let other_handle2 = vector.other_colinear_handle(handle2); if other_handle1.is_some() || other_handle2.is_some() { has_colinear_anchors = true; } diff --git a/editor/src/messages/tool/tool_messages/pen_tool.rs b/editor/src/messages/tool/tool_messages/pen_tool.rs index 215c90bdc4..06bac2ac39 100644 --- a/editor/src/messages/tool/tool_messages/pen_tool.rs +++ b/editor/src/messages/tool/tool_messages/pen_tool.rs @@ -11,11 +11,12 @@ use crate::messages::tool::common_functionality::graph_modification_utils::{self use crate::messages::tool::common_functionality::shape_editor::ShapeState; use crate::messages::tool::common_functionality::snapping::{SnapCache, SnapCandidatePoint, SnapConstraint, SnapData, SnapManager, SnapTypeConfiguration}; use crate::messages::tool::common_functionality::utility_functions::{calculate_segment_angle, closest_point, should_extend}; -use bezier_rs::{Bezier, BezierHandles}; use graph_craft::document::NodeId; use graphene_std::Color; -use graphene_std::vector::{HandleId, ManipulatorPointId, NoHashBuilder, SegmentId, StrokeId, VectorData}; -use graphene_std::vector::{PointId, VectorModificationType}; +use graphene_std::subpath::pathseg_points; +use graphene_std::vector::misc::{HandleId, ManipulatorPointId, dvec2_to_point}; +use graphene_std::vector::{NoHashBuilder, PointId, SegmentId, StrokeId, Vector, VectorModificationType}; +use kurbo::{CubicBez, PathSeg}; #[derive(Default, ExtractField)] pub struct PenTool { @@ -49,7 +50,9 @@ pub enum PenToolMessage { Abort, SelectionChanged, WorkingColorChanged, - Overlays(OverlayContext), + Overlays { + context: OverlayContext, + }, // Tool-specific messages @@ -79,7 +82,9 @@ pub enum PenToolMessage { }, Redo, Undo, - UpdateOptions(PenOptionsUpdate), + UpdateOptions { + options: PenOptionsUpdate, + }, RecalculateLatestPointsPosition, RemovePreviousHandle, GRS { @@ -137,7 +142,12 @@ fn create_weight_widget(line_weight: f64) -> WidgetHolder { .label("Weight") .min(0.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) - .on_update(|number_input: &NumberInput| PenToolMessage::UpdateOptions(PenOptionsUpdate::LineWeight(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::LineWeight(number_input.value.unwrap()), + } + .into() + }) .widget_holder() } @@ -146,9 +156,26 @@ impl LayoutHolder for PenTool { let mut widgets = self.options.fill.create_widgets( "Fill", true, - |_| PenToolMessage::UpdateOptions(PenOptionsUpdate::FillColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| PenToolMessage::UpdateOptions(PenOptionsUpdate::FillColorType(color_type.clone())).into()), - |color: &ColorInput| PenToolMessage::UpdateOptions(PenOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::FillColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::FillColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, ); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); @@ -156,9 +183,26 @@ impl LayoutHolder for PenTool { widgets.append(&mut self.options.stroke.create_widgets( "Stroke", true, - |_| PenToolMessage::UpdateOptions(PenOptionsUpdate::StrokeColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| PenToolMessage::UpdateOptions(PenOptionsUpdate::StrokeColorType(color_type.clone())).into()), - |color: &ColorInput| PenToolMessage::UpdateOptions(PenOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::StrokeColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::StrokeColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); @@ -172,11 +216,21 @@ impl LayoutHolder for PenTool { RadioEntryData::new("all") .icon("HandleVisibilityAll") .tooltip("Show all handles regardless of selection") - .on_update(move |_| PenToolMessage::UpdateOptions(PenOptionsUpdate::OverlayModeType(PenOverlayMode::AllHandles)).into()), + .on_update(move |_| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::OverlayModeType(PenOverlayMode::AllHandles), + } + .into() + }), RadioEntryData::new("frontier") .icon("HandleVisibilityFrontier") .tooltip("Show only handles at the frontiers of the segments connected to selected points") - .on_update(move |_| PenToolMessage::UpdateOptions(PenOptionsUpdate::OverlayModeType(PenOverlayMode::FrontierHandles)).into()), + .on_update(move |_| { + PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::OverlayModeType(PenOverlayMode::FrontierHandles), + } + .into() + }), ]) .selected_index(Some(self.options.pen_overlay_mode as u32)) .widget_holder(), @@ -189,12 +243,12 @@ impl LayoutHolder for PenTool { #[message_handler_data] impl<'a> MessageHandler> for PenTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Pen(PenToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Pen(PenToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.tool_data, context, &self.options, responses, true); return; }; - match action { + match options { PenOptionsUpdate::OverlayModeType(overlay_mode_type) => { self.options.pen_overlay_mode = overlay_mode_type; responses.add(OverlaysMessage::Draw); @@ -252,7 +306,7 @@ impl ToolTransition for PenTool { tool_abort: Some(PenToolMessage::Abort.into()), selection_changed: Some(PenToolMessage::SelectionChanged.into()), working_color_changed: Some(PenToolMessage::WorkingColorChanged.into()), - overlay_provider: Some(|overlay_context| PenToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| PenToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -395,11 +449,11 @@ impl PenToolData { } /// Check whether target handle is primary, end, or `self.handle_end` - fn check_end_handle_type(&self, vector_data: &VectorData) -> TargetHandle { + fn check_end_handle_type(&self, vector: &Vector) -> TargetHandle { match (self.handle_end, self.prior_segment_endpoint, self.prior_segment, self.path_closed) { (Some(_), _, _, false) => TargetHandle::PreviewInHandle, (None, Some(point), Some(segment), false) | (Some(_), Some(point), Some(segment), true) => { - if vector_data.segment_start_from_id(segment) == Some(point) { + if vector.segment_start_from_id(segment) == Some(point) { TargetHandle::PriorOutHandle(segment) } else { TargetHandle::PriorInHandle(segment) @@ -409,23 +463,23 @@ impl PenToolData { } } - fn check_grs_end_handle(&self, vector_data: &VectorData) -> TargetHandle { + fn check_grs_end_handle(&self, vector: &Vector) -> TargetHandle { let Some(point) = self.latest_point().map(|point| point.id) else { return TargetHandle::None }; let Some(segment) = self.prior_segment else { return TargetHandle::None }; - if vector_data.segment_start_from_id(segment) == Some(point) { + if vector.segment_start_from_id(segment) == Some(point) { TargetHandle::PriorOutHandle(segment) } else { TargetHandle::PriorInHandle(segment) } } - fn get_opposite_handle_type(&self, handle_type: TargetHandle, vector_data: &VectorData) -> TargetHandle { + fn get_opposite_handle_type(&self, handle_type: TargetHandle, vector: &Vector) -> TargetHandle { match handle_type { - TargetHandle::FuturePreviewOutHandle => self.check_end_handle_type(vector_data), + TargetHandle::FuturePreviewOutHandle => self.check_end_handle_type(vector), TargetHandle::PreviewInHandle => match (self.path_closed, self.prior_segment_endpoint, self.prior_segment) { (true, Some(point), Some(segment)) => { - if vector_data.segment_start_from_id(segment) == Some(point) { + if vector.segment_start_from_id(segment) == Some(point) { TargetHandle::PriorOutHandle(segment) } else { TargetHandle::PriorInHandle(segment) @@ -472,10 +526,10 @@ impl PenToolData { } } - fn target_handle_position(&self, handle_type: TargetHandle, vector_data: &VectorData) -> Option { + fn target_handle_position(&self, handle_type: TargetHandle, vector: &Vector) -> Option { match handle_type { - TargetHandle::PriorOutHandle(segment) => ManipulatorPointId::PrimaryHandle(segment).get_position(vector_data), - TargetHandle::PriorInHandle(segment) => ManipulatorPointId::EndHandle(segment).get_position(vector_data), + TargetHandle::PriorOutHandle(segment) => ManipulatorPointId::PrimaryHandle(segment).get_position(vector), + TargetHandle::PriorInHandle(segment) => ManipulatorPointId::EndHandle(segment).get_position(vector), TargetHandle::PreviewInHandle => self.handle_end, TargetHandle::FuturePreviewOutHandle => Some(self.next_handle_start), TargetHandle::None => None, @@ -488,11 +542,11 @@ impl PenToolData { return; }; - let Some(vector_data) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) else { + let Some(vector) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) else { return; }; - match self.check_end_handle_type(&vector_data) { + match self.check_end_handle_type(&vector) { TargetHandle::PriorInHandle(segment) => shape_state.deselect_point(ManipulatorPointId::EndHandle(segment)), TargetHandle::PriorOutHandle(segment) => shape_state.deselect_point(ManipulatorPointId::PrimaryHandle(segment)), _ => {} @@ -518,18 +572,14 @@ impl PenToolData { self.latest_points.len() == 1 && self.latest_point().is_some_and(|point| point.pos == self.next_point) } - // When the vector data transform changes, the positions of the points must be recalculated. + // When the vector transform changes, the positions of the points must be recalculated. fn recalculate_latest_points_position(&mut self, document: &DocumentMessageHandler) { let selected_nodes = document.network_interface.selected_nodes(); let mut selected_layers = selected_nodes.selected_layers(document.metadata()); if let (Some(layer), None) = (selected_layers.next(), selected_layers.next()) { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { - return; - }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { return }; for point in &mut self.latest_points { - let Some(pos) = vector_data.point_domain.position_from_id(point.id) else { - continue; - }; + let Some(pos) = vector.point_domain.position_from_id(point.id) else { continue }; point.pos = pos; point.handle_start = point.pos; } @@ -549,7 +599,7 @@ impl PenToolData { self.g1_continuous = true; let document = snap_data.document; self.next_handle_start = self.next_point; - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); self.update_handle_type(TargetHandle::FuturePreviewOutHandle); self.handle_mode = HandleMode::ColinearLocked; @@ -565,7 +615,7 @@ impl PenToolData { self.store_clicked_endpoint(document, &transform, snap_data.input, preferences); if self.modifiers.lock_angle { - self.set_lock_angle(&vector_data, id, self.prior_segment); + self.set_lock_angle(&vector, id, self.prior_segment); let last_segment = self.prior_segment; let Some(point) = self.latest_point_mut() else { return }; point.in_segment = last_segment; @@ -579,7 +629,7 @@ impl PenToolData { } // Closing path - let closing_path_on_point = self.close_path_on_point(snap_data, &vector_data, document, preferences, id, &transform); + let closing_path_on_point = self.close_path_on_point(snap_data, &vector, document, preferences, id, &transform); if !closing_path_on_point && preferences.vector_meshes { // Attempt to find nearest segment and close path on segment by creating an anchor point on it let tolerance = crate::consts::SNAP_POINT_TOLERANCE; @@ -600,24 +650,16 @@ impl PenToolData { self.handle_mode = HandleMode::Free; if let (true, Some(prior_endpoint)) = (self.modifiers.lock_angle, self.prior_segment_endpoint) { - self.set_lock_angle(&vector_data, prior_endpoint, self.prior_segment); + self.set_lock_angle(&vector, prior_endpoint, self.prior_segment); self.switch_to_free_on_ctrl_release = true; } } } } - fn close_path_on_point( - &mut self, - snap_data: SnapData, - vector_data: &VectorData, - document: &DocumentMessageHandler, - preferences: &PreferencesMessageHandler, - id: PointId, - transform: &DAffine2, - ) -> bool { - for id in vector_data.extendable_points(preferences.vector_meshes).filter(|&point| point != id) { - let Some(pos) = vector_data.point_domain.position_from_id(id) else { continue }; + fn close_path_on_point(&mut self, snap_data: SnapData, vector: &Vector, document: &DocumentMessageHandler, preferences: &PreferencesMessageHandler, id: PointId, transform: &DAffine2) -> bool { + for id in vector.extendable_points(preferences.vector_meshes).filter(|&point| point != id) { + let Some(pos) = vector.point_domain.position_from_id(id) else { continue }; let transformed_distance_between_squared = transform.transform_point2(pos).distance_squared(transform.transform_point2(self.next_point)); let snap_point_tolerance_squared = crate::consts::SNAP_POINT_TOLERANCE.powi(2); @@ -629,7 +671,7 @@ impl PenToolData { self.store_clicked_endpoint(document, transform, snap_data.input, preferences); self.handle_mode = HandleMode::Free; if let (true, Some(prior_endpoint)) = (self.modifiers.lock_angle, self.prior_segment_endpoint) { - self.set_lock_angle(vector_data, prior_endpoint, self.prior_segment); + self.set_lock_angle(vector, prior_endpoint, self.prior_segment); self.switch_to_free_on_ctrl_release = true; } return true; @@ -662,11 +704,11 @@ impl PenToolData { let selected_nodes = document.network_interface.selected_nodes(); let mut selected_layers = selected_nodes.selected_layers(document.metadata()); let layer = selected_layers.next().filter(|_| selected_layers.next().is_none()).or(self.current_layer)?; - let vector_data = document.network_interface.compute_modified_vector(layer)?; + let vector = document.network_interface.compute_modified_vector(layer)?; let start = self.latest_point()?.id; let transform = document.metadata().document_to_viewport * transform; - for id in vector_data.extendable_points(preferences.vector_meshes).filter(|&point| point != start) { - let Some(pos) = vector_data.point_domain.position_from_id(id) else { continue }; + for id in vector.extendable_points(preferences.vector_meshes).filter(|&point| point != start) { + let Some(pos) = vector.point_domain.position_from_id(id) else { continue }; let transformed_distance_between_squared = transform.transform_point2(pos).distance_squared(transform.transform_point2(next_point)); let snap_point_tolerance_squared = crate::consts::SNAP_POINT_TOLERANCE.powi(2); if transformed_distance_between_squared < snap_point_tolerance_squared { @@ -687,15 +729,15 @@ impl PenToolData { // Store the segment let id = SegmentId::generate(); if self.path_closed { - if let Some((handles, handle1_pos)) = match self.get_opposite_handle_type(TargetHandle::PreviewInHandle, &vector_data) { + if let Some((handles, handle1_pos)) = match self.get_opposite_handle_type(TargetHandle::PreviewInHandle, &vector) { TargetHandle::PriorOutHandle(segment) => { let handles = [HandleId::end(id), HandleId::primary(segment)]; - let handle1_pos = handles[1].to_manipulator_point().get_position(&vector_data); + let handle1_pos = handles[1].to_manipulator_point().get_position(&vector); handle1_pos.map(|pos| (handles, pos)) } TargetHandle::PriorInHandle(segment) => { let handles = [HandleId::end(id), HandleId::end(segment)]; - let handle1_pos = handles[1].to_manipulator_point().get_position(&vector_data); + let handle1_pos = handles[1].to_manipulator_point().get_position(&vector); handle1_pos.map(|pos| (handles, pos)) } _ => None, @@ -719,14 +761,14 @@ impl PenToolData { // Mirror if let Some((last_segment, last_point)) = self.latest_point().and_then(|point| point.in_segment).zip(self.latest_point()) { - let end = vector_data.segment_end_from_id(last_segment) == Some(last_point.id); + let end = vector.segment_end_from_id(last_segment) == Some(last_point.id); let handles = if end { [HandleId::end(last_segment), HandleId::primary(id)] } else { [HandleId::primary(last_segment), HandleId::primary(id)] }; - if let Some(h1) = handles[0].to_manipulator_point().get_position(&vector_data) { + if let Some(h1) = handles[0].to_manipulator_point().get_position(&vector) { let angle = (h1 - last_point.pos).angle_to(last_point.handle_start - last_point.pos); let pi = std::f64::consts::PI; let colinear = (angle - pi).abs() < 1e-6 || (angle + pi).abs() < 1e-6; @@ -758,13 +800,13 @@ impl PenToolData { transform: &DAffine2, snap_data: &SnapData<'_>, mouse: &DVec2, - vector_data: &VectorData, + vector: &Vector, input: &InputPreprocessorMessageHandler, ) -> Option { let reference_handle = if self.path_closed { TargetHandle::PreviewInHandle } else { TargetHandle::FuturePreviewOutHandle }; - let end_handle = self.get_opposite_handle_type(reference_handle, vector_data); - let end_handle_pos = self.target_handle_position(end_handle, vector_data); - let ref_pos = self.target_handle_position(reference_handle, vector_data)?; + let end_handle = self.get_opposite_handle_type(reference_handle, vector); + let end_handle_pos = self.target_handle_position(end_handle, vector); + let ref_pos = self.target_handle_position(reference_handle, vector)?; let snap = &mut self.snap_manager; let snap_data = SnapData::new_snap_cache(snap_data.document, input, &self.snap_cache); @@ -826,7 +868,7 @@ impl PenToolData { responses: &mut VecDeque, ) { // Validate necessary data exists - let Some(vector_data) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) else { + let Some(vector) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) else { return; }; @@ -842,9 +884,9 @@ impl PenToolData { let should_swap_to_start = !self.path_closed && !matches!(self.handle_type, TargetHandle::None | TargetHandle::FuturePreviewOutHandle); if should_swap_to_opposite { - let opposite_type = self.get_opposite_handle_type(self.handle_type, &vector_data); + let opposite_type = self.get_opposite_handle_type(self.handle_type, &vector); // Update offset - let Some(handle_pos) = self.target_handle_position(opposite_type, &vector_data) else { + let Some(handle_pos) = self.target_handle_position(opposite_type, &vector) else { self.handle_swapped = false; return; }; @@ -894,7 +936,7 @@ impl PenToolData { Some(PenToolFsmState::DraggingHandle(self.handle_mode)) } - fn move_anchor_and_handles(&mut self, delta: DVec2, layer: LayerNodeIdentifier, responses: &mut VecDeque, vector_data: &VectorData) { + fn move_anchor_and_handles(&mut self, delta: DVec2, layer: LayerNodeIdentifier, responses: &mut VecDeque, vector: &Vector) { if self.handle_end.is_none() { if let Some(latest_pt) = self.latest_point_mut() { latest_pt.pos += delta; @@ -912,10 +954,10 @@ impl PenToolData { let reference_handle = if self.path_closed { TargetHandle::PreviewInHandle } else { TargetHandle::FuturePreviewOutHandle }; // Move the end handle - let end_handle_type = self.get_opposite_handle_type(reference_handle, vector_data); + let end_handle_type = self.get_opposite_handle_type(reference_handle, vector); match end_handle_type { TargetHandle::PriorInHandle(..) | TargetHandle::PriorOutHandle(..) => { - let Some(handle_pos) = self.target_handle_position(end_handle_type, vector_data) else { return }; + let Some(handle_pos) = self.target_handle_position(end_handle_type, vector) else { return }; self.update_target_handle_pos(end_handle_type, self.next_point, responses, handle_pos + delta, layer); } _ => {} @@ -934,13 +976,13 @@ impl PenToolData { let colinear = (self.handle_mode == HandleMode::ColinearEquidistant && self.modifiers.break_handle) || (self.handle_mode == HandleMode::ColinearLocked && !self.modifiers.break_handle); let document = snap_data.document; let Some(layer) = layer else { return Some(PenToolFsmState::DraggingHandle(self.handle_mode)) }; - let vector_data = document.network_interface.compute_modified_vector(layer)?; + let vector = document.network_interface.compute_modified_vector(layer)?; let viewport_to_document = document.metadata().document_to_viewport.inverse(); let mut mouse_pos = mouse; // Handles pressing Space to drag anchor and its handles if self.modifiers.move_anchor_with_handles { - let Some(delta) = self.space_anchor_handle_snap(&viewport_to_document, &transform, &snap_data, &mouse, &vector_data, input) else { + let Some(delta) = self.space_anchor_handle_snap(&viewport_to_document, &transform, &snap_data, &mouse, &vector, input) else { return Some(PenToolFsmState::DraggingHandle(self.handle_mode)); }; @@ -959,7 +1001,7 @@ impl PenToolData { }; } - self.move_anchor_and_handles(delta, layer, responses, &vector_data); + self.move_anchor_and_handles(delta, layer, responses, &vector); responses.add(OverlaysMessage::Draw); return Some(PenToolFsmState::DraggingHandle(self.handle_mode)); @@ -994,8 +1036,8 @@ impl PenToolData { match self.handle_mode { HandleMode::ColinearLocked | HandleMode::ColinearEquidistant => { self.g1_continuous = true; - self.apply_colinear_constraint(responses, layer, self.next_point, &vector_data); - self.adjust_handle_length(responses, layer, &vector_data); + self.apply_colinear_constraint(responses, layer, self.next_point, &vector); + self.adjust_handle_length(responses, layer, &vector); } HandleMode::Free => { self.g1_continuous = false; @@ -1006,7 +1048,7 @@ impl PenToolData { let Some(endpoint) = self.prior_segment_endpoint else { return Some(PenToolFsmState::DraggingHandle(self.handle_mode)); }; - self.set_lock_angle(&vector_data, endpoint, self.prior_segment); + self.set_lock_angle(&vector, endpoint, self.prior_segment); self.switch_to_free_on_ctrl_release = true; let last_segment = self.prior_segment; if let Some(latest) = self.latest_point_mut() { @@ -1020,19 +1062,19 @@ impl PenToolData { } /// Makes the opposite handle equidistant or locks its length. - fn adjust_handle_length(&mut self, responses: &mut VecDeque, layer: LayerNodeIdentifier, vector_data: &VectorData) { - let opposite_handle_type = self.get_opposite_handle_type(self.handle_type, vector_data); + fn adjust_handle_length(&mut self, responses: &mut VecDeque, layer: LayerNodeIdentifier, vector: &Vector) { + let opposite_handle_type = self.get_opposite_handle_type(self.handle_type, vector); match self.handle_mode { HandleMode::ColinearEquidistant => { if self.modifiers.break_handle { // Store handle for later restoration only when Alt is first pressed if !self.alt_pressed { - self.previous_handle_end_pos = self.target_handle_position(opposite_handle_type, vector_data); + self.previous_handle_end_pos = self.target_handle_position(opposite_handle_type, vector); self.alt_pressed = true; } // Set handle to opposite position of the other handle - let Some(new_position) = self.target_handle_position(self.handle_type, vector_data).map(|handle| self.next_point * 2. - handle) else { + let Some(new_position) = self.target_handle_position(self.handle_type, vector).map(|handle| self.next_point * 2. - handle) else { return; }; self.update_target_handle_pos(opposite_handle_type, self.next_point, responses, new_position, layer); @@ -1047,7 +1089,7 @@ impl PenToolData { } HandleMode::ColinearLocked => { if !self.modifiers.break_handle { - let Some(new_position) = self.target_handle_position(self.handle_type, vector_data).map(|handle| self.next_point * 2. - handle) else { + let Some(new_position) = self.target_handle_position(self.handle_type, vector).map(|handle| self.next_point * 2. - handle) else { return; }; self.update_target_handle_pos(opposite_handle_type, self.next_point, responses, new_position, layer); @@ -1057,23 +1099,23 @@ impl PenToolData { } } - fn apply_colinear_constraint(&mut self, responses: &mut VecDeque, layer: LayerNodeIdentifier, anchor_pos: DVec2, vector_data: &VectorData) { - let Some(handle) = self.target_handle_position(self.handle_type, vector_data) else { - return; - }; + fn apply_colinear_constraint(&mut self, responses: &mut VecDeque, layer: LayerNodeIdentifier, anchor_pos: DVec2, vector: &Vector) { + let Some(handle) = self.target_handle_position(self.handle_type, vector) else { return }; if (anchor_pos - handle).length() < 1e-6 && self.modifiers.lock_angle { return; } - let Some(direction) = (anchor_pos - handle).try_normalize() else { - return; - }; - let opposite_handle = self.get_opposite_handle_type(self.handle_type, vector_data); - let Some(handle_offset) = self.target_handle_position(opposite_handle, vector_data).map(|handle| (handle - anchor_pos).length()) else { + let Some(direction) = (anchor_pos - handle).try_normalize() else { return }; + + let opposite_handle = self.get_opposite_handle_type(self.handle_type, vector); + + let Some(handle_offset) = self.target_handle_position(opposite_handle, vector).map(|handle| (handle - anchor_pos).length()) else { return; }; + let new_handle_position = anchor_pos + handle_offset * direction; + self.update_target_handle_pos(opposite_handle, self.next_point, responses, new_handle_position, layer); } @@ -1086,10 +1128,10 @@ impl PenToolData { let selected_nodes = document.network_interface.selected_nodes(); let mut selected_layers = selected_nodes.selected_layers(document.metadata()); let layer = selected_layers.next().filter(|_| selected_layers.next().is_none()).or(self.current_layer)?; - let vector_data = document.network_interface.compute_modified_vector(layer)?; + let vector = document.network_interface.compute_modified_vector(layer)?; let transform = document.metadata().document_to_viewport * transform; - for point in vector_data.extendable_points(preferences.vector_meshes) { - let Some(pos) = vector_data.point_domain.position_from_id(point) else { continue }; + for point in vector.extendable_points(preferences.vector_meshes) { + let Some(pos) = vector.point_domain.position_from_id(point) else { continue }; let transformed_distance_between_squared = transform.transform_point2(pos).distance_squared(transform.transform_point2(self.next_point)); let snap_point_tolerance_squared = crate::consts::SNAP_POINT_TOLERANCE.powi(2); if transformed_distance_between_squared < snap_point_tolerance_squared { @@ -1217,11 +1259,11 @@ impl PenToolData { if append { if let Some((layer, point, _)) = closest_point(document, viewport, tolerance, document.metadata().all_layers(), |_| false, preferences) { - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); - let segment = vector_data.all_connected(point).collect::>().first().map(|s| s.segment); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); + let segment = vector.all_connected(point).collect::>().first().map(|s| s.segment); if self.modifiers.lock_angle { - self.set_lock_angle(&vector_data, point, segment); + self.set_lock_angle(&vector, point, segment); self.switch_to_free_on_ctrl_release = true; } } @@ -1235,11 +1277,11 @@ impl PenToolData { } if let Some((layer, point, _position)) = closest_point(document, viewport, tolerance, document.metadata().all_layers(), |_| false, preferences) { - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); - let segment = vector_data.all_connected(point).collect::>().first().map(|s| s.segment); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); + let segment = vector.all_connected(point).collect::>().first().map(|s| s.segment); self.handle_mode = HandleMode::Free; if self.modifiers.lock_angle { - self.set_lock_angle(&vector_data, point, segment); + self.set_lock_angle(&vector, point, segment); self.switch_to_free_on_ctrl_release = true; } } @@ -1257,18 +1299,19 @@ impl PenToolData { self.prior_segments = None; responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer.to_node()] }); - // This causes the following message to be run only after the next graph evaluation runs and the transforms are updated - responses.add(Message::StartBuffer); // It is necessary to defer this until the transform of the layer can be accurately computed (quite hacky) - responses.add(PenToolMessage::AddPointLayerPosition { layer, viewport }); + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PenToolMessage::AddPointLayerPosition { layer, viewport }.into()], + }); + responses.add(NodeGraphMessage::RunDocumentGraph); } /// Perform extension of an existing path fn extend_existing_path(&mut self, document: &DocumentMessageHandler, layer: LayerNodeIdentifier, point: PointId, position: DVec2) { - let vector_data = document.network_interface.compute_modified_vector(layer); - let (handle_start, in_segment) = if let Some(vector_data) = &vector_data { - vector_data - .segment_bezier_iter() + let vector = document.network_interface.compute_modified_vector(layer); + let (handle_start, in_segment) = if let Some(vector) = &vector { + vector + .segment_iter() .find_map(|(segment_id, bezier, start, end)| { let is_end = point == end; let is_start = point == start; @@ -1276,15 +1319,11 @@ impl PenToolData { return None; } - let handle = match bezier.handles { - BezierHandles::Cubic { handle_start, handle_end, .. } => { - if is_start { - handle_start - } else { - handle_end - } - } - BezierHandles::Quadratic { handle } => handle, + let points = pathseg_points(bezier); + let handle = match (points.p1, points.p2) { + (Some(p1), Some(_)) if is_start => p1, + (Some(_), Some(p2)) if !is_start => p2, + (Some(p1), None) | (None, Some(p1)) => p1, _ => return None, }; Some((segment_id, is_end, handle)) @@ -1310,12 +1349,12 @@ impl PenToolData { self.next_point = position; self.next_handle_start = handle_start; - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); - let segment = vector_data.all_connected(point).collect::>().first().map(|s| s.segment); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); + let segment = vector.all_connected(point).collect::>().first().map(|s| s.segment); self.handle_mode = HandleMode::Free; if self.modifiers.lock_angle { - self.set_lock_angle(&vector_data, point, segment); + self.set_lock_angle(&vector, point, segment); self.switch_to_free_on_ctrl_release = true; } } @@ -1340,11 +1379,11 @@ impl PenToolData { if let Some((layer, point, _position)) = closest_point(document, viewport, tolerance, document.metadata().all_layers(), |_| false, preferences) { self.prior_segment_endpoint = Some(point); self.prior_segment_layer = Some(layer); - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); - let segment = vector_data.all_connected(point).collect::>().first().map(|s| s.segment); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); + let segment = vector.all_connected(point).collect::>().first().map(|s| s.segment); self.prior_segment = segment; layer_manipulators.insert(point); - for (&id, &position) in vector_data.point_domain.ids().iter().zip(vector_data.point_domain.positions()) { + for (&id, &position) in vector.point_domain.ids().iter().zip(vector.point_domain.positions()) { if id == point { continue; } @@ -1355,8 +1394,8 @@ impl PenToolData { } } - fn set_lock_angle(&mut self, vector_data: &VectorData, anchor: PointId, segment: Option) { - let anchor_position = vector_data.point_domain.position_from_id(anchor); + fn set_lock_angle(&mut self, vector: &Vector, anchor: PointId, segment: Option) { + let anchor_position = vector.point_domain.position_from_id(anchor); let Some((anchor_position, segment)) = anchor_position.zip(segment) else { self.handle_mode = HandleMode::Free; @@ -1365,7 +1404,7 @@ impl PenToolData { match (self.handle_type, self.path_closed) { (TargetHandle::FuturePreviewOutHandle, _) | (TargetHandle::PreviewInHandle, true) => { - if let Some(required_handle) = calculate_segment_angle(anchor, segment, vector_data, true) { + if let Some(required_handle) = calculate_segment_angle(anchor, segment, vector, true) { self.angle = required_handle; self.handle_mode = HandleMode::ColinearEquidistant; } @@ -1460,12 +1499,12 @@ impl Fsm for PenToolFsmState { responses.add(TransformLayerMessage::BeginScalePen { last_point, handle }); } - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); tool_data.previous_handle_start_pos = latest.handle_start; - let opposite_handle = tool_data.check_grs_end_handle(&vector_data); - tool_data.previous_handle_end_pos = tool_data.target_handle_position(opposite_handle, &vector_data); + let opposite_handle = tool_data.check_grs_end_handle(&vector); + tool_data.previous_handle_end_pos = tool_data.target_handle_position(opposite_handle, &vector); let handle1 = latest_handle_start - latest_pos; - let Some(opposite_handle_pos) = tool_data.target_handle_position(opposite_handle, &vector_data) else { + let Some(opposite_handle_pos) = tool_data.target_handle_position(opposite_handle, &vector) else { return PenToolFsmState::GRSHandle; }; let handle2 = opposite_handle_pos - latest_pos; @@ -1476,8 +1515,8 @@ impl Fsm for PenToolFsmState { } (PenToolFsmState::GRSHandle, PenToolMessage::FinalPosition { final_position }) => { let Some(layer) = layer else { return PenToolFsmState::GRSHandle }; - let vector_data = document.network_interface.compute_modified_vector(layer); - let Some(vector_data) = vector_data else { return PenToolFsmState::GRSHandle }; + let vector = document.network_interface.compute_modified_vector(layer); + let Some(vector) = vector else { return PenToolFsmState::GRSHandle }; if let Some(latest_pt) = tool_data.latest_point_mut() { let layer_space_to_viewport = document.metadata().transform_to_viewport(layer); @@ -1489,8 +1528,8 @@ impl Fsm for PenToolFsmState { let Some(latest) = tool_data.latest_point() else { return PenToolFsmState::GRSHandle; }; - let opposite_handle = tool_data.check_grs_end_handle(&vector_data); - let Some(opposite_handle_pos) = tool_data.target_handle_position(opposite_handle, &vector_data) else { + let opposite_handle = tool_data.check_grs_end_handle(&vector); + let Some(opposite_handle_pos) = tool_data.target_handle_position(opposite_handle, &vector) else { return PenToolFsmState::GRSHandle; }; @@ -1531,8 +1570,8 @@ impl Fsm for PenToolFsmState { tool_data.next_handle_start = input.mouse.position; let Some(layer) = layer else { return PenToolFsmState::GRSHandle }; - let vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); - let opposite_handle = tool_data.check_grs_end_handle(&vector_data); + let vector = document.network_interface.compute_modified_vector(layer).unwrap(); + let opposite_handle = tool_data.check_grs_end_handle(&vector); let previous = tool_data.previous_handle_start_pos; if let Some(latest) = tool_data.latest_point_mut() { @@ -1561,7 +1600,7 @@ impl Fsm for PenToolFsmState { responses.add(OverlaysMessage::Draw); self } - (PenToolFsmState::Ready, PenToolMessage::Overlays(mut overlay_context)) => { + (PenToolFsmState::Ready, PenToolMessage::Overlays { context: mut overlay_context }) => { match tool_options.pen_overlay_mode { PenOverlayMode::AllHandles => { path_overlays(document, DrawHandles::All, shape_editor, &mut overlay_context); @@ -1589,7 +1628,7 @@ impl Fsm for PenToolFsmState { tool_data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context); self } - (_, PenToolMessage::Overlays(mut overlay_context)) => { + (_, PenToolMessage::Overlays { context: mut overlay_context }) => { let display_anchors = overlay_context.visibility_settings.anchors(); let display_handles = overlay_context.visibility_settings.handles(); @@ -1610,9 +1649,8 @@ impl Fsm for PenToolFsmState { let handle_start = tool_data.latest_point().map(|point| transform.transform_point2(point.handle_start)); if let (Some((start, handle_start)), Some(handle_end)) = (tool_data.latest_point().map(|point| (point.pos, point.handle_start)), tool_data.handle_end) { - let handles = BezierHandles::Cubic { handle_start, handle_end }; let end = tool_data.next_point; - let bezier = Bezier { start, handles, end }; + let bezier = PathSeg::Cubic(CubicBez::new(dvec2_to_point(start), dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(end))); if (end - start).length_squared() > f64::EPSILON { // Draw the curve for the currently-being-placed segment overlay_context.outline_bezier(bezier, transform); @@ -1629,17 +1667,21 @@ impl Fsm for PenToolFsmState { path_overlays(document, DrawHandles::All, shape_editor, &mut overlay_context); } PenOverlayMode::FrontierHandles => { - if let Some(latest_segment) = tool_data.prior_segment { - path_overlays(document, DrawHandles::SelectedAnchors(vec![latest_segment]), shape_editor, &mut overlay_context); - } - // If a vector mesh then there can be more than one prior segments - else if let Some(segments) = tool_data.prior_segments.clone() { - if preferences.vector_meshes { - path_overlays(document, DrawHandles::SelectedAnchors(segments), shape_editor, &mut overlay_context); + if let Some(layer) = tool_data.current_layer { + if let Some(latest_segment) = tool_data.prior_segment { + let selected_anchors_data = HashMap::from([(layer, vec![latest_segment])]); + path_overlays(document, DrawHandles::SelectedAnchors(selected_anchors_data), shape_editor, &mut overlay_context); } - } else { - path_overlays(document, DrawHandles::None, shape_editor, &mut overlay_context); - }; + // If a vector mesh then there can be more than one prior segments + else if let Some(segments) = tool_data.prior_segments.clone() { + if preferences.vector_meshes { + let selected_anchors_data = HashMap::from([(layer, segments)]); + path_overlays(document, DrawHandles::SelectedAnchors(selected_anchors_data), shape_editor, &mut overlay_context); + } + } else { + path_overlays(document, DrawHandles::None, shape_editor, &mut overlay_context); + }; + } } } @@ -1721,11 +1763,11 @@ impl Fsm for PenToolFsmState { let next_point = tool_data.next_point; let start = latest_point.id; - if let Some(layer) = layer { - let mut vector_data = document.network_interface.compute_modified_vector(layer).unwrap(); - - let closest_point = vector_data.extendable_points(preferences.vector_meshes).filter(|&id| id != start).find(|&id| { - vector_data.point_domain.position_from_id(id).map_or(false, |pos| { + if let Some(layer) = layer + && let Some(mut vector) = document.network_interface.compute_modified_vector(layer) + { + let closest_point = vector.extendable_points(preferences.vector_meshes).filter(|&id| id != start).find(|&id| { + vector.point_domain.position_from_id(id).is_some_and(|pos| { let dist_sq = transform.transform_point2(pos).distance_squared(transform.transform_point2(next_point)); dist_sq < crate::consts::SNAP_POINT_TOLERANCE.powi(2) }) @@ -1734,21 +1776,21 @@ impl Fsm for PenToolFsmState { // We have the point. Join the 2 vertices and check if any path is closed. if let Some(end) = closest_point { let segment_id = SegmentId::generate(); - vector_data.push(segment_id, start, end, BezierHandles::Cubic { handle_start, handle_end }, StrokeId::ZERO); + vector.push(segment_id, start, end, (Some(handle_start), Some(handle_end)), StrokeId::ZERO); - let grouped_segments = vector_data.auto_join_paths(); + let grouped_segments = vector.auto_join_paths(); let closed_paths = grouped_segments.iter().filter(|path| path.is_closed() && path.contains(segment_id)); let subpaths: Vec<_> = closed_paths .filter_map(|path| { let segments = path.edges.iter().filter_map(|edge| { - vector_data + vector .segment_domain .iter() .find(|(id, _, _, _)| id == &edge.id) .map(|(_, start, end, bezier)| if start == edge.start { (bezier, start, end) } else { (bezier.reversed(), end, start) }) }); - vector_data.subpath_from_segments_ignore_discontinuities(segments) + vector.subpath_from_segments_ignore_discontinuities(segments) }) .collect(); @@ -1768,10 +1810,9 @@ impl Fsm for PenToolFsmState { self } (_, PenToolMessage::WorkingColorChanged) => { - responses.add(PenToolMessage::UpdateOptions(PenOptionsUpdate::WorkingColors( - Some(global_tool_data.primary_color), - Some(global_tool_data.secondary_color), - ))); + responses.add(PenToolMessage::UpdateOptions { + options: PenOptionsUpdate::WorkingColors(Some(global_tool_data.primary_color), Some(global_tool_data.secondary_color)), + }); self } (PenToolFsmState::Ready, PenToolMessage::DragStart { append_to_selected }) => { @@ -1817,7 +1858,8 @@ impl Fsm for PenToolFsmState { } // Merge two layers if the point is connected to the end point of another path - // This might not be the correct solution to artboards being included as the other layer, which occurs due to the compute_modified_vector call in should_extend using the click targets for a layer instead of vector data. + // This might not be the correct solution to artboards being included as the other layer, + // which occurs due to the `compute_modified_vector` call in `should_extend` using the click targets for a layer instead of vector. let layers = LayerNodeIdentifier::ROOT_PARENT .descendants(document.metadata()) .filter(|layer| !document.network_interface.is_artboard(&layer.to_node(), &[])); @@ -1887,7 +1929,7 @@ impl Fsm for PenToolFsmState { tool_data.toggle_colinear_debounce = true; } - let Some(vector_data) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) else { + let Some(vector) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) else { return self; }; @@ -1901,7 +1943,7 @@ impl Fsm for PenToolFsmState { document .metadata() .transform_to_viewport(layer) - .transform_point2(tool_data.target_handle_position(reference_handle, &vector_data).unwrap()) + .transform_point2(tool_data.target_handle_position(reference_handle, &vector).unwrap()) }); tool_data.handle_start_offset = handle_start.map(|start| start - input.mouse.position); tool_data.space_pressed = true; @@ -2075,8 +2117,8 @@ impl Fsm for PenToolFsmState { } (PenToolFsmState::DraggingHandle(..), PenToolMessage::Confirm) => { // Confirm to end path - if let Some((vector_data, layer)) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)).zip(layer) { - let single_point_in_layer = vector_data.point_domain.ids().len() == 1; + if let Some((vector, layer)) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)).zip(layer) { + let single_point_in_layer = vector.point_domain.ids().len() == 1; tool_data.finish_placing_handle(SnapData::new(document, input), transform, preferences, responses); let latest_points = tool_data.latest_points.len() == 1; @@ -2129,8 +2171,8 @@ impl Fsm for PenToolFsmState { } } (PenToolFsmState::PlacingAnchor, PenToolMessage::Abort) => { - let should_delete_layer = if let Some(vector_data) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) { - vector_data.point_domain.ids().len() == 1 + let should_delete_layer = if let Some(vector) = layer.and_then(|layer| document.network_interface.compute_modified_vector(layer)) { + vector.point_domain.ids().len() == 1 } else { false }; diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index f792ee2bb4..f6321129f1 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -20,12 +20,12 @@ use crate::messages::tool::common_functionality::shape_editor::SelectionShapeTyp use crate::messages::tool::common_functionality::snapping::{self, SnapCandidatePoint, SnapData, SnapManager}; use crate::messages::tool::common_functionality::transformation_cage::*; use crate::messages::tool::common_functionality::utility_functions::{resize_bounds, rotate_bounds, skew_bounds, text_bounding_box, transforming_transform_cage}; -use bezier_rs::Subpath; use glam::DMat2; use graph_craft::document::NodeId; use graphene_std::path_bool::BooleanOperation; use graphene_std::renderer::Quad; use graphene_std::renderer::Rect; +use graphene_std::subpath::Subpath; use graphene_std::transform::ReferencePoint; use std::fmt; @@ -78,7 +78,9 @@ pub struct SelectToolPointerKeys { pub enum SelectToolMessage { // Standard messages Abort, - Overlays(OverlayContext), + Overlays { + context: OverlayContext, + }, // Tool-specific messages DragStart { @@ -92,10 +94,17 @@ pub enum SelectToolMessage { remove_from_selection: Key, }, EditLayer, + EditLayerExec, Enter, - PointerMove(SelectToolPointerKeys), - PointerOutsideViewport(SelectToolPointerKeys), - SelectOptions(SelectOptionsUpdate), + PointerMove { + modifier_keys: SelectToolPointerKeys, + }, + PointerOutsideViewport { + modifier_keys: SelectToolPointerKeys, + }, + SelectOptions { + options: SelectOptionsUpdate, + }, SetPivot { position: ReferencePoint, }, @@ -126,9 +135,12 @@ impl SelectTool { let layer_selection_behavior_entries = [NestedSelectionBehavior::Shallowest, NestedSelectionBehavior::Deepest] .iter() .map(|mode| { - MenuListEntry::new(format!("{mode:?}")) - .label(mode.to_string()) - .on_commit(move |_| SelectToolMessage::SelectOptions(SelectOptionsUpdate::NestedSelectionBehavior(*mode)).into()) + MenuListEntry::new(format!("{mode:?}")).label(mode.to_string()).on_commit(move |_| { + SelectToolMessage::SelectOptions { + options: SelectOptionsUpdate::NestedSelectionBehavior(*mode), + } + .into() + }) }) .collect(); @@ -187,14 +199,14 @@ impl SelectTool { } fn boolean_widgets(&self, selected_count: usize) -> impl Iterator + use<> { - let list = ::list(); + let list = ::list(); list.iter().flat_map(|i| i.iter()).map(move |(operation, info)| { let mut tooltip = info.label.to_string(); - if let Some(doc) = info.docstring.as_deref() { + if let Some(doc) = info.docstring { tooltip.push_str("\n\n"); tooltip.push_str(doc); } - IconButton::new(info.icon.as_deref().unwrap(), 24) + IconButton::new(info.icon.unwrap(), 24) .tooltip(tooltip) .disabled(selected_count == 0) .on_update(move |_| { @@ -277,7 +289,7 @@ impl<'a> MessageHandler> for Sele fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { let mut redraw_reference_pivot = false; - if let ToolMessage::Select(SelectToolMessage::SelectOptions(ref option_update)) = message { + if let ToolMessage::Select(SelectToolMessage::SelectOptions { options: ref option_update }) = message { match option_update { SelectOptionsUpdate::NestedSelectionBehavior(nested_selection_behavior) => { self.tool_data.nested_selection_behavior = *nested_selection_behavior; @@ -323,6 +335,7 @@ impl<'a> MessageHandler> for Sele PointerMove, Abort, EditLayer, + EditLayerExec, Enter, ); @@ -340,7 +353,7 @@ impl ToolTransition for SelectTool { fn event_to_message_map(&self) -> EventToMessageMap { EventToMessageMap { tool_abort: Some(SelectToolMessage::Abort.into()), - overlay_provider: Some(|overlay_context| SelectToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| SelectToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -589,7 +602,7 @@ impl Fsm for SelectToolFsmState { let ToolMessage::Select(event) = event else { return self }; match (self, event) { - (_, SelectToolMessage::Overlays(mut overlay_context)) => { + (_, SelectToolMessage::Overlays { context: mut overlay_context }) => { tool_data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context); let selected_layers_count = document.network_interface.selected_nodes().selected_unlocked_layers(&document.network_interface).count(); @@ -689,32 +702,28 @@ impl Fsm for SelectToolFsmState { // Measure with Alt held down // TODO: Don't use `Key::Alt` directly, instead take it as a variable from the input mappings list like in all other places if overlay_context.visibility_settings.quick_measurement() && !matches!(self, Self::ResizingBounds { .. }) && input.keyboard.get(Key::Alt as usize) { - // Get all selected layers and compute their viewport-aligned AABB - let selected_bounds_viewport = document + // Compute document-space bounding box (AABB) of all selected visible & unlocked layers + let selected_bounds_doc_space = document .network_interface .selected_nodes() .selected_visible_and_unlocked_layers(&document.network_interface) + // Exclude layers that are artboards .filter(|layer| !document.network_interface.is_artboard(&layer.to_node(), &[])) - .filter_map(|layer| { - // Get the layer's bounding box in its local space - let local_bounds = document.metadata().bounding_box_with_transform(layer, DAffine2::IDENTITY)?; - // Transform the bounds directly to viewport space - let viewport_quad = document.metadata().transform_to_viewport(layer) * Quad::from_box(local_bounds); - // Convert the quad to an AABB in viewport space - Some(Rect::from_box(viewport_quad.bounding_box())) - }) + // For each remaining layer, try to get its document-space bounding box and convert it to a Rect + .filter_map(|layer| document.metadata().bounding_box_document(layer).map(Rect::from_box)) + // Combine all individual bounding boxes into one overall bounding box that contains all selected layers .reduce(Rect::combine_bounds); - // Get the hovered layer's viewport-aligned AABB - let hovered_bounds_viewport = document.metadata().bounding_box_with_transform(layer, DAffine2::IDENTITY).map(|bounds| { - let viewport_quad = document.metadata().transform_to_viewport(layer) * Quad::from_box(bounds); - Rect::from_box(viewport_quad.bounding_box()) - }); + // Compute document-space bounding box (AABB) of the currently hovered layer + let hovered_bounds_doc_space = document.metadata().bounding_box_document(layer); - // Use the viewport-aligned AABBs for measurement - if let (Some(selected_bounds), Some(hovered_bounds)) = (selected_bounds_viewport, hovered_bounds_viewport) { - // Since we're already in viewport space, use identity transform - measure::overlay(selected_bounds, hovered_bounds, DAffine2::IDENTITY, DAffine2::IDENTITY, &mut overlay_context); + // If both selected and hovered bounds exist, overlay measurement lines + if let (Some(selected_bounds), Some(hovered_bounds)) = (selected_bounds_doc_space, hovered_bounds_doc_space.map(Rect::from_box)) { + // Both `selected_bounds` and `hovered_bounds` are in document space. + // To correctly render overlay lines in the UI (which is in viewport space), we need to transform both rectangles from document to viewport space. + // Therefore, we pass `document_to_viewport` as both the `transform` and `document_to_viewport` parameters. + let document_to_viewport = document.metadata().document_to_viewport; + measure::overlay(selected_bounds, hovered_bounds, document_to_viewport, document_to_viewport, &mut overlay_context); } } } @@ -843,7 +852,13 @@ impl Fsm for SelectToolFsmState { if let Some(pivot) = pivot { let offset = tool_data .pivot_gizmo_start - .map(|offset| tool_data.pivot_gizmo.pivot_disconnected().then_some(tool_data.drag_current - offset).unwrap_or_default()) + .map(|offset| { + if tool_data.pivot_gizmo.pivot_disconnected() { + tool_data.drag_current - offset + } else { + Default::default() + } + }) .unwrap_or_default(); let shift = tool_data.pivot_gizmo_shift.unwrap_or_default(); overlay_context.pivot(pivot + offset + shift, angle); @@ -886,7 +901,7 @@ impl Fsm for SelectToolFsmState { color } else { let color_string = &graphene_std::Color::from_rgb_str(color.strip_prefix('#').unwrap()).unwrap().with_alpha(0.25).to_rgba_hex_srgb(); - &format!("#{}", color_string) + &format!("#{color_string}") }; let line_center = tool_data.line_center; overlay_context.line(line_center - direction * viewport_diagonal, line_center + direction * viewport_diagonal, Some(color), None); @@ -985,14 +1000,19 @@ impl Fsm for SelectToolFsmState { self } (_, SelectToolMessage::EditLayer) => { - // Edit the clicked layer + responses.add(DeferMessage::AfterGraphRun { + messages: vec![SelectToolMessage::EditLayerExec.into()], + }); + + self + } + (_, SelectToolMessage::EditLayerExec) => { if let Some(intersect) = document.click(input) { match tool_data.nested_selection_behavior { NestedSelectionBehavior::Shallowest => edit_layer_shallowest_manipulation(document, intersect, responses), NestedSelectionBehavior::Deepest => edit_layer_deepest_manipulation(intersect, &document.network_interface, responses), } } - self } ( @@ -1139,7 +1159,7 @@ impl Fsm for SelectToolFsmState { deepest, remove, }, - SelectToolMessage::PointerMove(modifier_keys), + SelectToolMessage::PointerMove { modifier_keys }, ) => { if !has_dragged { responses.add(ToolMessage::UpdateHints); @@ -1184,8 +1204,8 @@ impl Fsm for SelectToolFsmState { // Auto-panning let messages = [ - SelectToolMessage::PointerOutsideViewport(modifier_keys.clone()).into(), - SelectToolMessage::PointerMove(modifier_keys).into(), + SelectToolMessage::PointerOutsideViewport { modifier_keys: modifier_keys.clone() }.into(), + SelectToolMessage::PointerMove { modifier_keys }.into(), ]; tool_data.auto_panning.setup_by_mouse_position(input, &messages, responses); @@ -1197,7 +1217,7 @@ impl Fsm for SelectToolFsmState { remove, } } - (SelectToolFsmState::ResizingBounds, SelectToolMessage::PointerMove(modifier_keys)) => { + (SelectToolFsmState::ResizingBounds, SelectToolMessage::PointerMove { modifier_keys }) => { if let Some(bounds) = &mut tool_data.bounding_box_manager { resize_bounds( document, @@ -1212,14 +1232,14 @@ impl Fsm for SelectToolFsmState { ToolType::Select, ); let messages = [ - SelectToolMessage::PointerOutsideViewport(modifier_keys.clone()).into(), - SelectToolMessage::PointerMove(modifier_keys).into(), + SelectToolMessage::PointerOutsideViewport { modifier_keys: modifier_keys.clone() }.into(), + SelectToolMessage::PointerMove { modifier_keys }.into(), ]; tool_data.auto_panning.setup_by_mouse_position(input, &messages, responses); } SelectToolFsmState::ResizingBounds } - (SelectToolFsmState::SkewingBounds { skew }, SelectToolMessage::PointerMove(_)) => { + (SelectToolFsmState::SkewingBounds { skew }, SelectToolMessage::PointerMove { .. }) => { if let Some(bounds) = &mut tool_data.bounding_box_manager { skew_bounds( document, @@ -1233,7 +1253,7 @@ impl Fsm for SelectToolFsmState { } SelectToolFsmState::SkewingBounds { skew } } - (SelectToolFsmState::RotatingBounds, SelectToolMessage::PointerMove(_)) => { + (SelectToolFsmState::RotatingBounds, SelectToolMessage::PointerMove { .. }) => { if let Some(bounds) = &mut tool_data.bounding_box_manager { rotate_bounds( document, @@ -1249,7 +1269,7 @@ impl Fsm for SelectToolFsmState { SelectToolFsmState::RotatingBounds } - (SelectToolFsmState::DraggingPivot, SelectToolMessage::PointerMove(modifier_keys)) => { + (SelectToolFsmState::DraggingPivot, SelectToolMessage::PointerMove { modifier_keys }) => { let mouse_position = input.mouse.position; let snapped_mouse_position = mouse_position; @@ -1259,14 +1279,14 @@ impl Fsm for SelectToolFsmState { // Auto-panning let messages = [ - SelectToolMessage::PointerOutsideViewport(modifier_keys.clone()).into(), - SelectToolMessage::PointerMove(modifier_keys).into(), + SelectToolMessage::PointerOutsideViewport { modifier_keys: modifier_keys.clone() }.into(), + SelectToolMessage::PointerMove { modifier_keys }.into(), ]; tool_data.auto_panning.setup_by_mouse_position(input, &messages, responses); SelectToolFsmState::DraggingPivot } - (SelectToolFsmState::Drawing { selection_shape, has_drawn }, SelectToolMessage::PointerMove(modifier_keys)) => { + (SelectToolFsmState::Drawing { selection_shape, has_drawn }, SelectToolMessage::PointerMove { modifier_keys }) => { if !has_drawn { responses.add(ToolMessage::UpdateHints); } @@ -1280,14 +1300,14 @@ impl Fsm for SelectToolFsmState { // Auto-panning let messages = [ - SelectToolMessage::PointerOutsideViewport(modifier_keys.clone()).into(), - SelectToolMessage::PointerMove(modifier_keys).into(), + SelectToolMessage::PointerOutsideViewport { modifier_keys: modifier_keys.clone() }.into(), + SelectToolMessage::PointerMove { modifier_keys }.into(), ]; tool_data.auto_panning.setup_by_mouse_position(input, &messages, responses); SelectToolFsmState::Drawing { selection_shape, has_drawn: true } } - (SelectToolFsmState::Ready { .. }, SelectToolMessage::PointerMove(_)) => { + (SelectToolFsmState::Ready { .. }, SelectToolMessage::PointerMove { .. }) => { let dragging_bounds = tool_data .bounding_box_manager .as_mut() @@ -1323,7 +1343,7 @@ impl Fsm for SelectToolFsmState { deepest, remove, }, - SelectToolMessage::PointerOutsideViewport(_), + SelectToolMessage::PointerOutsideViewport { .. }, ) => { // Auto-panning if let Some(shift) = tool_data.auto_panning.shift_viewport(input, responses) { @@ -1339,7 +1359,7 @@ impl Fsm for SelectToolFsmState { remove, } } - (SelectToolFsmState::ResizingBounds | SelectToolFsmState::SkewingBounds { .. }, SelectToolMessage::PointerOutsideViewport(_)) => { + (SelectToolFsmState::ResizingBounds | SelectToolFsmState::SkewingBounds { .. }, SelectToolMessage::PointerOutsideViewport { .. }) => { // Auto-panning if let Some(shift) = tool_data.auto_panning.shift_viewport(input, responses) { if let Some(bounds) = &mut tool_data.bounding_box_manager { @@ -1350,13 +1370,13 @@ impl Fsm for SelectToolFsmState { self } - (SelectToolFsmState::DraggingPivot, SelectToolMessage::PointerOutsideViewport(_)) => { + (SelectToolFsmState::DraggingPivot, SelectToolMessage::PointerOutsideViewport { .. }) => { // Auto-panning let _ = tool_data.auto_panning.shift_viewport(input, responses); self } - (SelectToolFsmState::Drawing { .. }, SelectToolMessage::PointerOutsideViewport(_)) => { + (SelectToolFsmState::Drawing { .. }, SelectToolMessage::PointerOutsideViewport { .. }) => { // Auto-panning if let Some(shift) = tool_data.auto_panning.shift_viewport(input, responses) { tool_data.drag_start += shift; @@ -1364,11 +1384,11 @@ impl Fsm for SelectToolFsmState { self } - (state, SelectToolMessage::PointerOutsideViewport(modifier_keys)) => { + (state, SelectToolMessage::PointerOutsideViewport { modifier_keys }) => { // Auto-panning let messages = [ - SelectToolMessage::PointerOutsideViewport(modifier_keys.clone()).into(), - SelectToolMessage::PointerMove(modifier_keys).into(), + SelectToolMessage::PointerOutsideViewport { modifier_keys: modifier_keys.clone() }.into(), + SelectToolMessage::PointerMove { modifier_keys }.into(), ]; tool_data.auto_panning.stop(&messages, responses); @@ -1441,7 +1461,11 @@ impl Fsm for SelectToolFsmState { tool_data.select_single_layer = None; if let Some(start) = tool_data.pivot_gizmo_start { - let offset = tool_data.pivot_gizmo.pivot_disconnected().then_some(tool_data.drag_current - start).unwrap_or_default(); + let offset = if tool_data.pivot_gizmo.pivot_disconnected() { + tool_data.drag_current - start + } else { + Default::default() + }; if let Some(v) = tool_data.pivot_gizmo.pivot.pivot.as_mut() { *v += offset; } @@ -1635,7 +1659,9 @@ impl Fsm for SelectToolFsmState { } (_, SelectToolMessage::PivotShift { offset, flush }) => { if flush { - tool_data.pivot_gizmo.pivot.pivot.as_mut().map(|v| *v += tool_data.pivot_gizmo_shift.take().unwrap_or_default()); + if let Some(v) = tool_data.pivot_gizmo.pivot.pivot.as_mut() { + *v += tool_data.pivot_gizmo_shift.take().unwrap_or_default(); + } let pivot_gizmo = tool_data.pivot_gizmo(); responses.add(TransformLayerMessage::SetPivotGizmo { pivot_gizmo }); return self; diff --git a/editor/src/messages/tool/tool_messages/shape_tool.rs b/editor/src/messages/tool/tool_messages/shape_tool.rs index 0f43adf286..2c6eea957b 100644 --- a/editor/src/messages/tool/tool_messages/shape_tool.rs +++ b/editor/src/messages/tool/tool_messages/shape_tool.rs @@ -10,6 +10,8 @@ use crate::messages::tool::common_functionality::gizmos::gizmo_manager::GizmoMan use crate::messages::tool::common_functionality::graph_modification_utils; use crate::messages::tool::common_functionality::graph_modification_utils::NodeGraphLayer; use crate::messages::tool::common_functionality::resize::Resize; +use crate::messages::tool::common_functionality::shapes::arc_shape::Arc; +use crate::messages::tool::common_functionality::shapes::circle_shape::Circle; use crate::messages::tool::common_functionality::shapes::line_shape::{LineToolData, clicked_on_line_endpoints}; use crate::messages::tool::common_functionality::shapes::polygon_shape::Polygon; use crate::messages::tool::common_functionality::shapes::shape_utility::{ShapeToolModifierKey, ShapeType, anchor_overlays, transform_cage_overlays}; @@ -25,7 +27,7 @@ use graphene_std::renderer::Quad; use graphene_std::vector::misc::ArcType; use std::vec; -#[derive(Default)] +#[derive(Default, ExtractField)] pub struct ShapeTool { fsm_state: ShapeToolFsmState, tool_data: ShapeToolData, @@ -71,18 +73,18 @@ pub enum ShapeOptionsUpdate { #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub enum ShapeToolMessage { // Standard messages - Overlays(OverlayContext), + Overlays { context: OverlayContext }, Abort, WorkingColorChanged, // Tool-specific messages DragStart, DragStop, - HideShapeTypeWidget(bool), - PointerMove(ShapeToolModifierKey), - PointerOutsideViewport(ShapeToolModifierKey), - UpdateOptions(ShapeOptionsUpdate), - SetShape(ShapeType), + HideShapeTypeWidget { hide: bool }, + PointerMove { modifier: ShapeToolModifierKey }, + PointerOutsideViewport { modifier: ShapeToolModifierKey }, + UpdateOptions { options: ShapeOptionsUpdate }, + SetShape { shape: ShapeType }, IncreaseSides, DecreaseSides, @@ -97,29 +99,81 @@ fn create_sides_widget(vertices: u32) -> WidgetHolder { .min(3.) .max(1000.) .mode(NumberInputMode::Increment) - .on_update(|number_input: &NumberInput| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::Vertices(number_input.value.unwrap() as u32)).into()) + .on_update(|number_input: &NumberInput| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::Vertices(number_input.value.unwrap() as u32), + } + .into() + }) .widget_holder() } fn create_shape_option_widget(shape_type: ShapeType) -> WidgetHolder { let entries = vec![vec![ - MenuListEntry::new("Polygon") - .label("Polygon") - .on_commit(move |_| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::ShapeType(ShapeType::Polygon)).into()), - MenuListEntry::new("Star") - .label("Star") - .on_commit(move |_| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::ShapeType(ShapeType::Star)).into()), + MenuListEntry::new("Polygon").label("Polygon").on_commit(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ShapeType(ShapeType::Polygon), + } + .into() + }), + MenuListEntry::new("Star").label("Star").on_commit(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ShapeType(ShapeType::Star), + } + .into() + }), + MenuListEntry::new("Circle").label("Circle").on_commit(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ShapeType(ShapeType::Circle), + } + .into() + }), + MenuListEntry::new("Arc").label("Arc").on_commit(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ShapeType(ShapeType::Arc), + } + .into() + }), ]]; DropdownInput::new(entries).selected_index(Some(shape_type as u32)).widget_holder() } +fn create_arc_type_widget(arc_type: ArcType) -> WidgetHolder { + let entries = vec![ + RadioEntryData::new("Open").label("Open").on_update(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ArcType(ArcType::Open), + } + .into() + }), + RadioEntryData::new("Closed").label("Closed").on_update(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ArcType(ArcType::Closed), + } + .into() + }), + RadioEntryData::new("Pie").label("Pie").on_update(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ArcType(ArcType::PieSlice), + } + .into() + }), + ]; + RadioInput::new(entries).selected_index(Some(arc_type as u32)).widget_holder() +} + fn create_weight_widget(line_weight: f64) -> WidgetHolder { NumberInput::new(Some(line_weight)) .unit(" px") .label("Weight") .min(0.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) - .on_update(|number_input: &NumberInput| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::LineWeight(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::LineWeight(number_input.value.unwrap()), + } + .into() + }) .widget_holder() } @@ -135,15 +189,37 @@ impl LayoutHolder for ShapeTool { widgets.push(create_sides_widget(self.options.vertices)); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); } + + if self.options.shape_type == ShapeType::Arc { + widgets.push(create_arc_type_widget(self.options.arc_type)); + widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); + } } if self.options.shape_type != ShapeType::Line { widgets.append(&mut self.options.fill.create_widgets( "Fill", true, - |_| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::FillColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::FillColorType(color_type.clone())).into()), - |color: &ColorInput| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::FillColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::FillColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); @@ -152,9 +228,26 @@ impl LayoutHolder for ShapeTool { widgets.append(&mut self.options.stroke.create_widgets( "Stroke", true, - |_| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::StrokeColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::StrokeColorType(color_type.clone())).into()), - |color: &ColorInput| ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::StrokeColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::StrokeColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); widgets.push(create_weight_widget(self.options.line_weight)); @@ -163,13 +256,14 @@ impl LayoutHolder for ShapeTool { } } +#[message_handler_data] impl<'a> MessageHandler> for ShapeTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Shape(ShapeToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Shape(ShapeToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.tool_data, context, &self.options, responses, true); return; }; - match action { + match options { ShapeOptionsUpdate::FillColor(color) => { self.options.fill.custom_color = color; self.options.fill.color_type = ToolColorType::Custom; @@ -205,7 +299,7 @@ impl<'a> MessageHandler> for Shap } } - self.fsm_state.update_hints(responses); + update_dynamic_hints(&self.fsm_state, responses, &self.tool_data); self.send_layout(responses, LayoutTarget::ToolOptions); } @@ -257,7 +351,7 @@ impl ToolMetadata for ShapeTool { impl ToolTransition for ShapeTool { fn event_to_message_map(&self) -> EventToMessageMap { EventToMessageMap { - overlay_provider: Some(|overlay_context| ShapeToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| ShapeToolMessage::Overlays { context }.into()), tool_abort: Some(ShapeToolMessage::Abort.into()), working_color_changed: Some(ShapeToolMessage::WorkingColorChanged.into()), ..Default::default() @@ -311,7 +405,7 @@ pub struct ShapeToolData { current_shape: ShapeType, // Gizmos - gizmo_manger: GizmoManager, + gizmo_manager: GizmoManager, } impl ShapeToolData { @@ -327,6 +421,23 @@ impl ShapeToolData { } } } + + fn transform_cage_mouse_icon(&mut self, input: &InputPreprocessorMessageHandler) -> MouseCursorIcon { + let dragging_bounds = self + .bounding_box_manager + .as_mut() + .and_then(|bounding_box| bounding_box.check_selected_edges(input.mouse.position)) + .is_some(); + + self.bounding_box_manager.as_ref().map_or(MouseCursorIcon::Crosshair, |bounds| { + let cursor_icon = bounds.get_cursor(input, true, dragging_bounds, Some(self.skew_edge)); + if cursor_icon == MouseCursorIcon::Default { MouseCursorIcon::Crosshair } else { cursor_icon } + }) + } + + fn shape_tool_modifier_keys() -> [Key; 3] { + [Key::Alt, Key::Shift, Key::Control] + } } impl Fsm for ShapeToolFsmState { @@ -357,37 +468,41 @@ impl Fsm for ShapeToolFsmState { let ToolMessage::Shape(event) = event else { return self }; match (self, event) { - (_, ShapeToolMessage::Overlays(mut overlay_context)) => { + (_, ShapeToolMessage::Overlays { context: mut overlay_context }) => { let mouse_position = tool_data .data .snap_manager .indicator_pos() .map(|pos| document.metadata().document_to_viewport.transform_point2(pos)) .unwrap_or(input.mouse.position); - let is_resizing_or_rotating = matches!(self, ShapeToolFsmState::ResizingBounds | ShapeToolFsmState::SkewingBounds { .. } | ShapeToolFsmState::RotatingBounds); if matches!(self, Self::Ready(_)) && !input.keyboard.key(Key::Control) { - tool_data.gizmo_manger.handle_actions(mouse_position, document, responses); - tool_data.gizmo_manger.overlays(document, input, shape_editor, mouse_position, &mut overlay_context); + tool_data.gizmo_manager.handle_actions(mouse_position, document, responses); + tool_data.gizmo_manager.overlays(document, input, shape_editor, mouse_position, &mut overlay_context); } if matches!(self, ShapeToolFsmState::ModifyingGizmo) && !input.keyboard.key(Key::Control) { - tool_data.gizmo_manger.dragging_overlays(document, input, shape_editor, mouse_position, &mut overlay_context); + tool_data.gizmo_manager.dragging_overlays(document, input, shape_editor, mouse_position, &mut overlay_context); + let cursor = tool_data.gizmo_manager.mouse_cursor_icon().unwrap_or(MouseCursorIcon::Crosshair); + tool_data.cursor = cursor; + responses.add(FrontendMessage::UpdateMouseCursor { cursor }); } let modifying_transform_cage = matches!(self, ShapeToolFsmState::ResizingBounds | ShapeToolFsmState::RotatingBounds | ShapeToolFsmState::SkewingBounds { .. }); - let hovering_over_gizmo = tool_data.gizmo_manger.hovering_over_gizmo(); + let hovering_over_gizmo = tool_data.gizmo_manager.hovering_over_gizmo(); - if !is_resizing_or_rotating && !matches!(self, ShapeToolFsmState::ModifyingGizmo) && !modifying_transform_cage && !hovering_over_gizmo { + if !matches!(self, ShapeToolFsmState::ModifyingGizmo) && !modifying_transform_cage && !hovering_over_gizmo { tool_data.data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context); } if modifying_transform_cage && !matches!(self, ShapeToolFsmState::ModifyingGizmo) { transform_cage_overlays(document, tool_data, &mut overlay_context); + responses.add(FrontendMessage::UpdateMouseCursor { cursor: tool_data.cursor }); } if input.keyboard.key(Key::Control) && matches!(self, ShapeToolFsmState::Ready(_)) { anchor_overlays(document, &mut overlay_context); + responses.add(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }); } else if matches!(self, ShapeToolFsmState::Ready(_)) { Line::overlays(document, tool_data, &mut overlay_context); @@ -409,7 +524,7 @@ impl Fsm for ShapeToolFsmState { let edges = bounds.check_selected_edges(input.mouse.position); let is_skewing = matches!(self, ShapeToolFsmState::SkewingBounds { .. }); let is_near_square = edges.is_some_and(|hover_edge| bounds.over_extended_edge_midpoint(input.mouse.position, hover_edge)); - if is_skewing || (dragging_bounds && is_near_square && !is_resizing_or_rotating && !hovering_over_gizmo) { + if is_skewing || (dragging_bounds && is_near_square && !hovering_over_gizmo) { bounds.render_skew_gizmos(&mut overlay_context, tool_data.skew_edge); } if !is_skewing && dragging_bounds && !hovering_over_gizmo { @@ -418,20 +533,32 @@ impl Fsm for ShapeToolFsmState { } } } + + let cursor = tool_data.gizmo_manager.mouse_cursor_icon().unwrap_or_else(|| tool_data.transform_cage_mouse_icon(input)); + + tool_data.cursor = cursor; + responses.add(FrontendMessage::UpdateMouseCursor { cursor }); } if matches!(self, ShapeToolFsmState::Drawing(_) | ShapeToolFsmState::DraggingLineEndpoints) { Line::overlays(document, tool_data, &mut overlay_context); + if tool_options.shape_type == ShapeType::Circle { + tool_data.gizmo_manager.overlays(document, input, shape_editor, mouse_position, &mut overlay_context); + } } self } (ShapeToolFsmState::Ready(_), ShapeToolMessage::IncreaseSides) => { - responses.add(ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::Vertices(tool_options.vertices + 1))); + responses.add(ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::Vertices(tool_options.vertices + 1), + }); self } (ShapeToolFsmState::Ready(_), ShapeToolMessage::DecreaseSides) => { - responses.add(ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::Vertices((tool_options.vertices - 1).max(3)))); + responses.add(ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::Vertices((tool_options.vertices - 1).max(3)), + }); self } ( @@ -485,7 +612,9 @@ impl Fsm for ShapeToolFsmState { return self; }; - responses.add(ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::Vertices(n + 1))); + responses.add(ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::Vertices(n + 1), + }); responses.add(NodeGraphMessage::SetInput { input_connector: InputConnector::node(node_id, 1), @@ -514,7 +643,9 @@ impl Fsm for ShapeToolFsmState { return self; }; - responses.add(ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::Vertices((n - 1).max(3)))); + responses.add(ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::Vertices((n - 1).max(3)), + }); responses.add(NodeGraphMessage::SetInput { input_connector: InputConnector::node(node_id, 1), @@ -538,8 +669,18 @@ impl Fsm for ShapeToolFsmState { tool_data.line_data.drag_current = mouse_pos; - if tool_data.gizmo_manger.handle_click() { + if tool_data.gizmo_manager.handle_click() && !input.keyboard.key(Key::Accel) { tool_data.data.drag_start = document.metadata().document_to_viewport.inverse().transform_point2(mouse_pos); + responses.add(DocumentMessage::StartTransaction); + + let cursor = tool_data.gizmo_manager.mouse_cursor_icon().unwrap_or(MouseCursorIcon::Crosshair); + tool_data.cursor = cursor; + responses.add(FrontendMessage::UpdateMouseCursor { cursor }); + // Send a PointerMove message to refresh the cursor icon + responses.add(ShapeToolMessage::PointerMove { + modifier: ShapeToolData::shape_tool_modifier_keys(), + }); + return ShapeToolFsmState::ModifyingGizmo; } @@ -560,17 +701,33 @@ impl Fsm for ShapeToolFsmState { let (resize, rotate, skew) = transforming_transform_cage(document, &mut tool_data.bounding_box_manager, input, responses, &mut tool_data.layers_dragging, None); if !input.keyboard.key(Key::Control) { + // Helper function to update cursor and send pointer move message + let update_cursor_and_pointer = |tool_data: &mut ShapeToolData, responses: &mut VecDeque| { + let cursor = tool_data.transform_cage_mouse_icon(input); + tool_data.cursor = cursor; + responses.add(FrontendMessage::UpdateMouseCursor { cursor }); + responses.add(ShapeToolMessage::PointerMove { + modifier: ShapeToolData::shape_tool_modifier_keys(), + }); + }; + match (resize, rotate, skew) { (true, false, false) => { tool_data.get_snap_candidates(document, input); + update_cursor_and_pointer(tool_data, responses); + return ShapeToolFsmState::ResizingBounds; } (false, true, false) => { tool_data.data.drag_start = mouse_pos; + update_cursor_and_pointer(tool_data, responses); + return ShapeToolFsmState::RotatingBounds; } (false, false, true) => { tool_data.get_snap_candidates(document, input); + update_cursor_and_pointer(tool_data, responses); + return ShapeToolFsmState::SkewingBounds { skew: Key::Control }; } _ => {} @@ -578,7 +735,7 @@ impl Fsm for ShapeToolFsmState { }; match tool_data.current_shape { - ShapeType::Polygon | ShapeType::Star | ShapeType::Ellipse | ShapeType::Rectangle => tool_data.data.start(document, input), + ShapeType::Polygon | ShapeType::Star | ShapeType::Circle | ShapeType::Arc | ShapeType::Rectangle | ShapeType::Ellipse => tool_data.data.start(document, input), ShapeType::Line => { let point = SnapCandidatePoint::handle(document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position)); let snapped = tool_data.data.snap_manager.free_snap(&SnapData::new(document, input), &point, SnapTypeConfiguration::default()); @@ -591,6 +748,8 @@ impl Fsm for ShapeToolFsmState { let node = match tool_data.current_shape { ShapeType::Polygon => Polygon::create_node(tool_options.vertices), ShapeType::Star => Star::create_node(tool_options.vertices), + ShapeType::Circle => Circle::create_node(), + ShapeType::Arc => Arc::create_node(tool_options.arc_type), ShapeType::Rectangle => Rectangle::create_node(), ShapeType::Ellipse => Ellipse::create_node(), ShapeType::Line => Line::create_node(document, tool_data.data.drag_start), @@ -599,73 +758,79 @@ impl Fsm for ShapeToolFsmState { let nodes = vec![(NodeId(0), node)]; let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_bounding_artboard(input), responses); - responses.add(Message::StartBuffer); + let defered_responses = &mut VecDeque::new(); match tool_data.current_shape { - ShapeType::Ellipse | ShapeType::Rectangle | ShapeType::Polygon | ShapeType::Star => { - responses.add(GraphOperationMessage::TransformSet { + ShapeType::Polygon | ShapeType::Star | ShapeType::Circle | ShapeType::Arc | ShapeType::Rectangle | ShapeType::Ellipse => { + defered_responses.add(GraphOperationMessage::TransformSet { layer, transform: DAffine2::from_scale_angle_translation(DVec2::ONE, 0., input.mouse.position), transform_in: TransformIn::Viewport, skip_rerender: false, }); - tool_options.fill.apply_fill(layer, responses); + tool_options.fill.apply_fill(layer, defered_responses); } ShapeType::Line => { tool_data.line_data.weight = tool_options.line_weight; tool_data.line_data.editing_layer = Some(layer); } } - tool_options.stroke.apply_stroke(tool_options.line_weight, layer, responses); + tool_options.stroke.apply_stroke(tool_options.line_weight, layer, defered_responses); - tool_options.stroke.apply_stroke(tool_options.line_weight, layer, responses); + tool_options.stroke.apply_stroke(tool_options.line_weight, layer, defered_responses); tool_data.data.layer = Some(layer); + responses.add(DeferMessage::AfterGraphRun { + messages: defered_responses.drain(..).collect(), + }); + responses.add(NodeGraphMessage::RunDocumentGraph); + ShapeToolFsmState::Drawing(tool_data.current_shape) } - (ShapeToolFsmState::Drawing(shape), ShapeToolMessage::PointerMove(modifier)) => { + (ShapeToolFsmState::Drawing(shape), ShapeToolMessage::PointerMove { modifier }) => { let Some(layer) = tool_data.data.layer else { return ShapeToolFsmState::Ready(shape); }; match tool_data.current_shape { + ShapeType::Polygon => Polygon::update_shape(document, input, layer, tool_data, modifier, responses), + ShapeType::Star => Star::update_shape(document, input, layer, tool_data, modifier, responses), + ShapeType::Circle => Circle::update_shape(document, input, layer, tool_data, modifier, responses), + ShapeType::Arc => Arc::update_shape(document, input, layer, tool_data, modifier, responses), ShapeType::Rectangle => Rectangle::update_shape(document, input, layer, tool_data, modifier, responses), ShapeType::Ellipse => Ellipse::update_shape(document, input, layer, tool_data, modifier, responses), ShapeType::Line => Line::update_shape(document, input, layer, tool_data, modifier, responses), - ShapeType::Polygon => Polygon::update_shape(document, input, layer, tool_data, modifier, responses), - ShapeType::Star => Star::update_shape(document, input, layer, tool_data, modifier, responses), } // Auto-panning - let messages = [ShapeToolMessage::PointerOutsideViewport(modifier).into(), ShapeToolMessage::PointerMove(modifier).into()]; + let messages = [ShapeToolMessage::PointerOutsideViewport { modifier }.into(), ShapeToolMessage::PointerMove { modifier }.into()]; tool_data.auto_panning.setup_by_mouse_position(input, &messages, responses); self } - (ShapeToolFsmState::DraggingLineEndpoints, ShapeToolMessage::PointerMove(modifier)) => { + (ShapeToolFsmState::DraggingLineEndpoints, ShapeToolMessage::PointerMove { modifier }) => { let Some(layer) = tool_data.line_data.editing_layer else { return ShapeToolFsmState::Ready(tool_data.current_shape); }; Line::update_shape(document, input, layer, tool_data, modifier, responses); // Auto-panning - let messages = [ShapeToolMessage::PointerOutsideViewport(modifier).into(), ShapeToolMessage::PointerMove(modifier).into()]; + let messages = [ShapeToolMessage::PointerOutsideViewport { modifier }.into(), ShapeToolMessage::PointerMove { modifier }.into()]; tool_data.auto_panning.setup_by_mouse_position(input, &messages, responses); self } - (ShapeToolFsmState::ModifyingGizmo, ShapeToolMessage::PointerMove(..)) => { - responses.add(DocumentMessage::StartTransaction); - tool_data.gizmo_manger.handle_update(tool_data.data.drag_start, document, input, responses); + (ShapeToolFsmState::ModifyingGizmo, ShapeToolMessage::PointerMove { .. }) => { + tool_data.gizmo_manager.handle_update(tool_data.data.viewport_drag_start(document), document, input, responses); responses.add(OverlaysMessage::Draw); ShapeToolFsmState::ModifyingGizmo } - (ShapeToolFsmState::ResizingBounds, ShapeToolMessage::PointerMove(modifier)) => { + (ShapeToolFsmState::ResizingBounds, ShapeToolMessage::PointerMove { modifier }) => { if let Some(bounds) = &mut tool_data.bounding_box_manager { - let messages = [ShapeToolMessage::PointerOutsideViewport(modifier).into(), ShapeToolMessage::PointerMove(modifier).into()]; + let messages = [ShapeToolMessage::PointerOutsideViewport { modifier }.into(), ShapeToolMessage::PointerMove { modifier }.into()]; resize_bounds( document, responses, @@ -684,7 +849,7 @@ impl Fsm for ShapeToolFsmState { responses.add(OverlaysMessage::Draw); ShapeToolFsmState::ResizingBounds } - (ShapeToolFsmState::RotatingBounds, ShapeToolMessage::PointerMove(modifier)) => { + (ShapeToolFsmState::RotatingBounds, ShapeToolMessage::PointerMove { modifier }) => { if let Some(bounds) = &mut tool_data.bounding_box_manager { rotate_bounds( document, @@ -700,7 +865,7 @@ impl Fsm for ShapeToolFsmState { ShapeToolFsmState::RotatingBounds } - (ShapeToolFsmState::SkewingBounds { skew }, ShapeToolMessage::PointerMove(_)) => { + (ShapeToolFsmState::SkewingBounds { skew }, ShapeToolMessage::PointerMove { .. }) => { if let Some(bounds) = &mut tool_data.bounding_box_manager { skew_bounds( document, @@ -716,7 +881,7 @@ impl Fsm for ShapeToolFsmState { ShapeToolFsmState::SkewingBounds { skew } } - (_, ShapeToolMessage::PointerMove(_)) => { + (_, ShapeToolMessage::PointerMove { .. }) => { let dragging_bounds = tool_data .bounding_box_manager .as_mut() @@ -728,7 +893,7 @@ impl Fsm for ShapeToolFsmState { if cursor == MouseCursorIcon::Default { MouseCursorIcon::Crosshair } else { cursor } }); - if tool_data.cursor != cursor && !input.keyboard.key(Key::Control) && !all_selected_layers_line { + if tool_data.cursor != cursor { tool_data.cursor = cursor; responses.add(FrontendMessage::UpdateMouseCursor { cursor }); } @@ -738,7 +903,7 @@ impl Fsm for ShapeToolFsmState { responses.add(OverlaysMessage::Draw); self } - (ShapeToolFsmState::ResizingBounds | ShapeToolFsmState::SkewingBounds { .. }, ShapeToolMessage::PointerOutsideViewport(_)) => { + (ShapeToolFsmState::ResizingBounds | ShapeToolFsmState::SkewingBounds { .. }, ShapeToolMessage::PointerOutsideViewport { .. }) => { // Auto-panning if let Some(shift) = tool_data.auto_panning.shift_viewport(input, responses) { if let Some(bounds) = &mut tool_data.bounding_box_manager { @@ -749,7 +914,7 @@ impl Fsm for ShapeToolFsmState { self } - (ShapeToolFsmState::Ready(_), ShapeToolMessage::PointerOutsideViewport(..)) => self, + (ShapeToolFsmState::Ready(_), ShapeToolMessage::PointerOutsideViewport { .. }) => self, (_, ShapeToolMessage::PointerOutsideViewport { .. }) => { // Auto-panning let _ = tool_data.auto_panning.shift_viewport(input, responses); @@ -767,7 +932,7 @@ impl Fsm for ShapeToolFsmState { input.mouse.finish_transaction(tool_data.data.drag_start, responses); tool_data.data.cleanup(responses); - tool_data.gizmo_manger.handle_cleanup(); + tool_data.gizmo_manager.handle_cleanup(); if let Some(bounds) = &mut tool_data.bounding_box_manager { bounds.original_transforms.clear(); @@ -792,31 +957,34 @@ impl Fsm for ShapeToolFsmState { tool_data.data.cleanup(responses); tool_data.line_data.dragging_endpoint = None; - tool_data.gizmo_manger.handle_cleanup(); + tool_data.gizmo_manager.handle_cleanup(); if let Some(bounds) = &mut tool_data.bounding_box_manager { bounds.original_transforms.clear(); } + tool_data.cursor = MouseCursorIcon::Crosshair; responses.add(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }); ShapeToolFsmState::Ready(tool_data.current_shape) } (_, ShapeToolMessage::WorkingColorChanged) => { - responses.add(ShapeToolMessage::UpdateOptions(ShapeOptionsUpdate::WorkingColors( - Some(global_tool_data.primary_color), - Some(global_tool_data.secondary_color), - ))); + responses.add(ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::WorkingColors(Some(global_tool_data.primary_color), Some(global_tool_data.secondary_color)), + }); self } - (_, ShapeToolMessage::SetShape(shape)) => { + (_, ShapeToolMessage::SetShape { shape }) => { responses.add(DocumentMessage::AbortTransaction); tool_data.data.cleanup(responses); tool_data.current_shape = shape; + responses.add(ShapeToolMessage::UpdateOptions { + options: ShapeOptionsUpdate::ShapeType(shape), + }); ShapeToolFsmState::Ready(shape) } - (_, ShapeToolMessage::HideShapeTypeWidget(hide)) => { + (_, ShapeToolMessage::HideShapeTypeWidget { hide }) => { tool_data.hide_shape_option_widget = hide; responses.add(ToolMessage::RefreshToolOptions); self @@ -825,85 +993,100 @@ impl Fsm for ShapeToolFsmState { } } - fn update_hints(&self, responses: &mut VecDeque) { - let hint_data = match self { - ShapeToolFsmState::Ready(shape) => { - let hint_groups = match shape { - ShapeType::Polygon | ShapeType::Star => vec![ - HintGroup(vec![ - HintInfo::mouse(MouseMotion::LmbDrag, "Draw Polygon"), - HintInfo::keys([Key::Shift], "Constrain Regular").prepend_plus(), - HintInfo::keys([Key::Alt], "From Center").prepend_plus(), - ]), - HintGroup(vec![HintInfo::multi_keys([[Key::BracketLeft], [Key::BracketRight]], "Decrease/Increase Sides")]), - ], - ShapeType::Ellipse => vec![HintGroup(vec![ - HintInfo::mouse(MouseMotion::LmbDrag, "Draw Ellipse"), - HintInfo::keys([Key::Shift], "Constrain Circular").prepend_plus(), - HintInfo::keys([Key::Alt], "From Center").prepend_plus(), - ])], - ShapeType::Line => vec![HintGroup(vec![ - HintInfo::mouse(MouseMotion::LmbDrag, "Draw Line"), - HintInfo::keys([Key::Shift], "15ยฐ Increments").prepend_plus(), - HintInfo::keys([Key::Alt], "From Center").prepend_plus(), - HintInfo::keys([Key::Control], "Lock Angle").prepend_plus(), - ])], - ShapeType::Rectangle => vec![HintGroup(vec![ - HintInfo::mouse(MouseMotion::LmbDrag, "Draw Rectangle"), - HintInfo::keys([Key::Shift], "Constrain Square").prepend_plus(), - HintInfo::keys([Key::Alt], "From Center").prepend_plus(), - ])], - }; - HintData(hint_groups) - } - ShapeToolFsmState::Drawing(shape) => { - let mut common_hint_group = vec![HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()])]; - let tool_hint_group = match shape { - ShapeType::Polygon | ShapeType::Star => HintGroup(vec![HintInfo::keys([Key::Shift], "Constrain Regular"), HintInfo::keys([Key::Alt], "From Center")]), - ShapeType::Rectangle => HintGroup(vec![HintInfo::keys([Key::Shift], "Constrain Square"), HintInfo::keys([Key::Alt], "From Center")]), - ShapeType::Ellipse => HintGroup(vec![HintInfo::keys([Key::Shift], "Constrain Circular"), HintInfo::keys([Key::Alt], "From Center")]), - ShapeType::Line => HintGroup(vec![ - HintInfo::keys([Key::Shift], "15ยฐ Increments"), - HintInfo::keys([Key::Alt], "From Center"), - HintInfo::keys([Key::Control], "Lock Angle"), - ]), - }; - - common_hint_group.push(tool_hint_group); - - if matches!(shape, ShapeType::Polygon | ShapeType::Star) { - common_hint_group.push(HintGroup(vec![HintInfo::multi_keys([[Key::BracketLeft], [Key::BracketRight]], "Decrease/Increase Sides")])); - } - - HintData(common_hint_group) - } - ShapeToolFsmState::DraggingLineEndpoints => HintData(vec![ - HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), - HintGroup(vec![ - HintInfo::keys([Key::Shift], "15ยฐ Increments"), - HintInfo::keys([Key::Alt], "From Center"), - HintInfo::keys([Key::Control], "Lock Angle"), - ]), - ]), - ShapeToolFsmState::ResizingBounds => HintData(vec![ - HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), - HintGroup(vec![HintInfo::keys([Key::Alt], "From Pivot"), HintInfo::keys([Key::Shift], "Preserve Aspect Ratio")]), - ]), - ShapeToolFsmState::RotatingBounds => HintData(vec![ - HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), - HintGroup(vec![HintInfo::keys([Key::Shift], "15ยฐ Increments")]), - ]), - ShapeToolFsmState::SkewingBounds { .. } => HintData(vec![ - HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), - HintGroup(vec![HintInfo::keys([Key::Control], "Unlock Slide")]), - ]), - ShapeToolFsmState::ModifyingGizmo => HintData(vec![HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()])]), - }; - - responses.add(FrontendMessage::UpdateInputHints { hint_data }); + fn update_hints(&self, _responses: &mut VecDeque) { + // Moved logic to update_dynamic_hints } fn update_cursor(&self, responses: &mut VecDeque) { responses.add(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }); } } + +fn update_dynamic_hints(state: &ShapeToolFsmState, responses: &mut VecDeque, tool_data: &ShapeToolData) { + let hint_data = match state { + ShapeToolFsmState::Ready(_) => { + let hint_groups = match tool_data.current_shape { + ShapeType::Polygon | ShapeType::Star => vec![ + HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Draw Polygon"), + HintInfo::keys([Key::Shift], "Constrain Regular").prepend_plus(), + HintInfo::keys([Key::Alt], "From Center").prepend_plus(), + ]), + HintGroup(vec![HintInfo::multi_keys([[Key::BracketLeft], [Key::BracketRight]], "Decrease/Increase Sides")]), + ], + ShapeType::Ellipse => vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Draw Ellipse"), + HintInfo::keys([Key::Shift], "Constrain Circular").prepend_plus(), + HintInfo::keys([Key::Alt], "From Center").prepend_plus(), + ])], + ShapeType::Line => vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Draw Line"), + HintInfo::keys([Key::Shift], "15ยฐ Increments").prepend_plus(), + HintInfo::keys([Key::Alt], "From Center").prepend_plus(), + HintInfo::keys([Key::Control], "Lock Angle").prepend_plus(), + ])], + ShapeType::Rectangle => vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Draw Rectangle"), + HintInfo::keys([Key::Shift], "Constrain Square").prepend_plus(), + HintInfo::keys([Key::Alt], "From Center").prepend_plus(), + ])], + ShapeType::Circle => vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Draw Circle"), + HintInfo::keys([Key::Alt], "From Center").prepend_plus(), + ])], + ShapeType::Arc => vec![HintGroup(vec![ + HintInfo::mouse(MouseMotion::LmbDrag, "Draw Arc"), + HintInfo::keys([Key::Shift], "Constrain Arc").prepend_plus(), + HintInfo::keys([Key::Alt], "From Center").prepend_plus(), + ])], + }; + HintData(hint_groups) + } + ShapeToolFsmState::Drawing(shape) => { + let mut common_hint_group = vec![HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()])]; + let tool_hint_group = match shape { + ShapeType::Polygon | ShapeType::Star | ShapeType::Arc => HintGroup(vec![HintInfo::keys([Key::Shift], "Constrain Regular"), HintInfo::keys([Key::Alt], "From Center")]), + ShapeType::Rectangle => HintGroup(vec![HintInfo::keys([Key::Shift], "Constrain Square"), HintInfo::keys([Key::Alt], "From Center")]), + ShapeType::Ellipse => HintGroup(vec![HintInfo::keys([Key::Shift], "Constrain Circular"), HintInfo::keys([Key::Alt], "From Center")]), + ShapeType::Line => HintGroup(vec![ + HintInfo::keys([Key::Shift], "15ยฐ Increments"), + HintInfo::keys([Key::Alt], "From Center"), + HintInfo::keys([Key::Control], "Lock Angle"), + ]), + ShapeType::Circle => HintGroup(vec![HintInfo::keys([Key::Alt], "From Center")]), + }; + + if !tool_hint_group.0.is_empty() { + common_hint_group.push(tool_hint_group); + } + + if matches!(shape, ShapeType::Polygon | ShapeType::Star) { + common_hint_group.push(HintGroup(vec![HintInfo::multi_keys([[Key::BracketLeft], [Key::BracketRight]], "Decrease/Increase Sides")])); + } + + HintData(common_hint_group) + } + ShapeToolFsmState::DraggingLineEndpoints => HintData(vec![ + HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), + HintGroup(vec![ + HintInfo::keys([Key::Shift], "15ยฐ Increments"), + HintInfo::keys([Key::Alt], "From Center"), + HintInfo::keys([Key::Control], "Lock Angle"), + ]), + ]), + ShapeToolFsmState::ResizingBounds => HintData(vec![ + HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), + HintGroup(vec![HintInfo::keys([Key::Alt], "From Pivot"), HintInfo::keys([Key::Shift], "Preserve Aspect Ratio")]), + ]), + ShapeToolFsmState::RotatingBounds => HintData(vec![ + HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), + HintGroup(vec![HintInfo::keys([Key::Shift], "15ยฐ Increments")]), + ]), + ShapeToolFsmState::SkewingBounds { .. } => HintData(vec![ + HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()]), + HintGroup(vec![HintInfo::keys([Key::Control], "Unlock Slide")]), + ]), + ShapeToolFsmState::ModifyingGizmo => HintData(vec![HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()])]), + }; + responses.add(FrontendMessage::UpdateInputHints { hint_data }); +} diff --git a/editor/src/messages/tool/tool_messages/spline_tool.rs b/editor/src/messages/tool/tool_messages/spline_tool.rs index 0a96443ee5..0de3ac6ec9 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -41,7 +41,7 @@ impl Default for SplineOptions { #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub enum SplineToolMessage { // Standard messages - Overlays(OverlayContext), + Overlays { context: OverlayContext }, CanvasTransformed, Abort, WorkingColorChanged, @@ -54,7 +54,7 @@ pub enum SplineToolMessage { PointerMove, PointerOutsideViewport, Undo, - UpdateOptions(SplineOptionsUpdate), + UpdateOptions { options: SplineOptionsUpdate }, } #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] @@ -93,7 +93,12 @@ fn create_weight_widget(line_weight: f64) -> WidgetHolder { .label("Weight") .min(0.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) - .on_update(|number_input: &NumberInput| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::LineWeight(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::LineWeight(number_input.value.unwrap()), + } + .into() + }) .widget_holder() } @@ -102,9 +107,26 @@ impl LayoutHolder for SplineTool { let mut widgets = self.options.fill.create_widgets( "Fill", true, - |_| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::FillColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::FillColorType(color_type.clone())).into()), - |color: &ColorInput| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::FillColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::FillColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, ); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); @@ -112,9 +134,26 @@ impl LayoutHolder for SplineTool { widgets.append(&mut self.options.stroke.create_widgets( "Stroke", true, - |_| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::StrokeColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::StrokeColorType(color_type.clone())).into()), - |color: &ColorInput| SplineToolMessage::UpdateOptions(SplineOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::StrokeColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::StrokeColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::StrokeColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); widgets.push(create_weight_widget(self.options.line_weight)); @@ -126,11 +165,11 @@ impl LayoutHolder for SplineTool { #[message_handler_data] impl<'a> MessageHandler> for SplineTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Spline(SplineToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Spline(SplineToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.tool_data, context, &self.options, responses, true); return; }; - match action { + match options { SplineOptionsUpdate::LineWeight(line_weight) => self.options.line_weight = line_weight, SplineOptionsUpdate::FillColor(color) => { self.options.fill.custom_color = color; @@ -179,7 +218,7 @@ impl<'a> MessageHandler> for Spli impl ToolTransition for SplineTool { fn event_to_message_map(&self) -> EventToMessageMap { EventToMessageMap { - overlay_provider: Some(|overlay_context: OverlayContext| SplineToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context: OverlayContext| SplineToolMessage::Overlays { context }.into()), canvas_transformed: Some(SplineToolMessage::CanvasTransformed.into()), tool_abort: Some(SplineToolMessage::Abort.into()), working_color_changed: Some(SplineToolMessage::WorkingColorChanged.into()), @@ -262,7 +301,7 @@ impl Fsm for SplineToolFsmState { let ToolMessage::Spline(event) = event else { return self }; match (self, event) { (_, SplineToolMessage::CanvasTransformed) => self, - (_, SplineToolMessage::Overlays(mut overlay_context)) => { + (_, SplineToolMessage::Overlays { context: mut overlay_context }) => { path_endpoint_overlays(document, shape_editor, &mut overlay_context, preferences); tool_data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context); self @@ -360,8 +399,6 @@ impl Fsm for SplineToolFsmState { tool_options.stroke.apply_stroke(tool_data.weight, layer, responses); tool_data.current_layer = Some(layer); - responses.add(Message::StartBuffer); - SplineToolFsmState::Drawing } (SplineToolFsmState::Drawing, SplineToolMessage::DragStop) => { @@ -442,10 +479,9 @@ impl Fsm for SplineToolFsmState { SplineToolFsmState::Ready } (_, SplineToolMessage::WorkingColorChanged) => { - responses.add(SplineToolMessage::UpdateOptions(SplineOptionsUpdate::WorkingColors( - Some(global_tool_data.primary_color), - Some(global_tool_data.secondary_color), - ))); + responses.add(SplineToolMessage::UpdateOptions { + options: SplineOptionsUpdate::WorkingColors(Some(global_tool_data.primary_color), Some(global_tool_data.secondary_color)), + }); self } _ => self, @@ -550,15 +586,15 @@ mod test_spline_tool { use crate::test_utils::test_prelude::*; use glam::DAffine2; use graphene_std::vector::PointId; - use graphene_std::vector::VectorData; + use graphene_std::vector::Vector; - fn assert_point_positions(vector_data: &VectorData, layer_to_viewport: DAffine2, expected_points: &[DVec2], epsilon: f64) { - let points_in_viewport: Vec = vector_data + fn assert_point_positions(vector: &Vector, layer_to_viewport: DAffine2, expected_points: &[DVec2], epsilon: f64) { + let points_in_viewport: Vec = vector .point_domain .ids() .iter() .filter_map(|&point_id| { - let position = vector_data.point_domain.position_from_id(point_id)?; + let position = vector.point_domain.position_from_id(point_id)?; Some(layer_to_viewport.transform_point2(position)) }) .collect(); @@ -570,11 +606,7 @@ mod test_spline_tool { assert!( distance < epsilon, - "Point {} position mismatch: expected {:?}, got {:?} (distance: {})", - i, - expected_point, - actual_point, - distance + "Point {i} position mismatch: expected {expected_point:?}, got {actual_point:?} (distance: {distance})" ); } } @@ -603,19 +635,19 @@ mod test_spline_tool { let first_spline_node = find_spline(document, spline_layer).expect("Spline node not found in the layer"); - let first_vector_data = document.network_interface.compute_modified_vector(spline_layer).expect("Vector data not found for the spline layer"); + let first_vector = document.network_interface.compute_modified_vector(spline_layer).expect("Vector not found for the spline layer"); // Verify initial spline has correct number of points and segments - let initial_point_count = first_vector_data.point_domain.ids().len(); - let initial_segment_count = first_vector_data.segment_domain.ids().len(); - assert_eq!(initial_point_count, 3, "Expected 3 points in initial spline, found {}", initial_point_count); - assert_eq!(initial_segment_count, 2, "Expected 2 segments in initial spline, found {}", initial_segment_count); + let initial_point_count = first_vector.point_domain.ids().len(); + let initial_segment_count = first_vector.segment_domain.ids().len(); + assert_eq!(initial_point_count, 3, "Expected 3 points in initial spline, found {initial_point_count}"); + assert_eq!(initial_segment_count, 2, "Expected 2 segments in initial spline, found {initial_segment_count}"); let layer_to_viewport = document.metadata().transform_to_viewport(spline_layer); - let endpoints: Vec<(PointId, DVec2)> = first_vector_data + let endpoints: Vec<(PointId, DVec2)> = first_vector .extendable_points(false) - .filter_map(|point_id| first_vector_data.point_domain.position_from_id(point_id).map(|pos| (point_id, layer_to_viewport.transform_point2(pos)))) + .filter_map(|point_id| first_vector.point_domain.position_from_id(point_id).map(|pos| (point_id, layer_to_viewport.transform_point2(pos)))) .collect(); assert_eq!(endpoints.len(), 2, "Expected 2 endpoints in the initial spline"); @@ -634,17 +666,17 @@ mod test_spline_tool { editor.press(Key::Enter, ModifierKeys::empty()).await; let document = editor.active_document(); - let extended_vector_data = document + let extended_vector = document .network_interface .compute_modified_vector(spline_layer) - .expect("Vector data not found for the extended spline layer"); + .expect("Vector not found for the extended spline layer"); // Verify extended spline has correct number of points and segments - let extended_point_count = extended_vector_data.point_domain.ids().len(); - let extended_segment_count = extended_vector_data.segment_domain.ids().len(); + let extended_point_count = extended_vector.point_domain.ids().len(); + let extended_segment_count = extended_vector.segment_domain.ids().len(); - assert_eq!(extended_point_count, 5, "Expected 5 points in extended spline, found {}", extended_point_count); - assert_eq!(extended_segment_count, 4, "Expected 4 segments in extended spline, found {}", extended_segment_count); + assert_eq!(extended_point_count, 5, "Expected 5 points in extended spline, found {extended_point_count}"); + assert_eq!(extended_segment_count, 4, "Expected 4 segments in extended spline, found {extended_segment_count}"); // Verify the spline node is still the same let extended_spline_node = find_spline(document, spline_layer).expect("Spline node not found after extension"); @@ -655,7 +687,7 @@ mod test_spline_tool { let all_expected_points = [initial_points[0], initial_points[1], initial_points[2], continuation_points[0], continuation_points[1]]; - assert_point_positions(&extended_vector_data, layer_to_viewport, &all_expected_points, 1e-10); + assert_point_positions(&extended_vector, layer_to_viewport, &all_expected_points, 1e-10); } #[tokio::test] @@ -679,7 +711,7 @@ mod test_spline_tool { // Evaluate the graph to ensure everything is processed if let Err(e) = editor.eval_graph().await { - panic!("Graph evaluation failed: {}", e); + panic!("Graph evaluation failed: {e}"); } // Get the layer and vector data @@ -690,14 +722,14 @@ mod test_spline_tool { .selected_visible_and_unlocked_layers(network_interface) .next() .expect("Should have a selected layer"); - let vector_data = network_interface.compute_modified_vector(layer).expect("Should have vector data"); + let vector = network_interface.compute_modified_vector(layer).expect("Should have vector data"); let layer_to_viewport = document.metadata().transform_to_viewport(layer); // Expected points in viewport coordinates let expected_points = vec![DVec2::new(50., 50.), DVec2::new(100., 50.), DVec2::new(150., 100.)]; // Assert all points are correctly positioned - assert_point_positions(&vector_data, layer_to_viewport, &expected_points, 1e-10); + assert_point_positions(&vector, layer_to_viewport, &expected_points, 1e-10); } #[tokio::test] @@ -719,7 +751,7 @@ mod test_spline_tool { // Evaluating the graph to ensure everything is processed if let Err(e) = editor.eval_graph().await { - panic!("Graph evaluation failed: {}", e); + panic!("Graph evaluation failed: {e}"); } // Get the layer and vector data @@ -730,14 +762,14 @@ mod test_spline_tool { .selected_visible_and_unlocked_layers(network_interface) .next() .expect("Should have a selected layer"); - let vector_data = network_interface.compute_modified_vector(layer).expect("Should have vector data"); + let vector = network_interface.compute_modified_vector(layer).expect("Should have vector data"); let layer_to_viewport = document.metadata().transform_to_viewport(layer); // Expected points in viewport coordinates let expected_points = vec![DVec2::new(50., 50.), DVec2::new(100., 50.), DVec2::new(150., 100.)]; // Assert all points are correctly positioned - assert_point_positions(&vector_data, layer_to_viewport, &expected_points, 1e-10); + assert_point_positions(&vector, layer_to_viewport, &expected_points, 1e-10); } #[tokio::test] @@ -757,7 +789,7 @@ mod test_spline_tool { // Evaluating the graph to ensure everything is processed if let Err(e) = editor.eval_graph().await { - panic!("Graph evaluation failed: {}", e); + panic!("Graph evaluation failed: {e}"); } // Get the layer and vector data @@ -768,14 +800,14 @@ mod test_spline_tool { .selected_visible_and_unlocked_layers(network_interface) .next() .expect("Should have a selected layer"); - let vector_data = network_interface.compute_modified_vector(layer).expect("Should have vector data"); + let vector = network_interface.compute_modified_vector(layer).expect("Should have vector data"); let layer_to_viewport = document.metadata().transform_to_viewport(layer); // Expected points in viewport coordinates let expected_points = vec![DVec2::new(50., 50.), DVec2::new(100., 50.), DVec2::new(150., 100.)]; // Assert all points are correctly positioned - assert_point_positions(&vector_data, layer_to_viewport, &expected_points, 1e-10); + assert_point_positions(&vector, layer_to_viewport, &expected_points, 1e-10); } #[tokio::test] @@ -796,7 +828,7 @@ mod test_spline_tool { editor.handle_message(SplineToolMessage::Confirm).await; if let Err(e) = editor.eval_graph().await { - panic!("Graph evaluation failed: {}", e); + panic!("Graph evaluation failed: {e}"); } // Get the layer and vector data @@ -807,14 +839,14 @@ mod test_spline_tool { .selected_visible_and_unlocked_layers(network_interface) .next() .expect("Should have a selected layer"); - let vector_data = network_interface.compute_modified_vector(layer).expect("Should have vector data"); + let vector = network_interface.compute_modified_vector(layer).expect("Should have vector data"); let layer_to_viewport = document.metadata().transform_to_viewport(layer); // Expected points in viewport coordinates let expected_points = vec![DVec2::new(50., 50.), DVec2::new(100., 50.), DVec2::new(150., 100.)]; // Assert all points are correctly positioned - assert_point_positions(&vector_data, layer_to_viewport, &expected_points, 1e-10); + assert_point_positions(&vector, layer_to_viewport, &expected_points, 1e-10); } #[tokio::test] @@ -847,17 +879,17 @@ mod test_spline_tool { let spline_layer = layers.next().expect("Failed to find the spline layer"); assert!(find_spline(document, spline_layer).is_some(), "Spline node not found in the layer"); - let vector_data = document.network_interface.compute_modified_vector(spline_layer).expect("Vector data not found for the spline layer"); + let vector = document.network_interface.compute_modified_vector(spline_layer).expect("Vector not found for the spline layer"); // Verify we have the correct number of points and segments - let point_count = vector_data.point_domain.ids().len(); - let segment_count = vector_data.segment_domain.ids().len(); + let point_count = vector.point_domain.ids().len(); + let segment_count = vector.segment_domain.ids().len(); - assert_eq!(point_count, 3, "Expected 3 points in the spline, found {}", point_count); - assert_eq!(segment_count, 2, "Expected 2 segments in the spline, found {}", segment_count); + assert_eq!(point_count, 3, "Expected 3 points in the spline, found {point_count}"); + assert_eq!(segment_count, 2, "Expected 2 segments in the spline, found {segment_count}"); let layer_to_viewport = document.metadata().transform_to_viewport(spline_layer); - assert_point_positions(&vector_data, layer_to_viewport, &spline_points, 1e-10); + assert_point_positions(&vector, layer_to_viewport, &spline_points, 1e-10); } } diff --git a/editor/src/messages/tool/tool_messages/text_tool.rs b/editor/src/messages/tool/tool_messages/text_tool.rs index 0653bb83d8..3187c98ee1 100644 --- a/editor/src/messages/tool/tool_messages/text_tool.rs +++ b/editor/src/messages/tool/tool_messages/text_tool.rs @@ -17,7 +17,7 @@ use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; use graphene_std::Color; use graphene_std::renderer::Quad; -use graphene_std::text::{Font, FontCache, TypesettingConfig, lines_clipping, load_font}; +use graphene_std::text::{Font, FontCache, TextAlign, TypesettingConfig, lines_clipping, load_font}; use graphene_std::vector::style::Fill; #[derive(Default, ExtractField)] @@ -35,6 +35,7 @@ pub struct TextOptions { font_style: String, fill: ToolColorOptions, tilt: f64, + align: TextAlign, } impl Default for TextOptions { @@ -47,6 +48,7 @@ impl Default for TextOptions { font_style: graphene_std::consts::DEFAULT_FONT_STYLE.into(), fill: ToolColorOptions::new_primary(), tilt: 0., + align: TextAlign::default(), } } } @@ -57,7 +59,7 @@ pub enum TextToolMessage { // Standard messages Abort, WorkingColorChanged, - Overlays(OverlayContext), + Overlays { context: OverlayContext }, // Tool-specific messages DragStart, @@ -68,7 +70,7 @@ pub enum TextToolMessage { PointerOutsideViewport { center: Key, lock_ratio: Key }, TextChange { new_text: String, is_left_or_right_click: bool }, UpdateBounds { new_text: String }, - UpdateOptions(TextOptionsUpdate), + UpdateOptions { options: TextOptionsUpdate }, } #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] @@ -78,7 +80,7 @@ pub enum TextOptionsUpdate { Font { family: String, style: String }, FontSize(f64), LineHeightRatio(f64), - CharacterSpacing(f64), + Align(TextAlign), WorkingColors(Option, Option), } @@ -98,20 +100,24 @@ fn create_text_widgets(tool: &TextTool) -> Vec { let font = FontInput::new(&tool.options.font_name, &tool.options.font_style) .is_style_picker(false) .on_update(|font_input: &FontInput| { - TextToolMessage::UpdateOptions(TextOptionsUpdate::Font { - family: font_input.font_family.clone(), - style: font_input.font_style.clone(), - }) + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::Font { + family: font_input.font_family.clone(), + style: font_input.font_style.clone(), + }, + } .into() }) .widget_holder(); let style = FontInput::new(&tool.options.font_name, &tool.options.font_style) .is_style_picker(true) .on_update(|font_input: &FontInput| { - TextToolMessage::UpdateOptions(TextOptionsUpdate::Font { - family: font_input.font_family.clone(), - style: font_input.font_style.clone(), - }) + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::Font { + family: font_input.font_family.clone(), + style: font_input.font_style.clone(), + }, + } .into() }) .widget_holder(); @@ -121,7 +127,12 @@ fn create_text_widgets(tool: &TextTool) -> Vec { .int() .min(1.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) - .on_update(|number_input: &NumberInput| TextToolMessage::UpdateOptions(TextOptionsUpdate::FontSize(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::FontSize(number_input.value.unwrap()), + } + .into() + }) .widget_holder(); let line_height_ratio = NumberInput::new(Some(tool.options.line_height_ratio)) .label("Line Height") @@ -129,16 +140,25 @@ fn create_text_widgets(tool: &TextTool) -> Vec { .min(0.) .max((1_u64 << f64::MANTISSA_DIGITS) as f64) .step(0.1) - .on_update(|number_input: &NumberInput| TextToolMessage::UpdateOptions(TextOptionsUpdate::LineHeightRatio(number_input.value.unwrap())).into()) - .widget_holder(); - let character_spacing = NumberInput::new(Some(tool.options.character_spacing)) - .label("Char. Spacing") - .int() - .min(0.) - .max((1_u64 << f64::MANTISSA_DIGITS) as f64) - .step(0.1) - .on_update(|number_input: &NumberInput| TextToolMessage::UpdateOptions(TextOptionsUpdate::CharacterSpacing(number_input.value.unwrap())).into()) + .on_update(|number_input: &NumberInput| { + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::LineHeightRatio(number_input.value.unwrap()), + } + .into() + }) .widget_holder(); + let align_entries: Vec<_> = [TextAlign::Left, TextAlign::Center, TextAlign::Right, TextAlign::JustifyLeft] + .into_iter() + .map(|align| { + RadioEntryData::new(format!("{align:?}")).label(align.to_string()).on_update(move |_| { + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::Align(align), + } + .into() + }) + }) + .collect(); + let align = RadioInput::new(align_entries).selected_index(Some(tool.options.align as u32)).widget_holder(); vec![ font, Separator::new(SeparatorType::Related).widget_holder(), @@ -148,7 +168,7 @@ fn create_text_widgets(tool: &TextTool) -> Vec { Separator::new(SeparatorType::Related).widget_holder(), line_height_ratio, Separator::new(SeparatorType::Related).widget_holder(), - character_spacing, + align, ] } @@ -161,9 +181,26 @@ impl LayoutHolder for TextTool { widgets.append(&mut self.options.fill.create_widgets( "Fill", true, - |_| TextToolMessage::UpdateOptions(TextOptionsUpdate::FillColor(None)).into(), - |color_type: ToolColorType| WidgetCallback::new(move |_| TextToolMessage::UpdateOptions(TextOptionsUpdate::FillColorType(color_type.clone())).into()), - |color: &ColorInput| TextToolMessage::UpdateOptions(TextOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb()))).into(), + |_| { + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::FillColor(None), + } + .into() + }, + |color_type: ToolColorType| { + WidgetCallback::new(move |_| { + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::FillColorType(color_type.clone()), + } + .into() + }) + }, + |color: &ColorInput| { + TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::FillColor(color.value.as_solid().map(|color| color.to_linear_srgb())), + } + .into() + }, )); Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Row { widgets }])) @@ -173,11 +210,11 @@ impl LayoutHolder for TextTool { #[message_handler_data] impl<'a> MessageHandler> for TextTool { fn process_message(&mut self, message: ToolMessage, responses: &mut VecDeque, context: &mut ToolActionMessageContext<'a>) { - let ToolMessage::Text(TextToolMessage::UpdateOptions(action)) = message else { + let ToolMessage::Text(TextToolMessage::UpdateOptions { options }) = message else { self.fsm_state.process_event(message, &mut self.tool_data, context, &self.options, responses, true); return; }; - match action { + match options { TextOptionsUpdate::Font { family, style } => { self.options.font_name = family; self.options.font_style = style; @@ -186,7 +223,7 @@ impl<'a> MessageHandler> for Text } TextOptionsUpdate::FontSize(font_size) => self.options.font_size = font_size, TextOptionsUpdate::LineHeightRatio(line_height_ratio) => self.options.line_height_ratio = line_height_ratio, - TextOptionsUpdate::CharacterSpacing(character_spacing) => self.options.character_spacing = character_spacing, + TextOptionsUpdate::Align(align) => self.options.align = align, TextOptionsUpdate::FillColor(color) => { self.options.fill.custom_color = color; self.options.fill.color_type = ToolColorType::Custom; @@ -234,7 +271,7 @@ impl ToolTransition for TextTool { canvas_transformed: None, tool_abort: Some(TextToolMessage::Abort.into()), working_color_changed: Some(TextToolMessage::WorkingColorChanged.into()), - overlay_provider: Some(|overlay_context| TextToolMessage::Overlays(overlay_context).into()), + overlay_provider: Some(|context| TextToolMessage::Overlays { context }.into()), ..Default::default() } } @@ -314,6 +351,7 @@ impl TextToolData { transform: editing_text.transform.to_cols_array(), max_width: editing_text.typesetting.max_width, max_height: editing_text.typesetting.max_height, + align: editing_text.typesetting.align, }); } else { // Check if DisplayRemoveEditableTextbox is already in the responses queue @@ -381,7 +419,6 @@ impl TextToolData { parent: document.new_layer_parent(true), insert_index: 0, }); - responses.add(Message::StartBuffer); responses.add(GraphOperationMessage::FillSet { layer: self.layer, fill: if editing_text.color.is_some() { @@ -471,7 +508,7 @@ impl Fsm for TextToolFsmState { let ToolMessage::Text(event) = event else { return self }; match (self, event) { - (TextToolFsmState::Editing, TextToolMessage::Overlays(mut overlay_context)) => { + (TextToolFsmState::Editing, TextToolMessage::Overlays { context: mut overlay_context }) => { responses.add(FrontendMessage::DisplayEditableTextboxTransform { transform: document.metadata().transform_to_viewport(tool_data.layer).to_cols_array(), }); @@ -487,7 +524,7 @@ impl Fsm for TextToolFsmState { TextToolFsmState::Editing } - (_, TextToolMessage::Overlays(mut overlay_context)) => { + (_, TextToolMessage::Overlays { context: mut overlay_context }) => { if matches!(self, Self::Placing) { // Get the updated selection box bounds let quad = Quad::from_box(tool_data.cached_resize_bounds); @@ -792,6 +829,7 @@ impl Fsm for TextToolFsmState { character_spacing: tool_options.character_spacing, max_height: constraint_size.map(|size| size.y), tilt: tool_options.tilt, + align: tool_options.align, }, font: Font::new(tool_options.font_name.clone(), tool_options.font_style.clone()), color: tool_options.fill.active_color(), @@ -848,10 +886,9 @@ impl Fsm for TextToolFsmState { TextToolFsmState::Editing } (_, TextToolMessage::WorkingColorChanged) => { - responses.add(TextToolMessage::UpdateOptions(TextOptionsUpdate::WorkingColors( - Some(global_tool_data.primary_color), - Some(global_tool_data.secondary_color), - ))); + responses.add(TextToolMessage::UpdateOptions { + options: TextOptionsUpdate::WorkingColors(Some(global_tool_data.primary_color), Some(global_tool_data.secondary_color)), + }); self } (TextToolFsmState::Editing, TextToolMessage::Abort) => { diff --git a/editor/src/messages/tool/transform_layer/transform_layer_message.rs b/editor/src/messages/tool/transform_layer/transform_layer_message.rs index c819260e58..4922db713a 100644 --- a/editor/src/messages/tool/transform_layer/transform_layer_message.rs +++ b/editor/src/messages/tool/transform_layer/transform_layer_message.rs @@ -8,10 +8,8 @@ use glam::DVec2; #[impl_message(Message, ToolMessage, TransformLayer)] #[derive(PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)] pub enum TransformLayerMessage { - // Overlays - Overlays(OverlayContext), - // Messages + Overlays { context: OverlayContext }, ApplyTransformOperation { final_transform: bool }, BeginTransformOperation { operation: TransformType }, BeginGrab, diff --git a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs index 203c84646f..e971c3f316 100644 --- a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs +++ b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs @@ -11,12 +11,12 @@ use crate::messages::tool::tool_messages::tool_prelude::Key; use crate::messages::tool::utility_types::{ToolData, ToolType}; use glam::{DAffine2, DVec2}; use graphene_std::renderer::Quad; -use graphene_std::vector::ManipulatorPointId; use graphene_std::vector::click_target::ClickTargetType; -use graphene_std::vector::{VectorData, VectorModificationType}; +use graphene_std::vector::misc::ManipulatorPointId; +use graphene_std::vector::{Vector, VectorModificationType}; use std::f64::consts::{PI, TAU}; -const TRANSFORM_GRS_OVERLAY_PROVIDER: OverlayProvider = |context| TransformLayerMessage::Overlays(context).into(); +const TRANSFORM_GRS_OVERLAY_PROVIDER: OverlayProvider = |context| TransformLayerMessage::Overlays { context }.into(); // TODO: Get these from the input mapper const SLOW_KEY: Key = Key::Shift; @@ -65,8 +65,11 @@ pub struct TransformLayerMessageHandler { // Ghost outlines for Path Tool ghost_outline: Vec<(Vec, DAffine2)>, + + was_grabbing: bool, } +#[message_handler_data] impl MessageHandler> for TransformLayerMessageHandler { fn process_message(&mut self, message: TransformLayerMessage, responses: &mut VecDeque, context: TransformLayerMessageContext) { let TransformLayerMessageContext { @@ -122,15 +125,15 @@ impl MessageHandler> for self.local_pivot = document.metadata().document_to_viewport.inverse().transform_point2(*selected.pivot); self.grab_target = self.local_pivot; } - // Here vector data from all layers is not considered which can be a problem in pivot calculation - else if let Some(vector_data) = selected_layers.first().and_then(|&layer| document.network_interface.compute_modified_vector(layer)) { + // TODO: Here vector data from all layers is not considered which can be a problem in pivot calculation + else if let Some(vector) = selected_layers.first().and_then(|&layer| document.network_interface.compute_modified_vector(layer)) { *selected.original_transforms = OriginalTransforms::default(); let viewspace = document.metadata().transform_to_viewport(selected_layers[0]); let selected_segments = shape_editor.selected_segments().collect::>(); let mut affected_points = shape_editor.selected_points().copied().collect::>(); - for (segment_id, _, start, end) in vector_data.segment_bezier_iter() { + for (segment_id, _, start, end) in vector.segment_bezier_iter() { if selected_segments.contains(&segment_id) { affected_points.push(ManipulatorPointId::Anchor(start)); affected_points.push(ManipulatorPointId::Anchor(end)); @@ -139,11 +142,11 @@ impl MessageHandler> for let affected_point_refs = affected_points.iter().collect(); - let get_location = |point: &&ManipulatorPointId| point.get_position(&vector_data).map(|position| viewspace.transform_point2(position)); + let get_location = |point: &&ManipulatorPointId| point.get_position(&vector).map(|position| viewspace.transform_point2(position)); if let (Some((new_pivot, grab_target)), bounds) = calculate_pivot( document, &affected_point_refs, - &vector_data, + &vector, viewspace, |point: &ManipulatorPointId| get_location(&point), &mut self.pivot_gizmo, @@ -170,7 +173,7 @@ impl MessageHandler> for match message { // Overlays - TransformLayerMessage::Overlays(mut overlay_context) => { + TransformLayerMessage::Overlays { context: mut overlay_context } => { if !overlay_context.visibility_settings.transform_measurement() { return; } @@ -186,7 +189,7 @@ impl MessageHandler> for let format_rounded = |value: f64, precision: usize| { if self.typing.digits.is_empty() || !self.transform_operation.can_begin_typing() { - format!("{:.*}", precision, value).trim_end_matches('0').trim_end_matches('.').to_string() + format!("{value:.precision$}").trim_end_matches('0').trim_end_matches('.').to_string() } else { self.typing.string.clone() } @@ -301,7 +304,10 @@ impl MessageHandler> for responses.add(SelectToolMessage::PivotShift { offset: None, flush: true }); if final_transform { - responses.add(OverlaysMessage::RemoveProvider(TRANSFORM_GRS_OVERLAY_PROVIDER)); + self.was_grabbing = false; + responses.add(OverlaysMessage::RemoveProvider { + provider: TRANSFORM_GRS_OVERLAY_PROVIDER, + }); } } TransformLayerMessage::BeginTransformOperation { operation } => { @@ -340,7 +346,9 @@ impl MessageHandler> for _ => unreachable!(), // Safe because the match arms are exhaustive }; - responses.add(OverlaysMessage::AddProvider(TRANSFORM_GRS_OVERLAY_PROVIDER)); + responses.add(OverlaysMessage::AddProvider { + provider: TRANSFORM_GRS_OVERLAY_PROVIDER, + }); // Find a way better than this hack responses.add(TransformLayerMessage::PointerMove { slow_key: SLOW_KEY, @@ -356,34 +364,64 @@ impl MessageHandler> for if (selected_points.is_empty() && selected_segments.is_empty()) || (!using_path_tool && !using_select_tool && !using_pen_tool && !using_shape_tool) || selected_layers.is_empty() - || transform_type.equivalent_to(self.transform_operation) + || (transform_type.equivalent_to(self.transform_operation) && !self.was_grabbing) { return; } + + if using_path_tool && transform_type == TransformType::Grab { + // Check if a single point is selected and it's a colinear point + let single_anchor_selected = shape_editor.selected_points().count() == 1 && shape_editor.selected_points().any(|point| point.as_anchor().is_some()); + + if single_anchor_selected && transform_type.equivalent_to(self.transform_operation) && self.was_grabbing { + let selected_nodes = &document.network_interface.selected_nodes(); + + let Some(layer) = selected_nodes.selected_layers(document.metadata()).next() else { return }; + let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { return }; + let Some(anchor) = shape_editor.selected_points().next() else { return }; + + if vector_data.colinear(*anchor) { + responses.add(TransformLayerMessage::CancelTransformOperation); + + // Start sliding point + responses.add(DeferMessage::AfterGraphRun { + messages: vec![PathToolMessage::StartSlidingPoint.into()], + }); + } + + return; + } + + if transform_type.equivalent_to(self.transform_operation) { + return; + } + + self.was_grabbing = true; + } } - if let Some(vector_data) = selected_layers.first().and_then(|&layer| document.network_interface.compute_modified_vector(layer)) { - if let [point] = selected_points.as_slice() { - if matches!(point, ManipulatorPointId::Anchor(_)) { - if let Some([handle1, handle2]) = point.get_handle_pair(&vector_data) { - let handle1_length = handle1.length(&vector_data); - let handle2_length = handle2.length(&vector_data); + if let Some(vector) = selected_layers.first().and_then(|&layer| document.network_interface.compute_modified_vector(layer)) + && let [point] = selected_points.as_slice() + { + if matches!(point, ManipulatorPointId::Anchor(_)) { + if let Some([handle1, handle2]) = point.get_handle_pair(&vector) { + let handle1_length = handle1.length(&vector); + let handle2_length = handle2.length(&vector); - if (handle1_length == 0. && handle2_length == 0. && !using_select_tool) || (handle1_length == f64::MAX && handle2_length == f64::MAX && !using_select_tool) { - // G should work for this point but not R and S - if matches!(transform_type, TransformType::Rotate | TransformType::Scale) { - selected.original_transforms.clear(); - return; - } + if (handle1_length == 0. && handle2_length == 0. && !using_select_tool) || (handle1_length == f64::MAX && handle2_length == f64::MAX && !using_select_tool) { + // G should work for this point but not R and S + if matches!(transform_type, TransformType::Rotate | TransformType::Scale) { + selected.original_transforms.clear(); + return; } } - } else { - let handle_length = point.as_handle().map(|handle| handle.length(&vector_data)); + } + } else { + let handle_length = point.as_handle().map(|handle| handle.length(&vector)); - if handle_length == Some(0.) { - selected.original_transforms.clear(); - return; - } + if handle_length == Some(0.) { + selected.original_transforms.clear(); + return; } } } @@ -395,7 +433,9 @@ impl MessageHandler> for if chain_operation { responses.add(TransformLayerMessage::ApplyTransformOperation { final_transform: false }); } else { - responses.add(OverlaysMessage::AddProvider(TRANSFORM_GRS_OVERLAY_PROVIDER)); + responses.add(OverlaysMessage::AddProvider { + provider: TRANSFORM_GRS_OVERLAY_PROVIDER, + }); } responses.add(TransformLayerMessage::BeginTransformOperation { operation: transform_type }); responses.add(TransformLayerMessage::PointerMove { @@ -409,6 +449,7 @@ impl MessageHandler> for TransformLayerMessage::CancelTransformOperation => { if using_path_tool { self.ghost_outline.clear(); + self.was_grabbing = false; } if using_pen_tool { @@ -431,7 +472,9 @@ impl MessageHandler> for } responses.add(SelectToolMessage::PivotShift { offset: None, flush: false }); - responses.add(OverlaysMessage::RemoveProvider(TRANSFORM_GRS_OVERLAY_PROVIDER)); + responses.add(OverlaysMessage::RemoveProvider { + provider: TRANSFORM_GRS_OVERLAY_PROVIDER, + }); } TransformLayerMessage::ConstrainX => { let pivot = document_to_viewport.transform_point2(self.local_pivot); @@ -499,7 +542,7 @@ impl MessageHandler> for if self.typing.digits.is_empty() || !self.transform_operation.can_begin_typing() { match self.transform_operation { - TransformOperation::None => unreachable!(), + TransformOperation::None => {} TransformOperation::Grabbing(translation) => { let delta_pos = input.mouse.position - self.mouse_position; let delta_pos = (self.initial_transform * document_to_viewport.inverse()).transform_vector2(delta_pos); @@ -693,7 +736,7 @@ impl TransformLayerMessageHandler { fn calculate_pivot( document: &DocumentMessageHandler, selected_points: &Vec<&ManipulatorPointId>, - vector_data: &VectorData, + vector: &Vector, viewspace: DAffine2, get_location: impl Fn(&ManipulatorPointId) -> Option, gizmo: &mut PivotGizmo, @@ -736,8 +779,8 @@ fn calculate_pivot( ManipulatorPointId::PrimaryHandle(_) | ManipulatorPointId::EndHandle(_) => { // Get the anchor position and transform it to the pivot let (Some(pivot_position), Some(position)) = ( - point.get_anchor_position(vector_data).map(|anchor_position| viewspace.transform_point2(anchor_position)), - point.get_position(vector_data), + point.get_anchor_position(vector).map(|anchor_position| viewspace.transform_point2(anchor_position)), + point.get_position(vector), ) else { return (None, None); }; @@ -774,15 +817,15 @@ fn project_edge_to_quad(edge: DVec2, quad: &Quad, local: bool, axis_constraint: fn update_colinear_handles(selected_layers: &[LayerNodeIdentifier], document: &DocumentMessageHandler, responses: &mut VecDeque) { for &layer in selected_layers { - let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue }; + let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; - for [handle1, handle2] in &vector_data.colinear_manipulators { + for [handle1, handle2] in &vector.colinear_manipulators { let manipulator1 = handle1.to_manipulator_point(); let manipulator2 = handle2.to_manipulator_point(); - let Some(anchor) = manipulator1.get_anchor_position(&vector_data) else { continue }; - let Some(pos1) = manipulator1.get_position(&vector_data).map(|pos| pos - anchor) else { continue }; - let Some(pos2) = manipulator2.get_position(&vector_data).map(|pos| pos - anchor) else { continue }; + let Some(anchor) = manipulator1.get_anchor_position(&vector) else { continue }; + let Some(pos1) = manipulator1.get_position(&vector).map(|pos| pos - anchor) else { continue }; + let Some(pos2) = manipulator2.get_position(&vector).map(|pos| pos - anchor) else { continue }; let angle = pos1.angle_to(pos2); @@ -849,7 +892,7 @@ mod test_transform_layer { let final_transform = get_layer_transform(&mut editor, layer).await.unwrap(); let translation_diff = (final_transform.translation - original_transform.translation).length(); - assert!(translation_diff > 10., "Transform should have changed after applying transformation. Diff: {}", translation_diff); + assert!(translation_diff > 10., "Transform should have changed after applying transformation. Diff: {translation_diff}"); } #[tokio::test] @@ -884,9 +927,7 @@ mod test_transform_layer { // Verify transform is either restored to original OR reset to identity assert!( (final_translation - original_translation).length() < 5. || final_translation.length() < 0.001, - "Transform neither restored to original nor reset to identity. Original: {:?}, Final: {:?}", - original_translation, - final_translation + "Transform neither restored to original nor reset to identity. Original: {original_translation:?}, Final: {final_translation:?}" ); } @@ -915,11 +956,11 @@ mod test_transform_layer { editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await; let final_transform = get_layer_transform(&mut editor, layer).await.unwrap(); - println!("Final transform: {:?}", final_transform); + println!("Final transform: {final_transform:?}"); // Check matrix components have changed (rotation affects matrix2) let matrix_diff = (final_transform.matrix2.x_axis - original_transform.matrix2.x_axis).length(); - assert!(matrix_diff > 0.1, "Rotation should have changed the transform matrix. Diff: {}", matrix_diff); + assert!(matrix_diff > 0.1, "Rotation should have changed the transform matrix. Diff: {matrix_diff}"); } #[tokio::test] @@ -941,7 +982,7 @@ mod test_transform_layer { assert!(!after_cancel.translation.y.is_nan(), "Transform is NaN after cancel"); let translation_diff = (after_cancel.translation - original_transform.translation).length(); - assert!(translation_diff < 1., "Translation component changed too much: {}", translation_diff); + assert!(translation_diff < 1., "Translation component changed too much: {translation_diff}"); } #[tokio::test] @@ -976,9 +1017,7 @@ mod test_transform_layer { assert!( scale_diff_x > 0.1 || scale_diff_y > 0.1, - "Scaling should have changed the transform matrix. Diffs: x={}, y={}", - scale_diff_x, - scale_diff_y + "Scaling should have changed the transform matrix. Diffs: x={scale_diff_x}, y={scale_diff_y}" ); } @@ -1007,7 +1046,7 @@ mod test_transform_layer { // Also check translation component is similar let translation_diff = (after_cancel.translation - original_transform.translation).length(); - assert!(translation_diff < 1., "Translation component changed too much: {}", translation_diff); + assert!(translation_diff < 1., "Translation component changed too much: {translation_diff}"); } #[tokio::test] @@ -1034,9 +1073,7 @@ mod test_transform_layer { let actual_translation = after_grab_transform.translation - original_transform.translation; assert!( (actual_translation - expected_translation).length() < 1e-5, - "Expected translation of {:?}, got {:?}", - expected_translation, - actual_translation + "Expected translation of {expected_translation:?}, got {actual_translation:?}" ); // 2. Chain to rotation - from current position to create ~45 degree rotation @@ -1072,9 +1109,7 @@ mod test_transform_layer { let after_scale_det = after_scale_transform.matrix2.determinant(); assert!( after_scale_det >= 2. * before_scale_det, - "Scale should increase the determinant of the matrix (before: {}, after: {})", - before_scale_det, - after_scale_det + "Scale should increase the determinant of the matrix (before: {before_scale_det}, after: {after_scale_det})" ); editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await; @@ -1106,8 +1141,8 @@ mod test_transform_layer { let scale_x = final_transform.matrix2.x_axis.length() / original_transform.matrix2.x_axis.length(); let scale_y = final_transform.matrix2.y_axis.length() / original_transform.matrix2.y_axis.length(); - assert!((scale_x - 2.).abs() < 0.1, "Expected scale factor X of 2, got: {}", scale_x); - assert!((scale_y - 2.).abs() < 0.1, "Expected scale factor Y of 2, got: {}", scale_y); + assert!((scale_x - 2.).abs() < 0.1, "Expected scale factor X of 2, got: {scale_x}"); + assert!((scale_y - 2.).abs() < 0.1, "Expected scale factor Y of 2, got: {scale_y}"); } #[tokio::test] @@ -1132,8 +1167,8 @@ mod test_transform_layer { let scale_x = final_transform.matrix2.x_axis.length() / original_transform.matrix2.x_axis.length(); let scale_y = final_transform.matrix2.y_axis.length() / original_transform.matrix2.y_axis.length(); - assert!((scale_x - 2.).abs() < 0.1, "Expected scale factor X of 2, got: {}", scale_x); - assert!((scale_y - 2.).abs() < 0.1, "Expected scale factor Y of 2, got: {}", scale_y); + assert!((scale_x - 2.).abs() < 0.1, "Expected scale factor X of 2, got: {scale_x}"); + assert!((scale_y - 2.).abs() < 0.1, "Expected scale factor Y of 2, got: {scale_y}"); } #[tokio::test] @@ -1148,11 +1183,7 @@ mod test_transform_layer { // Rotate the document view (45 degrees) editor.handle_message(NavigationMessage::BeginCanvasTilt { was_dispatched_from_menu: false }).await; - editor - .handle_message(NavigationMessage::CanvasTiltSet { - angle_radians: (45. as f64).to_radians(), - }) - .await; + editor.handle_message(NavigationMessage::CanvasTiltSet { angle_radians: 45_f64.to_radians() }).await; editor.handle_message(TransformLayerMessage::BeginRotate).await; editor.handle_message(TransformLayerMessage::TypeDigit { digit: 9 }).await; @@ -1167,7 +1198,7 @@ mod test_transform_layer { // Normalize angle between 0 and 360 let angle_change = ((angle_change % 360.) + 360.) % 360.; - assert!((angle_change - 90.).abs() < 0.1, "Expected rotation of 90 degrees, got: {}", angle_change); + assert!((angle_change - 90.).abs() < 0.1, "Expected rotation of 90 degrees, got: {angle_change}"); } #[tokio::test] @@ -1222,8 +1253,8 @@ mod test_transform_layer { // Verify scale is near zero. let scale_x = near_zero_transform.matrix2.x_axis.length(); let scale_y = near_zero_transform.matrix2.y_axis.length(); - assert!(scale_x < 0.001, "Scale factor X should be near zero, got: {}", scale_x); - assert!(scale_y < 0.001, "Scale factor Y should be near zero, got: {}", scale_y); + assert!(scale_x < 0.001, "Scale factor X should be near zero, got: {scale_x}"); + assert!(scale_y < 0.001, "Scale factor Y should be near zero, got: {scale_y}"); assert!(scale_x > 0., "Scale factor X should not be exactly zero"); assert!(scale_y > 0., "Scale factor Y should not be exactly zero"); diff --git a/editor/src/messages/tool/utility_types.rs b/editor/src/messages/tool/utility_types.rs index 740b09c972..b26e14d620 100644 --- a/editor/src/messages/tool/utility_types.rs +++ b/editor/src/messages/tool/utility_types.rs @@ -3,7 +3,7 @@ use super::common_functionality::shape_editor::ShapeState; use super::tool_messages::*; use crate::messages::broadcast::BroadcastMessage; -use crate::messages::broadcast::broadcast_event::BroadcastEvent; +use crate::messages::broadcast::event::EventMessage; use crate::messages::input_mapper::utility_types::input_keyboard::{Key, KeysGroup, LayoutKeysGroup, MouseMotion}; use crate::messages::input_mapper::utility_types::macros::action_keys; use crate::messages::input_mapper::utility_types::misc::ActionKeys; @@ -141,7 +141,7 @@ impl DocumentToolData { layout_target: LayoutTarget::WorkingColors, }); - responses.add(BroadcastMessage::TriggerEvent(BroadcastEvent::WorkingColorChanged)); + responses.add(BroadcastMessage::TriggerEvent(EventMessage::WorkingColorChanged)); } } @@ -158,7 +158,7 @@ pub trait ToolTransition { fn event_to_message_map(&self) -> EventToMessageMap; fn activate(&self, responses: &mut VecDeque) { - let mut subscribe_message = |broadcast_to_tool_mapping: Option, event: BroadcastEvent| { + let mut subscribe_message = |broadcast_to_tool_mapping: Option, event: EventMessage| { if let Some(mapping) = broadcast_to_tool_mapping { responses.add(BroadcastMessage::SubscribeEvent { on: event, @@ -168,32 +168,32 @@ pub trait ToolTransition { }; let event_to_tool_map = self.event_to_message_map(); - subscribe_message(event_to_tool_map.canvas_transformed, BroadcastEvent::CanvasTransformed); - subscribe_message(event_to_tool_map.tool_abort, BroadcastEvent::ToolAbort); - subscribe_message(event_to_tool_map.selection_changed, BroadcastEvent::SelectionChanged); - subscribe_message(event_to_tool_map.working_color_changed, BroadcastEvent::WorkingColorChanged); + subscribe_message(event_to_tool_map.canvas_transformed, EventMessage::CanvasTransformed); + subscribe_message(event_to_tool_map.tool_abort, EventMessage::ToolAbort); + subscribe_message(event_to_tool_map.selection_changed, EventMessage::SelectionChanged); + subscribe_message(event_to_tool_map.working_color_changed, EventMessage::WorkingColorChanged); if let Some(overlay_provider) = event_to_tool_map.overlay_provider { - responses.add(OverlaysMessage::AddProvider(overlay_provider)); + responses.add(OverlaysMessage::AddProvider { provider: overlay_provider }); } } fn deactivate(&self, responses: &mut VecDeque) { - let mut unsubscribe_message = |broadcast_to_tool_mapping: Option, event: BroadcastEvent| { + let mut unsubscribe_message = |broadcast_to_tool_mapping: Option, event: EventMessage| { if let Some(mapping) = broadcast_to_tool_mapping { responses.add(BroadcastMessage::UnsubscribeEvent { on: event, - message: Box::new(mapping.into()), + send: Box::new(mapping.into()), }); } }; let event_to_tool_map = self.event_to_message_map(); - unsubscribe_message(event_to_tool_map.canvas_transformed, BroadcastEvent::CanvasTransformed); - unsubscribe_message(event_to_tool_map.tool_abort, BroadcastEvent::ToolAbort); - unsubscribe_message(event_to_tool_map.selection_changed, BroadcastEvent::SelectionChanged); - unsubscribe_message(event_to_tool_map.working_color_changed, BroadcastEvent::WorkingColorChanged); + unsubscribe_message(event_to_tool_map.canvas_transformed, EventMessage::CanvasTransformed); + unsubscribe_message(event_to_tool_map.tool_abort, EventMessage::ToolAbort); + unsubscribe_message(event_to_tool_map.selection_changed, EventMessage::SelectionChanged); + unsubscribe_message(event_to_tool_map.working_color_changed, EventMessage::WorkingColorChanged); if let Some(overlay_provider) = event_to_tool_map.overlay_provider { - responses.add(OverlaysMessage::RemoveProvider(overlay_provider)); + responses.add(OverlaysMessage::RemoveProvider { provider: overlay_provider }); } } } diff --git a/editor/src/messages/workspace/mod.rs b/editor/src/messages/workspace/mod.rs deleted file mode 100644 index 891ac11f99..0000000000 --- a/editor/src/messages/workspace/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod workspace_message; -mod workspace_message_handler; - -#[doc(inline)] -pub use workspace_message::{WorkspaceMessage, WorkspaceMessageDiscriminant}; -#[doc(inline)] -pub use workspace_message_handler::WorkspaceMessageHandler; diff --git a/editor/src/messages/workspace/workspace_message.rs b/editor/src/messages/workspace/workspace_message.rs deleted file mode 100644 index 66eb0858ad..0000000000 --- a/editor/src/messages/workspace/workspace_message.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::messages::prelude::*; - -#[impl_message(Message, Workspace)] -#[derive(PartialEq, Eq, Clone, Debug, serde::Serialize, serde::Deserialize)] -pub enum WorkspaceMessage { - // Messages - NodeGraphToggleVisibility, -} diff --git a/editor/src/messages/workspace/workspace_message_handler.rs b/editor/src/messages/workspace/workspace_message_handler.rs deleted file mode 100644 index d71c7a42c7..0000000000 --- a/editor/src/messages/workspace/workspace_message_handler.rs +++ /dev/null @@ -1,24 +0,0 @@ -use crate::messages::prelude::*; - -#[derive(Debug, Clone, Default, ExtractField)] -pub struct WorkspaceMessageHandler { - node_graph_visible: bool, -} - -#[message_handler_data] -impl MessageHandler for WorkspaceMessageHandler { - fn process_message(&mut self, message: WorkspaceMessage, _responses: &mut VecDeque, _: ()) { - match message { - // Messages - WorkspaceMessage::NodeGraphToggleVisibility => { - self.node_graph_visible = !self.node_graph_visible; - } - } - } - - fn actions(&self) -> ActionList { - actions!(WorkspaceMessageDiscriminant; - NodeGraphToggleVisibility, - ) - } -} diff --git a/editor/src/node_graph_executor.rs b/editor/src/node_graph_executor.rs index 8c6a7d13a3..84b0975ac4 100644 --- a/editor/src/node_graph_executor.rs +++ b/editor/src/node_graph_executor.rs @@ -1,20 +1,17 @@ -use crate::consts::FILE_SAVE_SUFFIX; use crate::messages::frontend::utility_types::{ExportBounds, FileType}; use crate::messages::prelude::*; use glam::{DAffine2, DVec2, UVec2}; use graph_craft::document::value::{RenderOutput, TaggedValue}; -use graph_craft::document::{DocumentNode, DocumentNodeImplementation, NodeId, NodeInput, generate_uuid}; +use graph_craft::document::{DocumentNode, DocumentNodeImplementation, NodeId, NodeInput}; use graph_craft::proto::GraphErrors; use graph_craft::wasm_application_io::EditorPreferences; use graphene_std::application_io::TimingInformation; use graphene_std::application_io::{NodeGraphUpdateMessage, RenderConfig}; -use graphene_std::renderer::RenderSvgSegmentList; -use graphene_std::renderer::{GraphicElementRendered, RenderParams, SvgRender}; use graphene_std::renderer::{RenderMetadata, format_transform_matrix}; use graphene_std::text::FontCache; use graphene_std::transform::Footprint; -use graphene_std::vector::VectorData; -use graphene_std::vector::style::ViewMode; +use graphene_std::vector::Vector; +use graphene_std::wasm_application_io::RenderOutputType; use interpreted_executor::dynamic_executor::ResolvedDocumentNodeTypesDelta; mod runtime_io; @@ -29,13 +26,11 @@ pub struct ExecutionRequest { render_config: RenderConfig, } -#[cfg_attr(feature = "decouple-execution", derive(serde::Serialize, serde::Deserialize))] pub struct ExecutionResponse { execution_id: u64, result: Result, responses: VecDeque, - transform: DAffine2, - vector_modify: HashMap, + vector_modify: HashMap, /// The resulting value from the temporary inspected during execution inspect_result: Option, } @@ -46,7 +41,6 @@ pub struct CompilationResponse { node_graph_errors: GraphErrors, } -#[cfg_attr(feature = "decouple-execution", derive(serde::Serialize, serde::Deserialize))] pub enum NodeGraphUpdate { ExecutionResponse(ExecutionResponse), CompilationResponse(CompilationResponse), @@ -56,14 +50,16 @@ pub enum NodeGraphUpdate { #[derive(Debug, Default)] pub struct NodeGraphExecutor { runtime_io: NodeRuntimeIO, + current_execution_id: u64, futures: HashMap, node_graph_hash: u64, - old_inspect_node: Option, + previous_node_to_inspect: Option, } #[derive(Debug, Clone)] struct ExecutionContext { export_config: Option, + document_id: DocumentId, } impl NodeGraphExecutor { @@ -78,13 +74,15 @@ impl NodeGraphExecutor { futures: Default::default(), runtime_io: NodeRuntimeIO::with_channels(request_sender, response_receiver), node_graph_hash: 0, - old_inspect_node: None, + current_execution_id: 0, + previous_node_to_inspect: None, }; (node_runtime, node_executor) } /// Execute the network by flattening it and creating a borrow stack. - fn queue_execution(&self, render_config: RenderConfig) -> u64 { - let execution_id = generate_uuid(); + fn queue_execution(&mut self, render_config: RenderConfig) -> u64 { + let execution_id = self.current_execution_id; + self.current_execution_id += 1; let request = ExecutionRequest { execution_id, render_config }; self.runtime_io.send(GraphRuntimeRequest::ExecutionRequest(request)).expect("Failed to send generation request"); @@ -105,34 +103,41 @@ impl NodeGraphExecutor { #[cfg(test)] pub(crate) fn update_node_graph_instrumented(&mut self, document: &mut DocumentMessageHandler) -> Result { // We should always invalidate the cache. - self.node_graph_hash = generate_uuid(); + self.node_graph_hash = crate::application::generate_uuid(); let mut network = document.network_interface.document_network().clone(); let instrumented = Instrumented::new(&mut network); self.runtime_io - .send(GraphRuntimeRequest::GraphUpdate(GraphUpdate { network, inspect_node: None })) + .send(GraphRuntimeRequest::GraphUpdate(GraphUpdate { network, node_to_inspect: None })) .map_err(|e| e.to_string())?; Ok(instrumented) } /// Update the cached network if necessary. - fn update_node_graph(&mut self, document: &mut DocumentMessageHandler, inspect_node: Option, ignore_hash: bool) -> Result<(), String> { + fn update_node_graph(&mut self, document: &mut DocumentMessageHandler, node_to_inspect: Option, ignore_hash: bool) -> Result<(), String> { let network_hash = document.network_interface.document_network().current_hash(); // Refresh the graph when it changes or the inspect node changes - if network_hash != self.node_graph_hash || self.old_inspect_node != inspect_node || ignore_hash { + if network_hash != self.node_graph_hash || self.previous_node_to_inspect != node_to_inspect || ignore_hash { let network = document.network_interface.document_network().clone(); - self.old_inspect_node = inspect_node; + self.previous_node_to_inspect = node_to_inspect; self.node_graph_hash = network_hash; self.runtime_io - .send(GraphRuntimeRequest::GraphUpdate(GraphUpdate { network, inspect_node })) + .send(GraphRuntimeRequest::GraphUpdate(GraphUpdate { network, node_to_inspect })) .map_err(|e| e.to_string())?; } + Ok(()) } /// Adds an evaluate request for whatever current network is cached. - pub(crate) fn submit_current_node_graph_evaluation(&mut self, document: &mut DocumentMessageHandler, viewport_resolution: UVec2, time: TimingInformation) -> Result<(), String> { + pub(crate) fn submit_current_node_graph_evaluation( + &mut self, + document: &mut DocumentMessageHandler, + document_id: DocumentId, + viewport_resolution: UVec2, + time: TimingInformation, + ) -> Result { let render_config = RenderConfig { viewport: Footprint { transform: document.metadata().document_to_viewport, @@ -152,28 +157,27 @@ impl NodeGraphExecutor { // Execute the node graph let execution_id = self.queue_execution(render_config); - self.futures.insert(execution_id, ExecutionContext { export_config: None }); + self.futures.insert(execution_id, ExecutionContext { export_config: None, document_id }); - Ok(()) + Ok(DeferMessage::SetGraphSubmissionIndex { execution_id }.into()) } /// Evaluates a node graph, computing the entire graph pub fn submit_node_graph_evaluation( &mut self, document: &mut DocumentMessageHandler, + document_id: DocumentId, viewport_resolution: UVec2, time: TimingInformation, - inspect_node: Option, + node_to_inspect: Option, ignore_hash: bool, - ) -> Result<(), String> { - self.update_node_graph(document, inspect_node, ignore_hash)?; - self.submit_current_node_graph_evaluation(document, viewport_resolution, time)?; - - Ok(()) + ) -> Result { + self.update_node_graph(document, node_to_inspect, ignore_hash)?; + self.submit_current_node_graph_evaluation(document, document_id, viewport_resolution, time) } /// Evaluates a node graph for export - pub fn submit_document_export(&mut self, document: &mut DocumentMessageHandler, mut export_config: ExportConfig) -> Result<(), String> { + pub fn submit_document_export(&mut self, document: &mut DocumentMessageHandler, document_id: DocumentId, mut export_config: ExportConfig) -> Result<(), String> { let network = document.network_interface.document_network().clone(); // Calculate the bounding box of the region to be exported @@ -202,10 +206,13 @@ impl NodeGraphExecutor { // Execute the node graph self.runtime_io - .send(GraphRuntimeRequest::GraphUpdate(GraphUpdate { network, inspect_node: None })) + .send(GraphRuntimeRequest::GraphUpdate(GraphUpdate { network, node_to_inspect: None })) .map_err(|e| e.to_string())?; let execution_id = self.queue_execution(render_config); - let execution_context = ExecutionContext { export_config: Some(export_config) }; + let execution_context = ExecutionContext { + export_config: Some(export_config), + document_id, + }; self.futures.insert(execution_id, execution_context); Ok(()) @@ -213,7 +220,7 @@ impl NodeGraphExecutor { fn export(&self, node_graph_output: TaggedValue, export_config: ExportConfig, responses: &mut VecDeque) -> Result<(), String> { let TaggedValue::RenderOutput(RenderOutput { - data: graphene_std::wasm_application_io::RenderOutputType::Svg(svg), + data: RenderOutputType::Svg { svg, .. }, .. }) = node_graph_output else { @@ -221,26 +228,20 @@ impl NodeGraphExecutor { }; let ExportConfig { - file_type, - file_name, - size, - scale_factor, - .. + file_type, name, size, scale_factor, .. } = export_config; let file_suffix = &format!(".{file_type:?}").to_lowercase(); - let name = match file_name.ends_with(FILE_SAVE_SUFFIX) { - true => file_name.replace(FILE_SAVE_SUFFIX, file_suffix), - false => file_name + file_suffix, - }; + let name = name + file_suffix; if file_type == FileType::Svg { - responses.add(FrontendMessage::TriggerDownloadTextFile { document: svg, name }); + responses.add(FrontendMessage::TriggerSaveFile { name, content: svg.into_bytes() }); } else { let mime = file_type.to_mime().to_string(); let size = (size * scale_factor).into(); - responses.add(FrontendMessage::TriggerDownloadImage { svg, name, mime, size }); + responses.add(FrontendMessage::TriggerExportImage { svg, name, mime, size }); } + Ok(()) } @@ -253,7 +254,6 @@ impl NodeGraphExecutor { execution_id, result, responses: existing_responses, - transform, vector_modify, inspect_result, } = execution_response; @@ -276,16 +276,20 @@ impl NodeGraphExecutor { let execution_context = self.futures.remove(&execution_id).ok_or_else(|| "Invalid generation ID".to_string())?; if let Some(export_config) = execution_context.export_config { // Special handling for exporting the artwork - self.export(node_graph_output, export_config, responses)? + self.export(node_graph_output, export_config, responses)?; } else { - self.process_node_graph_output(node_graph_output, transform, responses)? + self.process_node_graph_output(node_graph_output, responses)?; } + responses.add(DeferMessage::TriggerGraphRun { + execution_id, + document_id: execution_context.document_id, + }); - // Update the spreadsheet on the frontend using the value of the inspect result. - if self.old_inspect_node.is_some() { - if let Some(inspect_result) = inspect_result { - responses.add(SpreadsheetMessage::UpdateLayout { inspect_result }); - } + // Update the Data panel on the frontend using the value of the inspect result. + if let Some(inspect_result) = (self.previous_node_to_inspect.is_some()).then_some(inspect_result).flatten() { + responses.add(DataPanelMessage::UpdateLayout { inspect_result }); + } else { + responses.add(DataPanelMessage::ClearLayout); } } NodeGraphUpdate::CompilationResponse(execution_response) => { @@ -318,77 +322,54 @@ impl NodeGraphExecutor { } } } + Ok(()) } - fn debug_render(render_object: impl GraphicElementRendered, transform: DAffine2, responses: &mut VecDeque) { - // Setup rendering - let mut render = SvgRender::new(); - let render_params = RenderParams { - view_mode: ViewMode::Normal, - culling_bounds: None, - thumbnail: false, - hide_artboards: false, - for_export: false, - for_mask: false, - alignment_parent_transform: None, + fn process_node_graph_output(&mut self, node_graph_output: TaggedValue, responses: &mut VecDeque) -> Result<(), String> { + let TaggedValue::RenderOutput(render_output) = node_graph_output else { + return Err(format!("Invalid node graph output type: {node_graph_output:#?}")); }; - // Render SVG - render_object.render_svg(&mut render, &render_params); - - // Concatenate the defs and the SVG into one string - render.wrap_with_transform(transform, None); - let svg = render.svg.to_svg_string(); - - // Send to frontend - responses.add(FrontendMessage::UpdateDocumentArtwork { svg }); - } - - fn process_node_graph_output(&mut self, node_graph_output: TaggedValue, transform: DAffine2, responses: &mut VecDeque) -> Result<(), String> { - let mut render_output_metadata = RenderMetadata::default(); - match node_graph_output { - TaggedValue::RenderOutput(render_output) => { - match render_output.data { - graphene_std::wasm_application_io::RenderOutputType::Svg(svg) => { - // Send to frontend - responses.add(FrontendMessage::UpdateDocumentArtwork { svg }); - } - graphene_std::wasm_application_io::RenderOutputType::CanvasFrame(frame) => { - let matrix = format_transform_matrix(frame.transform); - let transform = if matrix.is_empty() { String::new() } else { format!(" transform=\"{}\"", matrix) }; - let svg = format!( - r#"
"#, - frame.resolution.x, frame.resolution.y, frame.surface_id.0 - ); - responses.add(FrontendMessage::UpdateDocumentArtwork { svg }); - } - _ => { - return Err(format!("Invalid node graph output type: {:#?}", render_output.data)); - } - } - - render_output_metadata = render_output.metadata; + match render_output.data { + RenderOutputType::Svg { svg, image_data } => { + // Send to frontend + responses.add(FrontendMessage::UpdateImageData { image_data }); + responses.add(FrontendMessage::UpdateDocumentArtwork { svg }); } - TaggedValue::Bool(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::String(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::F64(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::DVec2(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::OptionalColor(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::VectorData(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::GraphicGroup(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::RasterData(render_object) => Self::debug_render(render_object, transform, responses), - TaggedValue::Palette(render_object) => Self::debug_render(render_object, transform, responses), - _ => { - return Err(format!("Invalid node graph output type: {node_graph_output:#?}")); + RenderOutputType::CanvasFrame(frame) => { + let matrix = format_transform_matrix(frame.transform); + let transform = if matrix.is_empty() { String::new() } else { format!(" transform=\"{matrix}\"") }; + let svg = format!( + r#"
"#, + frame.resolution.x, frame.resolution.y, frame.surface_id.0 + ); + responses.add(FrontendMessage::UpdateDocumentArtwork { svg }); } - }; - responses.add(Message::EndBuffer { - render_metadata: render_output_metadata, + RenderOutputType::Texture { .. } => {} + _ => return Err(format!("Invalid node graph output type: {:#?}", render_output.data)), + } + + let RenderMetadata { + upstream_footprints, + local_transforms, + first_element_source_id, + click_targets, + clip_targets, + } = render_output.metadata; + + // Run these update state messages immediately + responses.add(DocumentMessage::UpdateUpstreamTransforms { + upstream_footprints, + local_transforms, + first_element_source_id, }); + responses.add(DocumentMessage::UpdateClickTargets { click_targets }); + responses.add(DocumentMessage::UpdateClipTargets { clip_targets }); responses.add(DocumentMessage::RenderScrollbars); responses.add(DocumentMessage::RenderRulers); responses.add(OverlaysMessage::Draw); + Ok(()) } } @@ -450,7 +431,7 @@ mod test { let monitor_node = DocumentNode { inputs: vec![input], implementation: DocumentNodeImplementation::ProtoNode(graphene_std::memo::monitor::IDENTIFIER), - manual_composition: Some(graph_craft::generic!(T)), + call_argument: graph_craft::generic!(T), skip_deduplication: true, ..Default::default() }; diff --git a/editor/src/node_graph_executor/runtime.rs b/editor/src/node_graph_executor/runtime.rs index da92ad313b..217e5ad900 100644 --- a/editor/src/node_graph_executor/runtime.rs +++ b/editor/src/node_graph_executor/runtime.rs @@ -7,16 +7,17 @@ use graph_craft::graphene_compiler::Compiler; use graph_craft::proto::GraphErrors; use graph_craft::wasm_application_io::EditorPreferences; use graph_craft::{ProtoNodeIdentifier, concrete}; -use graphene_std::Context; -use graphene_std::application_io::{NodeGraphUpdateMessage, NodeGraphUpdateSender, RenderConfig}; -use graphene_std::instances::Instance; +use graphene_std::application_io::{ImageTexture, NodeGraphUpdateMessage, NodeGraphUpdateSender, RenderConfig}; +use graphene_std::bounds::RenderBoundingBox; use graphene_std::memo::IORecord; -use graphene_std::renderer::{GraphicElementRendered, RenderParams, SvgRender}; +use graphene_std::renderer::{Render, RenderParams, SvgRender}; use graphene_std::renderer::{RenderSvgSegmentList, SvgSegment}; +use graphene_std::table::{Table, TableRow}; use graphene_std::text::FontCache; -use graphene_std::vector::style::ViewMode; -use graphene_std::vector::{VectorData, VectorDataTable}; -use graphene_std::wasm_application_io::{WasmApplicationIo, WasmEditorApi}; +use graphene_std::transform::RenderQuality; +use graphene_std::vector::Vector; +use graphene_std::wasm_application_io::{RenderOutputType, WasmApplicationIo, WasmEditorApi}; +use graphene_std::{Artboard, Context, Graphic}; use interpreted_executor::dynamic_executor::{DynamicExecutor, IntrospectError, ResolvedDocumentNodeTypesDelta}; use interpreted_executor::util::wrap_network_in_scope; use once_cell::sync::Lazy; @@ -42,7 +43,7 @@ pub struct NodeRuntime { node_graph_errors: GraphErrors, monitor_nodes: Vec>, - /// Which node is inspected and which monitor node is used (if any) for the current execution + /// Which node is inspected and which monitor node is used (if any) for the current execution. inspect_state: Option, /// Mapping of the fully-qualified node paths to their preprocessor substitutions. @@ -51,7 +52,7 @@ pub struct NodeRuntime { // TODO: Remove, it doesn't need to be persisted anymore /// The current renders of the thumbnails for layer nodes. thumbnail_renders: HashMap>, - vector_modify: HashMap, + vector_modify: HashMap, } /// Messages passed from the editor thread to the node runtime thread. @@ -67,12 +68,12 @@ pub enum GraphRuntimeRequest { pub struct GraphUpdate { pub(super) network: NodeNetwork, /// The node that should be temporary inspected during execution - pub(super) inspect_node: Option, + pub(super) node_to_inspect: Option, } #[derive(Default, Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ExportConfig { - pub file_name: String, + pub name: String, pub file_type: FileType, pub scale_factor: f64, pub bounds: ExportBounds, @@ -131,12 +132,12 @@ impl NodeRuntime { } } - pub async fn run(&mut self) { + pub async fn run(&mut self) -> Option { if self.editor_api.application_io.is_none() { self.editor_api = WasmEditorApi { - #[cfg(not(test))] + #[cfg(all(not(test), target_family = "wasm"))] application_io: Some(WasmApplicationIo::new().await.into()), - #[cfg(test)] + #[cfg(any(test, not(target_family = "wasm")))] application_io: Some(WasmApplicationIo::new_offscreen().await.into()), font_cache: self.editor_api.font_cache.clone(), node_graph_message_sender: Box::new(self.sender.clone()), @@ -188,22 +189,21 @@ impl NodeRuntime { let _ = self.update_network(graph).await; } } - GraphRuntimeRequest::GraphUpdate(GraphUpdate { mut network, inspect_node }) => { + GraphRuntimeRequest::GraphUpdate(GraphUpdate { mut network, node_to_inspect }) => { // Insert the monitor node to manage the inspection - self.inspect_state = inspect_node.map(|inspect| InspectState::monitor_inspect_node(&mut network, inspect)); + self.inspect_state = node_to_inspect.map(|inspect| InspectState::monitor_inspect_node(&mut network, inspect)); self.old_graph = Some(network.clone()); + self.node_graph_errors.clear(); let result = self.update_network(network).await; + let node_graph_errors = self.node_graph_errors.clone(); + self.update_thumbnails = true; - self.sender.send_generation_response(CompilationResponse { - result, - node_graph_errors: self.node_graph_errors.clone(), - }); + + self.sender.send_generation_response(CompilationResponse { result, node_graph_errors }); } GraphRuntimeRequest::ExecutionRequest(ExecutionRequest { execution_id, render_config, .. }) => { - let transform = render_config.viewport.transform; - let result = self.execute_network(render_config).await; let mut responses = VecDeque::new(); // TODO: Only process monitor nodes if the graph has changed, not when only the Footprint changes @@ -213,17 +213,28 @@ impl NodeRuntime { // Resolve the result from the inspection by accessing the monitor node let inspect_result = self.inspect_state.and_then(|state| state.access(&self.executor)); + let texture = if let Ok(TaggedValue::RenderOutput(RenderOutput { + data: RenderOutputType::Texture(texture), + .. + })) = &result + { + // We can early return becaus we know that there is at most one execution request and it will always be handled last + Some(texture.clone()) + } else { + None + }; self.sender.send_execution_response(ExecutionResponse { execution_id, result, responses, - transform, vector_modify: self.vector_modify.clone(), inspect_result, }); + return texture; } } } + None } async fn update_network(&mut self, mut graph: NodeNetwork) -> Result { @@ -280,56 +291,51 @@ impl NodeRuntime { if self.inspect_state.is_some_and(|inspect_state| monitor_node_path.last().copied() == Some(inspect_state.monitor_node)) { continue; } + // The monitor nodes are located within a document node, and are thus children in that network, so this gets the parent document node's ID let Some(parent_network_node_id) = monitor_node_path.len().checked_sub(2).and_then(|index| monitor_node_path.get(index)).copied() else { warn!("Monitor node has invalid node id"); - continue; }; - // Extract the monitor node's stored `GraphicElement` data. + // Extract the monitor node's stored `Graphic` data let Ok(introspected_data) = self.executor.introspect(monitor_node_path) else { // TODO: Fix the root of the issue causing the spam of this warning (this at least temporarily disables it in release builds) #[cfg(debug_assertions)] warn!("Failed to introspect monitor node {}", self.executor.introspect(monitor_node_path).unwrap_err()); - continue; }; - if let Some(io) = introspected_data.downcast_ref::>() { - Self::process_graphic_element(&mut self.thumbnail_renders, parent_network_node_id, &io.output, responses, update_thumbnails) - } else if let Some(io) = introspected_data.downcast_ref::>() { - Self::process_graphic_element(&mut self.thumbnail_renders, parent_network_node_id, &io.output, responses, update_thumbnails) - // Insert the vector modify if we are dealing with vector data - } else if let Some(record) = introspected_data.downcast_ref::>() { - let default = Instance::default(); - self.vector_modify.insert( - parent_network_node_id, - record.output.instance_ref_iter().next().unwrap_or_else(|| default.to_instance_ref()).instance.clone(), - ); - } else { + // Graphic table: thumbnail + if let Some(io) = introspected_data.downcast_ref::>>() { + if update_thumbnails { + Self::render_thumbnail(&mut self.thumbnail_renders, parent_network_node_id, &io.output, responses) + } + } + // Artboard table: thumbnail + else if let Some(io) = introspected_data.downcast_ref::>>() { + if update_thumbnails { + Self::render_thumbnail(&mut self.thumbnail_renders, parent_network_node_id, &io.output, responses) + } + } + // Vector table: vector modifications + else if let Some(io) = introspected_data.downcast_ref::>>() { + // Insert the vector modify + let default = TableRow::default(); + self.vector_modify + .insert(parent_network_node_id, io.output.iter().next().unwrap_or_else(|| default.as_ref()).element.clone()); + } + // Other + else { log::warn!("Failed to downcast monitor node output {parent_network_node_id:?}"); } } } - // If this is `GraphicElement` data: - // Regenerate click targets and thumbnails for the layers in the graph, modifying the state and updating the UI. - fn process_graphic_element( - thumbnail_renders: &mut HashMap>, - parent_network_node_id: NodeId, - graphic_element: &impl GraphicElementRendered, - responses: &mut VecDeque, - update_thumbnails: bool, - ) { - // RENDER THUMBNAIL - - if !update_thumbnails { - return; - } - + /// If this is `Graphic` data, regenerate click targets and thumbnails for the layers in the graph, modifying the state and updating the UI. + fn render_thumbnail(thumbnail_renders: &mut HashMap>, parent_network_node_id: NodeId, graphic: &impl Render, responses: &mut VecDeque) { // Skip thumbnails if the layer is too complex (for performance) - if graphic_element.render_complexity() > 1000 { + if graphic.render_complexity() > 1000 { let old = thumbnail_renders.insert(parent_network_node_id, Vec::new()); if old.is_none_or(|v| !v.is_empty()) { responses.push_back(FrontendMessage::UpdateNodeThumbnail { @@ -340,24 +346,28 @@ impl NodeRuntime { return; } - let bounds = graphic_element.bounding_box(DAffine2::IDENTITY, true); + let bounds = match graphic.bounding_box(DAffine2::IDENTITY, true) { + RenderBoundingBox::None => return, + RenderBoundingBox::Infinite => [DVec2::ZERO, DVec2::new(300., 200.)], + RenderBoundingBox::Rectangle(bounds) => bounds, + }; + let footprint = Footprint { + transform: DAffine2::from_translation(DVec2::new(bounds[0].x, bounds[0].y)), + resolution: UVec2::new((bounds[1].x - bounds[0].x).abs() as u32, (bounds[1].y - bounds[0].y).abs() as u32), + quality: RenderQuality::Full, + }; - // Render the thumbnail from a `GraphicElement` into an SVG string + // Render the thumbnail from a `Graphic` into an SVG string let render_params = RenderParams { - view_mode: ViewMode::Normal, - culling_bounds: bounds, + footprint, thumbnail: true, - hide_artboards: false, - for_export: false, - for_mask: false, - alignment_parent_transform: None, + ..Default::default() }; let mut render = SvgRender::new(); - graphic_element.render_svg(&mut render, &render_params); + graphic.render_svg(&mut render, &render_params); // And give the SVG a viewbox and outer ... wrapper tag - let [min, max] = bounds.unwrap_or_default(); - render.format_svg(min, max); + render.format_svg(bounds[0], bounds[1]); // UPDATE FRONTEND THUMBNAIL @@ -382,18 +392,30 @@ pub async fn introspect_node(path: &[NodeId]) -> Result bool { - let Some(mut runtime) = NODE_RUNTIME.try_lock() else { return false }; +pub async fn run_node_graph() -> (bool, Option) { + let Some(mut runtime) = NODE_RUNTIME.try_lock() else { return (false, None) }; if let Some(ref mut runtime) = runtime.as_mut() { - runtime.run().await; + return (true, runtime.run().await); } - true + (false, None) } pub async fn replace_node_runtime(runtime: NodeRuntime) -> Option { let mut node_runtime = NODE_RUNTIME.lock(); node_runtime.replace(runtime) } +pub async fn replace_application_io(application_io: WasmApplicationIo) { + let mut node_runtime = NODE_RUNTIME.lock(); + if let Some(node_runtime) = &mut *node_runtime { + node_runtime.editor_api = WasmEditorApi { + font_cache: node_runtime.editor_api.font_cache.clone(), + application_io: Some(application_io.into()), + node_graph_message_sender: Box::new(node_runtime.sender.clone()), + editor_preferences: Box::new(node_runtime.editor_preferences.clone()), + } + .into(); + } +} /// Which node is inspected and which monitor node is used (if any) for the current execution #[derive(Debug, Clone, Copy)] @@ -403,22 +425,14 @@ struct InspectState { } /// The resulting value from the temporary inspected during execution #[derive(Clone, Debug, Default)] -#[cfg_attr(feature = "decouple-execution", derive(serde::Serialize, serde::Deserialize))] pub struct InspectResult { - #[cfg(not(feature = "decouple-execution"))] introspected_data: Option>, - #[cfg(feature = "decouple-execution")] - introspected_data: Option, pub inspect_node: NodeId, } impl InspectResult { pub fn take_data(&mut self) -> Option> { - #[cfg(not(feature = "decouple-execution"))] - return self.introspected_data.clone(); - - #[cfg(feature = "decouple-execution")] - return self.introspected_data.take().map(|value| value.to_any()); + self.introspected_data.clone() } } @@ -448,7 +462,7 @@ impl InspectState { let monitor_node = DocumentNode { inputs: vec![NodeInput::node(inspect_node, 0)], // Connect to the primary output of the inspect node implementation: DocumentNodeImplementation::ProtoNode(graphene_std::memo::monitor::IDENTIFIER), - manual_composition: Some(graph_craft::generic!(T)), + call_argument: graph_craft::generic!(T), skip_deduplication: true, ..Default::default() }; @@ -463,8 +477,6 @@ impl InspectState { fn access(&self, executor: &DynamicExecutor) -> Option { let introspected_data = executor.introspect(&[self.monitor_node]).inspect_err(|e| warn!("Failed to introspect monitor node {e}")).ok(); // TODO: Consider displaying the error instead of ignoring it - #[cfg(feature = "decouple-execution")] - let introspected_data = introspected_data.as_ref().and_then(|data| TaggedValue::try_from_std_any_ref(data).ok()); Some(InspectResult { inspect_node: self.inspect_node, diff --git a/editor/src/node_graph_executor/runtime_io.rs b/editor/src/node_graph_executor/runtime_io.rs index e4e6f1df40..2c6bd048b4 100644 --- a/editor/src/node_graph_executor/runtime_io.rs +++ b/editor/src/node_graph_executor/runtime_io.rs @@ -1,24 +1,11 @@ use super::*; use std::sync::mpsc::{Receiver, Sender}; -use wasm_bindgen::prelude::*; -#[wasm_bindgen] -extern "C" { - // Invoke with arguments (default) - #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "core"])] - async fn invoke(cmd: &str, args: JsValue) -> JsValue; - #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "core"], js_name="invoke")] - async fn invoke_without_arg(cmd: &str) -> JsValue; -} - -/// Handles communication with the NodeRuntime, either locally or via Tauri +/// Handles communication with the NodeRuntime #[derive(Debug)] pub struct NodeRuntimeIO { // Send to - #[cfg(any(not(feature = "tauri"), test))] sender: Sender, - #[cfg(all(feature = "tauri", not(test)))] - sender: Sender, receiver: Receiver, } @@ -31,25 +18,13 @@ impl Default for NodeRuntimeIO { impl NodeRuntimeIO { /// Creates a new NodeRuntimeIO instance pub fn new() -> Self { - #[cfg(any(not(feature = "tauri"), test))] - { - let (response_sender, response_receiver) = std::sync::mpsc::channel(); - let (request_sender, request_receiver) = std::sync::mpsc::channel(); - futures::executor::block_on(replace_node_runtime(NodeRuntime::new(request_receiver, response_sender))); + let (response_sender, response_receiver) = std::sync::mpsc::channel(); + let (request_sender, request_receiver) = std::sync::mpsc::channel(); + futures::executor::block_on(replace_node_runtime(NodeRuntime::new(request_receiver, response_sender))); - Self { - sender: request_sender, - receiver: response_receiver, - } - } - - #[cfg(all(feature = "tauri", not(test)))] - { - let (response_sender, response_receiver) = std::sync::mpsc::channel(); - Self { - sender: response_sender, - receiver: response_receiver, - } + Self { + sender: request_sender, + receiver: response_receiver, } } #[cfg(test)] @@ -59,44 +34,11 @@ impl NodeRuntimeIO { /// Sends a message to the NodeRuntime pub fn send(&self, message: GraphRuntimeRequest) -> Result<(), String> { - #[cfg(any(not(feature = "tauri"), test))] - { - self.sender.send(message).map_err(|e| e.to_string()) - } - - #[cfg(all(feature = "tauri", not(test)))] - { - let serialized = ron::to_string(&message).map_err(|e| e.to_string()).unwrap(); - wasm_bindgen_futures::spawn_local(async move { - let js_message = create_message_object(&serialized); - invoke("runtime_message", js_message).await; - }); - Ok(()) - } + self.sender.send(message).map_err(|e| e.to_string()) } /// Receives any pending updates from the NodeRuntime pub fn receive(&self) -> impl Iterator + use<'_> { - // TODO: This introduces extra latency - #[cfg(all(feature = "tauri", not(test)))] - { - let sender = self.sender.clone(); - // In the Tauri case, responses are handled separately via poll_node_runtime_updates - wasm_bindgen_futures::spawn_local(async move { - let messages = invoke_without_arg("poll_node_graph").await; - let vec: Vec<_> = ron::from_str(&messages.as_string().unwrap()).unwrap(); - for message in vec { - sender.send(message).unwrap(); - } - }); - } self.receiver.try_iter() } } - -#[cfg(all(feature = "tauri", not(test)))] -pub fn create_message_object(message: &str) -> JsValue { - let obj = js_sys::Object::new(); - js_sys::Reflect::set(&obj, &JsValue::from_str("message"), &JsValue::from_str(message)).unwrap(); - obj.into() -} diff --git a/editor/src/test_utils.rs b/editor/src/test_utils.rs index 11eb0052f9..addadae0c2 100644 --- a/editor/src/test_utils.rs +++ b/editor/src/test_utils.rs @@ -49,7 +49,7 @@ impl EditorTestUtils { }; let viewport_resolution = glam::UVec2::ONE; - if let Err(e) = exector.submit_current_node_graph_evaluation(document, viewport_resolution, Default::default()) { + if let Err(e) = exector.submit_current_node_graph_evaluation(document, DocumentId(0), viewport_resolution, Default::default()) { return Err(format!("submit_current_node_graph_evaluation failed\n\n{e}")); } runtime.run().await; diff --git a/editor/src/utility_traits.rs b/editor/src/utility_traits.rs index aaf977d1dd..386d6fda65 100644 --- a/editor/src/utility_traits.rs +++ b/editor/src/utility_traits.rs @@ -60,3 +60,9 @@ pub trait HierarchicalTree { "" } } + +pub trait ExtractField { + fn field_types() -> Vec<(String, usize)>; + fn path() -> &'static str; + fn print_field_types(); +} diff --git a/editor/src/utility_types.rs b/editor/src/utility_types.rs index 6b5dc6de6b..c27ce5c12b 100644 --- a/editor/src/utility_types.rs +++ b/editor/src/utility_types.rs @@ -26,6 +26,7 @@ impl MessageData { #[derive(Debug)] pub struct DebugMessageTree { name: String, + fields: Option>, variants: Option>, message_handler: Option, message_handler_data: Option, @@ -36,6 +37,7 @@ impl DebugMessageTree { pub fn new(name: &str) -> DebugMessageTree { DebugMessageTree { name: name.to_string(), + fields: None, variants: None, message_handler: None, message_handler_data: None, @@ -43,6 +45,10 @@ impl DebugMessageTree { } } + pub fn add_fields(&mut self, fields: Vec) { + self.fields = Some(fields); + } + pub fn set_path(&mut self, path: &'static str) { self.path = path; } @@ -67,6 +73,10 @@ impl DebugMessageTree { &self.name } + pub fn fields(&self) -> Option<&Vec> { + self.fields.as_ref() + } + pub fn path(&self) -> &'static str { self.path } @@ -82,18 +92,4 @@ impl DebugMessageTree { pub fn message_handler_fields(&self) -> Option<&MessageData> { self.message_handler.as_ref() } - - pub fn has_message_handler_data_fields(&self) -> bool { - match self.message_handler_data_fields() { - Some(_) => true, - None => false, - } - } - - pub fn has_message_handler_fields(&self) -> bool { - match self.message_handler_fields() { - Some(_) => true, - None => false, - } - } } diff --git a/frontend/README.md b/frontend/README.md index 657f90ac42..3a75c83380 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,8 +1,6 @@ # Overview of `/frontend/` -The Graphite frontend is a web app that provides the presentation for the editor. It displays the GUI based on state from the backend and provides users with interactive widgets that send updates to the backend, which is the source of truth for state information. The frontend is built out of reactive components using the [Svelte](https://svelte.dev/) framework. The backend is written in Rust and compiled to WebAssembly (WASM) to be run in the browser alongside the JS code. - -For lack of other options, the frontend is currently written as a web app. Maintaining web compatibility will always be a requirement, but the long-term plan is to port this code to a Rust-based native GUI framework, either written by the Rust community or created by our project if necessary. As a medium-term compromise, we may wrap the web-based frontend in a desktop webview windowing solution like Electron (probably not) or [Tauri](https://tauri.app/) (probably). +The Graphite frontend is a web app that provides the presentation for the editor. It displays the GUI based on state from the backend and provides users with interactive widgets that send updates to the backend, which is the source of truth for state information. The frontend is built out of reactive components using the [Svelte](https://svelte.dev/) framework. The backend is written in Rust and compiled to WebAssembly (Wasm) to be run in the browser alongside the JS code. ## Bundled assets: `assets/` @@ -18,15 +16,15 @@ Source code for the web app in the form of Svelte components and [TypeScript](ht ## WebAssembly wrapper: `wasm/` -Wraps the editor backend codebase (`/editor`) and provides a JS-centric API for the web app to use unburdened by Rust's complex data types that are incompatible with JS data types. Bindings (JS functions that call into the WASM module) are provided by [wasm-bindgen](https://rustwasm.github.io/docs/wasm-bindgen/) in concert with [wasm-pack](https://github.com/rustwasm/wasm-pack). +Wraps the editor backend codebase (`/editor`) and provides a JS-centric API for the web app to use as an entry point, unburdened by Rust's complex data types that are incompatible with JS data types. Bindings (JS functions that call into the Wasm module) are provided by [wasm-bindgen](https://rustwasm.github.io/docs/wasm-bindgen/) in concert with [wasm-pack](https://github.com/rustwasm/wasm-pack). -## ESLint configurations: `.eslintrc.js` +## ESLint configurations: `.eslintrc.cjs` [ESLint](https://eslint.org/) is the tool which enforces style rules on the JS, TS, and Svelte files in our frontend codebase. As it is set up in this config file, ESLint will complain about bad practices and often help reformat code automatically when (in VS Code) the file is saved or `npm run lint` is executed. (If you don't use VS Code, remember to run this command before committing!) This config file for ESLint sets our style preferences and configures our usage of extensions/plugins for Svelte support and [Prettier](https://prettier.io/)'s role as a code formatter. ## npm ecosystem packages: `package.json` -While we don't use Node.js as a JS-based server, we do have to rely on its wide ecosystem of packages for our build system toolchain. If you're just getting started, make sure to install the latest LTS copy of Node.js. Our project's philosophy on third-party packages is to keep our dependency tree as light as possible, so adding anything new to our `package.json` should have overwhelming justification. Most of the packages are just development tooling (TypeScript, Vite, ESLint, Prettier, wasm-pack, and [Sass](https://sass-lang.com/)) that run in your console during the build process. +While we don't use Node.js as a JS-based server, we do rely on its ecosystem of packages for our build system toolchain. If you're just getting started, make sure to install the latest LTS copy of [Node.js](https://nodejs.org/en/download). Our project's philosophy on third-party packages is to keep our dependency tree as light as possible, so adding anything new to our `package.json` should have overwhelming justification. Most of the packages are just development tooling (TypeScript, Vite, ESLint, Prettier, and [Sass](https://sass-lang.com/)) that run in your terminal during the build process. ## npm package installed versions: `package-lock.json` @@ -36,6 +34,6 @@ Specifies the exact versions of packages installed in the npm dependency tree. W Basic configuration options for the TypeScript build tool to do its job in our repository. -## Vite configurations: `vite.config.js` +## Vite configurations: `vite.config.ts` We use the [Vite](https://vitejs.dev/) bundler/build system. This file is where we configure Vite to set up plugins (like the third-party license checker/generator). Part of the license checker plugin setup includes some functions to format web package licenses, as well as Rust package licenses provided by [cargo-about](https://github.com/EmbarkStudios/cargo-about), into a text file that's distributed with the application to provide license notices for third-party code. diff --git a/frontend/index.html b/frontend/index.html index 1e834df4d4..ccaf55e420 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -21,11 +21,17 @@ diff --git a/frontend/src/components/floating-menus/ColorPicker.svelte b/frontend/src/components/floating-menus/ColorPicker.svelte index 53a20010f9..7882e22c50 100644 --- a/frontend/src/components/floating-menus/ColorPicker.svelte +++ b/frontend/src/components/floating-menus/ColorPicker.svelte @@ -39,6 +39,7 @@ export let colorOrGradient: FillChoice; export let allowNone = false; // export let allowTransparency = false; // TODO: Implement + export let disabled = false; export let direction: MenuDirection = "Bottom"; // TODO: See if this should be made to follow the pattern of DropdownInput.svelte so this could be removed export let open: boolean; @@ -133,6 +134,8 @@ } function onPointerDown(e: PointerEvent) { + if (disabled) return; + const target = (e.target || undefined) as HTMLElement | undefined; draggingPickerTrack = target?.closest("[data-saturation-value-picker], [data-hue-picker], [data-alpha-picker]") || undefined; @@ -403,7 +406,7 @@ }); - + - + {#if !isNone}
{/if} @@ -432,12 +435,12 @@ /> {/if} - + {#if !isNone}
{/if} - + {#if !isNone}
{/if} @@ -447,6 +450,7 @@ { gradient = gradient; if (gradient) dispatch("colorOrGradient", gradient); @@ -459,6 +463,7 @@ {#if gradientSpectrumInputWidget && activeIndex !== undefined} { if (gradientSpectrumInputWidget && activeIndex !== undefined && detail !== undefined) gradientSpectrumInputWidget.setPosition(activeIndex, detail / 100); }} @@ -478,7 +483,7 @@ styles={{ "--outline-amount": outlineFactor }} tooltip={!newColor.equals(oldColor) ? "Comparison between the present color choice (left) and the color before any change was made (right)" : "The present color choice"} > - {#if !newColor.equals(oldColor)} + {#if !newColor.equals(oldColor) && !disabled}
{/if} @@ -500,6 +505,7 @@ { dispatch("startHistoryTransaction"); setColorCode(detail); @@ -520,6 +526,7 @@ {/if} { strength = detail; setColorRGB(channel, detail); @@ -547,6 +554,7 @@ {/if} { strength = detail; setColorHSV(channel, detail); @@ -573,6 +581,7 @@ { if (detail !== undefined) alpha = detail / 100; setColorAlphaPercent(detail); @@ -593,14 +602,14 @@ {#if allowNone && !gradient} - + {/if} - + - + - - + @@ -954,7 +963,7 @@ // For the least jarring luminance conversion, these colors are derived by placing a black layer with the "desaturate" blend mode over the colors. // We don't use the CSS `filter: grayscale(1);` property because it produces overly dark tones for bright colors with a noticeable jump on hover. background: var(--pure-color-gray); - transition: background-color 0.2s ease; + transition: background-color 0.1s; } &:hover div { @@ -963,5 +972,21 @@ } } } + + &.disabled .pickers-and-gradient .pickers :is(.saturation-value-picker, .hue-picker, .alpha-picker), + &.disabled .details .preset-color, + &.disabled .details .choice-preview { + transition: opacity 0.1s; + + &:hover { + opacity: 0.5; + } + } + + &.disabled .details .preset-color.pure:hover div { + background: var(--pure-color-gray); + } } + + // paddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpaddingpadding diff --git a/frontend/src/components/floating-menus/Dialog.svelte b/frontend/src/components/floating-menus/Dialog.svelte index e9d0ba5fab..928d869930 100644 --- a/frontend/src/components/floating-menus/Dialog.svelte +++ b/frontend/src/components/floating-menus/Dialog.svelte @@ -89,6 +89,7 @@ .header-area, .footer-area { background: var(--color-1-nearblack); + flex: 0 0 auto; } .header-area, @@ -113,6 +114,8 @@ .content { margin: -4px 0; + padding-right: calc(24px + 1px * var(--even-integer-subpixel-expansion-x)); + padding-bottom: calc(16px + 1px * var(--even-integer-subpixel-expansion-y)); &.center .row { justify-content: center; @@ -126,18 +129,22 @@ } } - .details.text-label { - -webkit-user-select: text; // Required as of Safari 15.0 (Graphite's minimum version) through the latest release - user-select: text; - white-space: pre-wrap; - max-width: 400px; - height: auto; - } - .radio-input button { flex-grow: 1; } + .text-label.multiline { + -webkit-user-select: text; // Still required by Safari as of 2025 + user-select: text; + } + + // Used by the "Third-Party Software License Notices" dialog + .details:has(.text-label.multiline.monospace) { + max-height: 60vh; + max-width: 80vw; + overflow: auto; + } + // Used by the "Open Demo Artwork" dialog .image-label { border-radius: 2px; diff --git a/frontend/src/components/floating-menus/NodeCatalog.svelte b/frontend/src/components/floating-menus/NodeCatalog.svelte index a0f2cbe241..58856e2ac8 100644 --- a/frontend/src/components/floating-menus/NodeCatalog.svelte +++ b/frontend/src/components/floating-menus/NodeCatalog.svelte @@ -129,7 +129,7 @@ diff --git a/frontend/src/components/panels/Document.svelte b/frontend/src/components/panels/Document.svelte index 70d4ea99ba..22c7862438 100644 --- a/frontend/src/components/panels/Document.svelte +++ b/frontend/src/components/panels/Document.svelte @@ -16,6 +16,7 @@ UpdateMouseCursor, isWidgetSpanRow, } from "@graphite/messages"; + import type { AppWindowState } from "@graphite/state-providers/app-window"; import type { DocumentState } from "@graphite/state-providers/document"; import { textInputCleanup } from "@graphite/utility-functions/keyboard-entry"; import { extractPixelData, rasterizeSVGCanvas } from "@graphite/utility-functions/rasterization"; @@ -34,6 +35,7 @@ let viewport: HTMLDivElement | undefined; const editor = getContext("editor"); + const appWindow = getContext("appWindow"); const document = getContext("document"); // Interactive text editing @@ -149,9 +151,11 @@ return; } - if (file.name.endsWith(".graphite")) { + const graphiteFileSuffix = "." + editor.handle.fileExtension(); + if (file.name.endsWith(graphiteFileSuffix)) { const content = await file.text(); - editor.handle.openDocumentFile(file.name, content); + const documentName = file.name.slice(0, -graphiteFileSuffix.length); + editor.handle.openDocumentFile(documentName, content); return; } }); @@ -192,12 +196,25 @@ const placeholders = window.document.querySelectorAll("[data-viewport] [data-canvas-placeholder]"); // Replace the placeholders with the actual canvas elements - placeholders.forEach((placeholder) => { + Array.from(placeholders).forEach((placeholder) => { const canvasName = placeholder.getAttribute("data-canvas-placeholder"); if (!canvasName) return; // Get the canvas element from the global storage // eslint-disable-next-line @typescript-eslint/no-explicit-any - const canvas = (window as any).imageCanvases[canvasName]; + let canvas = (window as any).imageCanvases[canvasName]; + + if (canvasName !== "0" && canvas.parentElement) { + var newCanvas = window.document.createElement("canvas"); + var context = newCanvas.getContext("2d"); + + newCanvas.width = canvas.width; + newCanvas.height = canvas.height; + + context?.drawImage(canvas, 0, 0); + + canvas = newCanvas; + } + placeholder.replaceWith(canvas); }); } @@ -226,8 +243,8 @@ `.trim(); if (!rasterizedCanvas) { - rasterizedCanvas = await rasterizeSVGCanvas(svg, width * dpiFactor, height * dpiFactor, "image/png"); - rasterizedContext = rasterizedCanvas.getContext("2d") || undefined; + rasterizedCanvas = await rasterizeSVGCanvas(svg, width * dpiFactor, height * dpiFactor); + rasterizedContext = rasterizedCanvas.getContext("2d", { willReadFrequently: true }) || undefined; } if (!rasterizedContext) return undefined; @@ -330,6 +347,7 @@ textInput.style.lineHeight = `${displayEditableTextbox.lineHeightRatio}`; textInput.style.fontSize = `${displayEditableTextbox.fontSize}px`; textInput.style.color = displayEditableTextbox.color.toHexOptionalAlpha() || "transparent"; + textInput.style.textAlign = displayEditableTextbox.align; textInput.oninput = () => { if (!textInput) return; @@ -455,7 +473,7 @@ rulerVertical?.resize(); // Send the new bounds of the viewports to the backend - if (viewport.parentElement) updateBoundsOfViewports(editor, viewport.parentElement); + if (viewport.parentElement) updateBoundsOfViewports(editor); }); if (viewport) viewportResizeObserver.observe(viewport); }); @@ -500,13 +518,13 @@ {/if} - + {#if rulersVisible} {/if} - + {#if cursorEyedropper} {/if} -
canvasPointerDown(e)} bind:this={viewport} data-viewport> - - {@html artworkSvg} - +
canvasPointerDown(e)} + bind:this={viewport} + data-viewport + > + {#if !$appWindow.viewportHolePunch} + + {@html artworkSvg} + + {/if}
{#if showTextInput}
{/if}
- - + {#if !$appWindow.viewportHolePunch} + + + {/if}
+
@@ -579,7 +608,8 @@ .control-bar { height: 32px; flex: 0 0 auto; - margin: 0 4px; + padding: 0 4px; // Padding (instead of margin) is needed for the viewport hole punch on desktop + background: var(--color-3-darkgray); // Needed for the viewport hole punch on desktop .spacer { min-width: 40px; @@ -618,6 +648,7 @@ .tool-shelf { flex: 0 0 auto; justify-content: space-between; + background: var(--color-3-darkgray); // Needed for the viewport hole punch on desktop .tools { flex: 0 1 auto; @@ -646,7 +677,7 @@ &[title^="Coming Soon"] { opacity: 0.25; - transition: opacity 0.2s; + transition: opacity 0.1s; &:hover { opacity: 1; @@ -659,7 +690,7 @@ } .color-vector { - fill: var(--color-data-vectordata); + fill: var(--color-data-vector); } .color-raster { @@ -699,6 +730,7 @@ .ruler-or-scrollbar { flex: 0 0 auto; + background: var(--color-3-darkgray); // Needed for the viewport hole punch on desktop } .ruler-corner { @@ -729,12 +761,17 @@ margin-right: 16px; } - .viewport-container-inner { + .viewport-container-inner-1, + .viewport-container-inner-2 { flex: 1 1 100%; position: relative; .viewport { background: var(--color-2-mildblack); + } + + .viewport, + .viewport-transparent { width: 100%; height: 100%; // Allows the SVG to be placed at explicit integer values of width and height to prevent non-pixel-perfect SVG scaling @@ -761,7 +798,6 @@ .text-input { word-break: break-all; unicode-bidi: plaintext; - text-align: left; } .text-input div { @@ -776,7 +812,6 @@ white-space: pre-wrap; word-break: normal; unicode-bidi: plaintext; - text-align: left; display: inline-block; // Workaround to force Chrome to display the flashing text entry cursor when text is empty padding-left: 1px; @@ -792,7 +827,7 @@ .graph-view { pointer-events: none; - transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s; opacity: 0; &.open { diff --git a/frontend/src/components/panels/Layers.svelte b/frontend/src/components/panels/Layers.svelte index 092a83fbac..2fd350178d 100644 --- a/frontend/src/components/panels/Layers.svelte +++ b/frontend/src/components/panels/Layers.svelte @@ -98,6 +98,12 @@ }); onDestroy(() => { + editor.subscriptions.unsubscribeJsMessage(UpdateLayersPanelControlBarLeftLayout); + editor.subscriptions.unsubscribeJsMessage(UpdateLayersPanelControlBarRightLayout); + editor.subscriptions.unsubscribeJsMessage(UpdateLayersPanelBottomBarLayout); + editor.subscriptions.unsubscribeJsMessage(UpdateDocumentLayerStructureJs); + editor.subscriptions.unsubscribeJsMessage(UpdateDocumentLayerDetails); + removeEventListener("pointermove", clippingHover); removeEventListener("keydown", clippingKeyPress); removeEventListener("keyup", clippingKeyPress); @@ -432,9 +438,11 @@ } // When we eventually have sub-documents, this should be changed to import the document instead of opening it in a separate tab - if (file.name.endsWith(".graphite")) { + const graphiteFileSuffix = "." + editor.handle.fileExtension(); + if (file.name.endsWith(graphiteFileSuffix)) { const content = await file.text(); - editor.handle.openDocumentFile(file.name, content); + const documentName = file.name.slice(0, -graphiteFileSuffix.length); + editor.handle.openDocumentFile(documentName, content); return; } }); @@ -489,7 +497,9 @@ (dragInPanel = false)}> - + {#if layersPanelControlBarLeftLayout?.layout?.length > 0 && layersPanelControlBarRightLayout?.layout?.length > 0} + + {/if} @@ -605,6 +615,10 @@ .widget-span:first-child { flex: 1 1 auto; } + + &:not(:has(*)) { + display: none; + } } // Bottom bar @@ -619,6 +633,10 @@ .widget-span > * { margin: 0; } + + &:not(:has(*)) { + display: none; + } } // Layer hierarchy @@ -714,6 +732,7 @@ width: 36px; height: 24px; border-radius: 2px; + overflow: hidden; flex: 0 0 auto; background-image: var(--color-transparent-checkered-background); background-size: var(--color-transparent-checkered-background-size-mini); @@ -721,9 +740,8 @@ background-repeat: var(--color-transparent-checkered-background-repeat); svg { - width: calc(100% - 4px); - height: calc(100% - 4px); - margin: 2px; + width: 100%; + height: 100%; } } @@ -752,7 +770,7 @@ width: 100%; &:disabled { - -webkit-user-select: none; // Required as of Safari 15.0 (Graphite's minimum version) through the latest release + -webkit-user-select: none; // Still required by Safari as of 2025 user-select: none; // Workaround for `user-select: none` not working on elements pointer-events: none; diff --git a/frontend/src/components/panels/Properties.svelte b/frontend/src/components/panels/Properties.svelte index 72607849a5..889ccba9bd 100644 --- a/frontend/src/components/panels/Properties.svelte +++ b/frontend/src/components/panels/Properties.svelte @@ -1,27 +1,31 @@ - + diff --git a/frontend/src/components/panels/Spreadsheet.svelte b/frontend/src/components/panels/Spreadsheet.svelte deleted file mode 100644 index 6dd49c6058..0000000000 --- a/frontend/src/components/panels/Spreadsheet.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - - Spreadsheet Data for Node ID {$portfolio.spreadsheetNode}: - - - - - - - diff --git a/frontend/src/components/views/Graph.svelte b/frontend/src/components/views/Graph.svelte index eaedc3a6df..1c0dea12e9 100644 --- a/frontend/src/components/views/Graph.svelte +++ b/frontend/src/components/views/Graph.svelte @@ -4,8 +4,7 @@ import { fade } from "svelte/transition"; import type { Editor } from "@graphite/editor"; - import type { Node } from "@graphite/messages"; - import type { FrontendNode, FrontendGraphInput, FrontendGraphOutput } from "@graphite/messages"; + import type { FrontendGraphInput, FrontendGraphOutput } from "@graphite/messages"; import type { NodeGraphState } from "@graphite/state-providers/node-graph"; import type { IconName } from "@graphite/utility-functions/icons"; @@ -32,7 +31,7 @@ // Imports/Export are stored at a key value of 0 $: gridSpacing = calculateGridSpacing($nodeGraph.transform.scale); - $: dotRadius = 1 + Math.floor($nodeGraph.transform.scale - 0.5 + 0.001) / 2; + $: gridDotRadius = 1 + Math.floor($nodeGraph.transform.scale - 0.5 + 0.001) / 2; let inputElement: HTMLInputElement; let hoveringImportIndex: number | undefined = undefined; @@ -178,7 +177,7 @@ } function dataTypeTooltip(value: FrontendGraphInput | FrontendGraphOutput): string { - return value.resolvedType ? `Data Type:\n${value.resolvedType}` : `Data Type (Unresolved):\n${value.dataType}`; + return `Data Type: ${value.resolvedType}`; } function validTypesText(value: FrontendGraphInput): string { @@ -189,37 +188,11 @@ function outputConnectedToText(output: FrontendGraphOutput): string { if (output.connectedTo.length === 0) return "Connected to nothing"; - return output.connectedTo - .map((inputConnector) => { - if ((inputConnector as Node).nodeId === undefined) return `Connected to export index ${inputConnector.index}`; - return `Connected to ${(inputConnector as Node).nodeId}, port index ${inputConnector.index}`; - }) - .join("\n"); + return `Connected to:\n${output.connectedTo.join("\n")}`; } function inputConnectedToText(input: FrontendGraphInput): string { - if (input.connectedTo === undefined) return "Connected to nothing"; - if ((input.connectedTo as Node).nodeId === undefined) return `Connected to import index ${input.connectedTo.index}`; - return `Connected to ${(input.connectedTo as Node).nodeId}, port index ${input.connectedTo.index}`; - } - - function primaryOutputConnectedToLayer(node: FrontendNode): boolean { - let firstConnectedNode = Array.from($nodeGraph.nodes.values()).find((n) => - node.primaryOutput?.connectedTo.some((connector) => { - if ((connector as Node).nodeId === undefined) return false; - if (connector.index !== 0n) return false; - return n.id === (connector as Node).nodeId || false; - }), - ); - return firstConnectedNode?.isLayer || false; - } - - function primaryInputConnectedToLayer(node: FrontendNode): boolean { - const connectedNode = Array.from($nodeGraph.nodes.values()).find((n) => { - if ((node.primaryInput?.connectedTo as Node) === undefined) return false; - return n.id === (node.primaryInput?.connectedTo as Node).nodeId; - }); - return connectedNode?.isLayer || false; + return `Connected to:\n${input.connectedTo}`; } function zipWithUndefined(arr1: FrontendGraphInput[], arr2: FrontendGraphOutput[]) { @@ -238,7 +211,7 @@ style:--grid-spacing={`${gridSpacing}px`} style:--grid-offset-x={`${$nodeGraph.transform.x}px`} style:--grid-offset-y={`${$nodeGraph.transform.y}px`} - style:--dot-radius={`${dotRadius}px`} + style:--grid-dot-radius={`${gridDotRadius}px`} data-node-graph > @@ -265,16 +238,12 @@ { value: "node", label: "Node", - action: () => { - toggleLayerDisplay(false, contextMenuData.nodeId); - }, + action: () => toggleLayerDisplay(false, contextMenuData.nodeId), }, { value: "layer", label: "Layer", - action: () => { - toggleLayerDisplay(true, contextMenuData.nodeId); - }, + action: () => toggleLayerDisplay(true, contextMenuData.nodeId), }, ]} disabled={!canBeToggledBetweenNodeAndLayer(contextMenuData.nodeId)} @@ -298,8 +267,8 @@ {#each $nodeGraph.clickTargets.layerClickTargets as pathString} {/each} - {#each $nodeGraph.clickTargets.portClickTargets as pathString} - + {#each $nodeGraph.clickTargets.connectorClickTargets as pathString} + {/each} {#each $nodeGraph.clickTargets.iconClickTargets as pathString} @@ -332,151 +301,183 @@
- +
- {#each $nodeGraph.imports as { outputMetadata, position }, index} - - {`${dataTypeTooltip(outputMetadata)}\n\n${outputConnectedToText(outputMetadata)}`} - {#if outputMetadata.connectedTo !== undefined} - - {:else} - - {/if} - + {#if $nodeGraph.updateImportsExports} + {#each $nodeGraph.updateImportsExports.imports as frontendOutput, index} + {#if frontendOutput} + + {`${dataTypeTooltip(frontendOutput)}\n\n${outputConnectedToText(frontendOutput)}`} + {#if frontendOutput.connectedTo.length > 0} + + {:else} + + {/if} + -
(hoveringImportIndex = index)} - on:pointerleave={() => (hoveringImportIndex = undefined)} - style:--offset-left={position.x / 24} - style:--offset-top={position.y / 24} - > - {#if editingNameImportIndex == index} - e.key === "Enter" && setEditingImportName(e)} - /> +
(hoveringImportIndex = index)} + on:pointerleave={() => (hoveringImportIndex = undefined)} + class="edit-import-export import" + class:separator-bottom={index === 0 && $nodeGraph.updateImportsExports.addImportExport} + class:separator-top={index === 1 && $nodeGraph.updateImportsExports.addImportExport} + style:--offset-left={($nodeGraph.updateImportsExports.importPosition.x - 8) / 24} + style:--offset-top={($nodeGraph.updateImportsExports.importPosition.y - 8) / 24 + index} + > + {#if editingNameImportIndex == index} + e.key === "Enter" && setEditingImportName(e)} + /> + {:else} +

setEditingImportNameIndex(index, frontendOutput.name)}> + {frontendOutput.name} +

+ {/if} + {#if (hoveringImportIndex === index || editingNameImportIndex === index) && $nodeGraph.updateImportsExports.addImportExport} + { + /* Button is purely visual, clicking is handled in NodeGraphMessage::PointerDown */ + }} + /> + {#if index > 0} +
+ {/if} + {/if} +
{:else} -

setEditingImportNameIndex(index, outputMetadata.name)}>{outputMetadata.name}

+
+ editor.handle.addPrimaryImport()} /> +
{/if} - {#if hoveringImportIndex === index || editingNameImportIndex === index} - { - /* Button is purely visual, clicking is handled in NodeGraphMessage::PointerDown */ - }} - /> -
- {/if} -
- {/each} - {#if $nodeGraph.reorderImportIndex !== undefined} - {@const position = { - x: Number($nodeGraph.imports[0].position.x), - y: Number($nodeGraph.imports[0].position.y) + Number($nodeGraph.reorderImportIndex) * 24, - }} -
- {/if} - {#if $nodeGraph.addImport !== undefined} -
- { - /* Button is purely visual, clicking is handled in NodeGraphMessage::PointerDown */ - }} - /> -
- {/if} - {#each $nodeGraph.exports as { inputMetadata, position }, index} - - {`${dataTypeTooltip(inputMetadata)}\n\n${inputConnectedToText(inputMetadata)}`} - {#if inputMetadata.connectedTo !== undefined} - + {/each} + + {#each $nodeGraph.updateImportsExports.exports as frontendInput, index} + {#if frontendInput} + + {`${dataTypeTooltip(frontendInput)}\n\n${inputConnectedToText(frontendInput)}`} + {#if frontendInput.connectedTo !== "nothing"} + + {:else} + + {/if} + +
(hoveringExportIndex = index)} + on:pointerleave={() => (hoveringExportIndex = undefined)} + class="edit-import-export export" + class:separator-bottom={index === 0 && $nodeGraph.updateImportsExports.addImportExport} + class:separator-top={index === 1 && $nodeGraph.updateImportsExports.addImportExport} + style:--offset-left={($nodeGraph.updateImportsExports.exportPosition.x - 8) / 24} + style:--offset-top={($nodeGraph.updateImportsExports.exportPosition.y - 8) / 24 + index} + > + {#if (hoveringExportIndex === index || editingNameExportIndex === index) && $nodeGraph.updateImportsExports.addImportExport} + {#if index > 0} +
+ {/if} + { + /* Button is purely visual, clicking is handled in NodeGraphMessage::PointerDown */ + }} + /> + {/if} + {#if editingNameExportIndex === index} + e.key === "Enter" && setEditingExportName(e)} + /> + {:else} +

setEditingExportNameIndex(index, frontendInput.name)}> + {frontendInput.name} +

+ {/if} +
{:else} - +
+ editor.handle.addPrimaryExport()} /> +
{/if} - -
(hoveringExportIndex = index)} - on:pointerleave={() => (hoveringExportIndex = undefined)} - style:--offset-left={position.x / 24} - style:--offset-top={position.y / 24} - > - {#if hoveringExportIndex === index || editingNameExportIndex === index} -
- { - /* Button is purely visual, clicking is handled in NodeGraphMessage::PointerDown */ - }} - /> - {/if} - {#if editingNameExportIndex === index} - e.key === "Enter" && setEditingExportName(e)} - /> - {:else} -

setEditingExportNameIndex(index, inputMetadata.name)}>{inputMetadata.name}

- {/if} -
- {/each} - {#if $nodeGraph.reorderExportIndex !== undefined} - {@const position = { - x: Number($nodeGraph.exports[0].position.x), - y: Number($nodeGraph.exports[0].position.y) + Number($nodeGraph.reorderExportIndex) * 24, - }} -
- {/if} - {#if $nodeGraph.addExport !== undefined} -
- { - /* Button is purely visual, clicking is handled in NodeGraphMessage::PointerDown */ - }} - /> -
+ {/each} + + {#if $nodeGraph.updateImportsExports.addImportExport == true} +
+ editor.handle.addSecondaryImport()} /> +
+
+ editor.handle.addSecondaryExport()} /> +
+ {/if} + + {#if $nodeGraph.reorderImportIndex !== undefined} + {@const position = { + x: Number($nodeGraph.updateImportsExports.importPosition.x), + y: Number($nodeGraph.updateImportsExports.importPosition.y) + Number($nodeGraph.reorderImportIndex) * 24, + }} +
+ {/if} + + {#if $nodeGraph.reorderExportIndex !== undefined} + {@const position = { + x: Number($nodeGraph.updateImportsExports.exportPosition.x), + y: Number($nodeGraph.updateImportsExports.exportPosition.y) + Number($nodeGraph.reorderExportIndex) * 24, + }} +
+ {/if} {/if}
@@ -521,8 +522,8 @@ {`${dataTypeTooltip(node.primaryOutput)}\n\n${outputConnectedToText(node.primaryOutput)}`} {#if node.primaryOutput.connectedTo.length > 0} - {#if primaryOutputConnectedToLayer(node)} + {#if node.primaryOutputConnectedToLayer} {/if} {:else} @@ -542,8 +543,8 @@ {`${dataTypeTooltip(node.primaryInput)}\n\n${validTypesText(node.primaryInput)}\n\n${inputConnectedToText(node.primaryInput)}`} {/if} - {#if node.primaryInput?.connectedTo !== undefined} + {#if node.primaryInput?.connectedTo !== "nothing"} - {#if primaryInputConnectedToLayer(node)} + {#if node.primaryInputConnectedToLayer} {/if} {:else} @@ -561,14 +562,14 @@ {/if}
- + {#if node.exposedInputs.length > 0} -
+
{/if} - -
+ +
{#if node.primaryInput?.dataType} - -
+ +
{#if node.primaryOutput} ` above, as well as the `left` port offset CSS rule above in `.ports.input` above. + // Keep this equation in sync with the equivalent one in the Svelte template `` above, as well as the `left` connector offset CSS rule above in `.connectors.input` above. width: calc((var(--layer-area-width) - 0.5) * 24px); padding-left: calc(var(--node-chain-area-left-extension) * 24px); margin-left: calc((0.5 - var(--node-chain-area-left-extension)) * 24px); @@ -1141,8 +1164,10 @@ border-radius: 2px; position: relative; box-sizing: border-box; - width: 72px; height: 48px; + // We shorten the width by 1px on the left and right so the inner thumbnail graphic maintains a perfect 3:2 aspect ratio + width: calc(72px - 2px); + margin: 0 1px; &::before { content: ""; @@ -1153,7 +1178,7 @@ } &::before, - svg:not(.port) { + svg:not(.connector) { pointer-events: none; position: absolute; margin: auto; @@ -1163,7 +1188,7 @@ height: calc(100% - 2px); } - .port { + .connector { position: absolute; margin: 0 auto; left: 0; @@ -1211,21 +1236,21 @@ right: -12px; } - .input.ports { + .input.connectors { left: calc(-3px + var(--node-chain-area-left-extension) * 24px - 36px); } .solo-drag-grip, .visibility, - .input.ports, - .input.ports .port { + .input.connectors, + .input.connectors .connector { position: absolute; margin: auto 0; top: 0; bottom: 0; } - .input.ports .port { + .input.connectors .connector { left: 24px; } } @@ -1259,11 +1284,11 @@ } } - .port { + .connector { &:first-of-type { margin-top: calc((24px - 8px) / 2); - &:not(.primary-port) { + &:not(.primary-connector) { margin-top: calc((24px - 8px) / 2 + 24px); } } diff --git a/frontend/src/components/widgets/WidgetSpan.svelte b/frontend/src/components/widgets/WidgetSpan.svelte index 831e1dbbce..35400eb952 100644 --- a/frontend/src/components/widgets/WidgetSpan.svelte +++ b/frontend/src/components/widgets/WidgetSpan.svelte @@ -25,6 +25,7 @@ import TextInput from "@graphite/components/widgets/inputs/TextInput.svelte"; import WorkingColorsInput from "@graphite/components/widgets/inputs/WorkingColorsInput.svelte"; import IconLabel from "@graphite/components/widgets/labels/IconLabel.svelte"; + import ImageLabel from "@graphite/components/widgets/labels/ImageLabel.svelte"; import Separator from "@graphite/components/widgets/labels/Separator.svelte"; import TextLabel from "@graphite/components/widgets/labels/TextLabel.svelte"; import WidgetLayout from "@graphite/components/widgets/WidgetLayout.svelte"; @@ -124,6 +125,10 @@ {#if iconLabel} {/if} + {@const imageLabel = narrowWidgetProps(component.props, "ImageLabel")} + {#if imageLabel} + + {/if} {@const imageButton = narrowWidgetProps(component.props, "ImageButton")} {#if imageButton} widgetValueCommitAndUpdate(index, undefined)} /> diff --git a/frontend/src/components/widgets/buttons/ImageButton.svelte b/frontend/src/components/widgets/buttons/ImageButton.svelte index 00e9de6aa7..ec5b8da825 100644 --- a/frontend/src/components/widgets/buttons/ImageButton.svelte +++ b/frontend/src/components/widgets/buttons/ImageButton.svelte @@ -17,14 +17,15 @@ .join(" "); - + diff --git a/frontend/src/components/widgets/inputs/CurveInput.svelte b/frontend/src/components/widgets/inputs/CurveInput.svelte index 634bb45f1d..197793efdf 100644 --- a/frontend/src/components/widgets/inputs/CurveInput.svelte +++ b/frontend/src/components/widgets/inputs/CurveInput.svelte @@ -20,7 +20,7 @@ const GRID_SIZE = 4; - let groups: CurveManipulatorGroup[] = [ + let manipulatorsList: CurveManipulatorGroup[] = [ { anchor: [0, 0], handles: [ @@ -48,29 +48,29 @@ let dAttribute = recalculateSvgPath(); $: { - groups = [groups[0]].concat(value.manipulatorGroups).concat([groups[groups.length - 1]]); - groups[0].handles[1] = value.firstHandle; - groups[groups.length - 1].handles[0] = value.lastHandle; + manipulatorsList = [manipulatorsList[0]].concat(value.manipulatorGroups).concat([manipulatorsList[manipulatorsList.length - 1]]); + manipulatorsList[0].handles[1] = value.firstHandle; + manipulatorsList[manipulatorsList.length - 1].handles[0] = value.lastHandle; dAttribute = recalculateSvgPath(); } function updateCurve() { dispatch("value", { - manipulatorGroups: groups.slice(1, groups.length - 1), - firstHandle: groups[0].handles[1], - lastHandle: groups[groups.length - 1].handles[0], + manipulatorGroups: manipulatorsList.slice(1, manipulatorsList.length - 1), + firstHandle: manipulatorsList[0].handles[1], + lastHandle: manipulatorsList[manipulatorsList.length - 1].handles[0], }); } function recalculateSvgPath() { let dAttribute = ""; - let anchor = groups[0].anchor; - let handle = groups[0].handles[1]; + let anchor = manipulatorsList[0].anchor; + let handle = manipulatorsList[0].handles[1]; - groups.slice(1).forEach((group) => { - dAttribute += `M${anchor[0]} ${1 - anchor[1]} C${handle[0]} ${1 - handle[1]}, ${group.handles[0][0]} ${1 - group.handles[0][1]}, ${group.anchor[0]} ${1 - group.anchor[1]} `; - anchor = group.anchor; - handle = group.handles[1]; + manipulatorsList.slice(1).forEach((m) => { + dAttribute += `M${anchor[0]} ${1 - anchor[1]} C${handle[0]} ${1 - handle[1]}, ${m.handles[0][0]} ${1 - m.handles[0][1]}, ${m.anchor[0]} ${1 - m.anchor[1]} `; + anchor = m.anchor; + handle = m.handles[1]; }); return dAttribute; @@ -78,12 +78,12 @@ function handleManipulatorPointerDown(e: PointerEvent, i: number) { // Delete an anchor with RMB or MMB - if (e.button > 0 && i > 0 && i < groups.length - 1) { + if (e.button > 0 && i > 0 && i < manipulatorsList.length - 1) { draggedNodeIndex = undefined; selectedNodeIndex = undefined; - groups.splice(i, 1); - groups = groups; + manipulatorsList.splice(i, 1); + manipulatorsList = manipulatorsList; dAttribute = recalculateSvgPath(); @@ -109,12 +109,12 @@ } function clampHandles() { - for (let i = 0; i < groups.length - 1; i++) { - const [min, max] = [groups[i].anchor[0], groups[i + 1].anchor[0]]; + for (let i = 0; i < manipulatorsList.length - 1; i++) { + const [min, max] = [manipulatorsList[i].anchor[0], manipulatorsList[i + 1].anchor[0]]; for (let j = 0; j < 2; j++) { - groups[i + j].handles[1 - j][0] = clamp(groups[i + j].handles[1 - j][0], min, max); - groups[i + j].handles[1 - j][1] = clamp(groups[i + j].handles[1 - j][1]); + manipulatorsList[i + j].handles[1 - j][0] = clamp(manipulatorsList[i + j].handles[1 - j][0], min, max); + manipulatorsList[i + j].handles[1 - j][1] = clamp(manipulatorsList[i + j].handles[1 - j][1]); } } } @@ -128,10 +128,10 @@ const anchor = getSvgPositionFromPointerEvent(e); if (!anchor) return; - let nodeIndex = groups.findIndex((group) => group.anchor[0] > anchor[0]); - if (nodeIndex === -1) nodeIndex = groups.length; + let nodeIndex = manipulatorsList.findIndex((manipulators) => manipulators.anchor[0] > anchor[0]); + if (nodeIndex === -1) nodeIndex = manipulatorsList.length; - groups.splice(nodeIndex, 0, { + manipulatorsList.splice(nodeIndex, 0, { anchor: anchor, handles: [ [anchor[0] - 0.05, anchor[1]], @@ -145,7 +145,7 @@ } function setHandlePosition(anchorIndex: number, handleIndex: number, position: [number, number]) { - const { anchor, handles } = groups[anchorIndex]; + const { anchor, handles } = manipulatorsList[anchorIndex]; const otherHandle = handles[1 - handleIndex]; const handleVector = [anchor[0] - position[0], anchor[1] - position[1]]; @@ -158,26 +158,26 @@ } function handlePointerMove(e: PointerEvent) { - if (draggedNodeIndex === undefined || draggedNodeIndex === 0 || draggedNodeIndex === groups.length - 1) return; + if (draggedNodeIndex === undefined || draggedNodeIndex === 0 || draggedNodeIndex === manipulatorsList.length - 1) return; const position = getSvgPositionFromPointerEvent(e); if (!position) return; if (draggedNodeIndex > 0) { - position[0] = clamp(position[0], groups[draggedNodeIndex - 1].anchor[0], groups[draggedNodeIndex + 1].anchor[0]); + position[0] = clamp(position[0], manipulatorsList[draggedNodeIndex - 1].anchor[0], manipulatorsList[draggedNodeIndex + 1].anchor[0]); - const group = groups[draggedNodeIndex]; - group.handles = [ - [group.handles[0][0] + position[0] - group.anchor[0], group.handles[0][1] + position[1] - group.anchor[1]], - [group.handles[1][0] + position[0] - group.anchor[0], group.handles[1][1] + position[1] - group.anchor[1]], + const manipulators = manipulatorsList[draggedNodeIndex]; + manipulators.handles = [ + [manipulators.handles[0][0] + position[0] - manipulators.anchor[0], manipulators.handles[0][1] + position[1] - manipulators.anchor[1]], + [manipulators.handles[1][0] + position[0] - manipulators.anchor[0], manipulators.handles[1][1] + position[1] - manipulators.anchor[1]], ]; - group.anchor = position; + manipulators.anchor = position; } else { if (selectedNodeIndex === undefined) return; setHandlePosition(selectedNodeIndex, -draggedNodeIndex - 1, position); - const group = groups[selectedNodeIndex]; - if (group.handles[0][0] > group.anchor[0]) { - group.handles = [group.handles[1], group.handles[0]]; + const manipulators = manipulatorsList[selectedNodeIndex]; + if (manipulators.handles[0][0] > manipulators.anchor[0]) { + manipulators.handles = [manipulators.handles[1], manipulators.handles[0]]; draggedNodeIndex = -3 - draggedNodeIndex; } } @@ -196,14 +196,14 @@ {/each} {#if selectedNodeIndex !== undefined} - {@const group = groups[selectedNodeIndex]} + {@const m = manipulatorsList[selectedNodeIndex]} {#each [0, 1] as i} - - handleManipulatorPointerDown(e, -i - 1)} /> + + handleManipulatorPointerDown(e, -i - 1)} /> {/each} {/if} - {#each groups as group, i} - handleManipulatorPointerDown(e, i)} /> + {#each manipulatorsList as manipulators, i} + handleManipulatorPointerDown(e, i)} /> {/each} diff --git a/frontend/src/components/widgets/inputs/NumberInput.svelte b/frontend/src/components/widgets/inputs/NumberInput.svelte index 82a48a497d..acbea4bbea 100644 --- a/frontend/src/components/widgets/inputs/NumberInput.svelte +++ b/frontend/src/components/widgets/inputs/NumberInput.svelte @@ -365,6 +365,11 @@ cumulativeDragDelta = 0; document.exitPointerLock(); + + // Fallback for Safari in case pointerlockchange never fires + setTimeout(() => { + if (!document.pointerLockElement) pointerLockChange(); + }, 0); }; const pointerMove = (e: PointerEvent) => { // Abort the drag if right click is down. This works here because a "pointermove" event is fired when right clicking even if the cursor didn't move. diff --git a/frontend/src/components/widgets/inputs/SpectrumInput.svelte b/frontend/src/components/widgets/inputs/SpectrumInput.svelte index cabc70b455..6611614c5d 100644 --- a/frontend/src/components/widgets/inputs/SpectrumInput.svelte +++ b/frontend/src/components/widgets/inputs/SpectrumInput.svelte @@ -13,6 +13,7 @@ const dispatch = createEventDispatcher<{ activeMarkerIndexChange: number | undefined; gradient: Gradient; dragging: boolean }>(); export let gradient: Gradient; + export let disabled = false; export let activeMarkerIndex = 0 as number | undefined; // export let disabled = false; // export let tooltip: string | undefined = undefined; @@ -22,6 +23,8 @@ let deletionRestore: boolean | undefined = undefined; function markerPointerDown(e: PointerEvent, index: number) { + if (disabled) return; + // Left-click to select and begin potentially dragging if (e.button === BUTTON_LEFT) { activeMarkerIndex = index; @@ -47,6 +50,8 @@ } function insertStop(e: MouseEvent) { + if (disabled) return; + if (e.button !== BUTTON_LEFT) return; let position = markerPosition(e); @@ -79,6 +84,8 @@ } function deleteStop(e: KeyboardEvent) { + if (disabled) return; + if (e.key !== "Delete" && e.key !== "Backspace") return; if (activeMarkerIndex === undefined) return; @@ -88,6 +95,8 @@ } function deleteStopByIndex(index: number) { + if (disabled) return; + if (gradient.stops.length <= 2) return; gradient.stops.splice(index, 1); @@ -103,6 +112,8 @@ } function moveMarker(e: PointerEvent, index: number) { + if (disabled) return; + // Just in case the mouseup event is lost if (e.buttons === 0) stopDrag(); @@ -120,6 +131,8 @@ } export function setPosition(index: number, position: number) { + if (disabled) return; + const active = gradient.stops[index]; active.position = position; gradient.stops.sort((a, b) => a.position - b.position); @@ -131,6 +144,8 @@ } function abortDrag() { + if (disabled) return; + if (activeMarkerIndex === undefined) return; if (deletionRestore) { @@ -143,6 +158,8 @@ } function stopDrag() { + if (disabled) return; + removeEvents(); positionRestore = undefined; @@ -152,19 +169,27 @@ } function onPointerMove(e: PointerEvent) { + if (disabled) return; + if (activeMarkerIndex !== undefined) moveMarker(e, activeMarkerIndex); } function onPointerUp() { + if (disabled) return; + stopDrag(); } function onMouseDown(e: MouseEvent) { + if (disabled) return; + const BUTTONS_RIGHT = 0b0000_0010; if (e.buttons & BUTTONS_RIGHT) abortDrag(); } function onKeyDown(e: KeyboardEvent) { + if (disabled) return; + if (e.key === "Escape") { const element = markerTrack?.div(); if (element) preventEscapeClosingParentFloatingMenu(element); @@ -193,25 +218,28 @@ document.removeEventListener("keydown", deleteStop); }); + // Future design notes: + // // # Backend -> Frontend // Populate(gradient, { position, color }[], active) // The only way indexes get changed. Frontend drops marker if it's being dragged. // UpdateGradient(gradient) // UpdateMarkers({ index, position, color }[]) - + // // # Frontend -> Backend // SendNewActive(index) // SendPositions({ index, position }[]) // AddMarker(position) // RemoveMarkers(index[]) // ResetMarkerToDefault(index) - - // // We need a way to encode constraints on some markers, like locking them in place or preventing reordering - // // We need a way to encode the allowability of adding new markers between certain markers, or preventing the deletion of certain markers - // // We need the ability to multi-select markers and move them all at once + // + // We need a way to encode constraints on some markers, like locking them in place or preventing reordering + // We need a way to encode the allowability of adding new markers between certain markers, or preventing the deletion of certain markers + // We need the ability to multi-select markers and move them all at once + {#if disabled} + + {/if} 0 ? { "min-width": `${minWidth}px` } : {}) }} + styles={{ + ...(minWidth > 0 ? { "min-width": `${minWidth}px` } : {}), + ...(maxWidth > 0 ? { "max-width": `${maxWidth}px` } : {}), + }} {value} on:value on:textFocused={onTextFocused} diff --git a/frontend/src/components/widgets/labels/ImageLabel.svelte b/frontend/src/components/widgets/labels/ImageLabel.svelte new file mode 100644 index 0000000000..64536c99d5 --- /dev/null +++ b/frontend/src/components/widgets/labels/ImageLabel.svelte @@ -0,0 +1,32 @@ + + + + + diff --git a/frontend/src/components/widgets/labels/TextLabel.svelte b/frontend/src/components/widgets/labels/TextLabel.svelte index 540aa16489..ca845047af 100644 --- a/frontend/src/components/widgets/labels/TextLabel.svelte +++ b/frontend/src/components/widgets/labels/TextLabel.svelte @@ -8,12 +8,13 @@ export let disabled = false; export let bold = false; export let italic = false; + export let monospace = false; export let centerAlign = false; export let tableAlign = false; - export let minWidth = 0; + export let minWidth = ""; export let multiline = false; export let tooltip: string | undefined = undefined; - export let checkboxId: bigint | undefined = undefined; + export let forCheckbox: bigint | undefined = undefined; $: extraClasses = Object.entries(classes) .flatMap(([className, stateName]) => (stateName ? [className] : [])) @@ -28,13 +29,14 @@ class:disabled class:bold class:italic + class:monospace class:multiline class:center-align={centerAlign} class:table-align={tableAlign} - style:min-width={minWidth > 0 ? `${minWidth}px` : undefined} + style:min-width={minWidth || undefined} style={`${styleName} ${extraStyles}`.trim() || undefined} title={tooltip} - for={checkboxId !== undefined ? `checkbox-input-${checkboxId}` : undefined} + for={forCheckbox !== undefined ? `checkbox-input-${forCheckbox}` : undefined} > @@ -58,6 +60,11 @@ font-style: italic; } + &.monospace { + font-family: "Source Code Pro", monospace; + font-size: 12px; + } + &.multiline { white-space: pre-wrap; margin: 4px 0; diff --git a/frontend/src/components/widgets/labels/UserInputLabel.svelte b/frontend/src/components/widgets/labels/UserInputLabel.svelte index f19d99d5e0..863ec33e59 100644 --- a/frontend/src/components/widgets/labels/UserInputLabel.svelte +++ b/frontend/src/components/widgets/labels/UserInputLabel.svelte @@ -183,7 +183,8 @@ display: flex; justify-content: center; align-items: center; - font-family: "Inconsolata", monospace; + font-family: "Source Code Pro", monospace; + font-size: 12px; font-weight: 400; text-align: center; height: 16px; diff --git a/frontend/src/components/window/MainWindow.svelte b/frontend/src/components/window/MainWindow.svelte index 971f571cb8..6e95fdfd7d 100644 --- a/frontend/src/components/window/MainWindow.svelte +++ b/frontend/src/components/window/MainWindow.svelte @@ -1,18 +1,17 @@ - - - + diff --git a/frontend/src/components/window/title-bar/TitleBar.svelte b/frontend/src/components/window/title-bar/TitleBar.svelte index a41b26d0bc..dc204569a1 100644 --- a/frontend/src/components/window/title-bar/TitleBar.svelte +++ b/frontend/src/components/window/title-bar/TitleBar.svelte @@ -1,23 +1,20 @@ - - + + editor.handle.appWindowMinimize()}> + + + editor.handle.appWindowMaximize()}> + + + editor.handle.appWindowClose()}> + + + + diff --git a/frontend/src/components/window/title-bar/WindowButtonsMac.svelte b/frontend/src/components/window/title-bar/WindowButtonsMac.svelte index d48a6d83b3..574c1eabd1 100644 --- a/frontend/src/components/window/title-bar/WindowButtonsMac.svelte +++ b/frontend/src/components/window/title-bar/WindowButtonsMac.svelte @@ -1,13 +1,17 @@ -
-
-
+
editor.handle.appWindowClose()} /> +
editor.handle.appWindowMinimize()} /> +
editor.handle.appWindowMaximize()} /> diff --git a/frontend/src/components/window/workspace/Workspace.svelte b/frontend/src/components/window/workspace/Workspace.svelte index 4d22dd5634..896078443b 100644 --- a/frontend/src/components/window/workspace/Workspace.svelte +++ b/frontend/src/components/window/workspace/Workspace.svelte @@ -16,7 +16,7 @@ /**/ root: 100, /* โ”œโ”€ */ content: 80, /* โ”‚ โ”œโ”€ */ document: 70, - /* โ”‚ โ””โ”€ */ spreadsheet: 30, + /* โ”‚ โ””โ”€ */ data: 30, /* โ””โ”€ */ details: 20, /* โ”œโ”€ */ properties: 45, /* โ””โ”€ */ layers: 55, @@ -137,6 +137,7 @@ 0 ? "Document" : undefined} tabCloseButtons={true} tabMinWidths={true} @@ -147,23 +148,31 @@ bind:this={documentPanel} /> - {#if $portfolio.spreadsheetOpen} + {#if $portfolio.dataPanelOpen} resizePanel(e)} /> - - + + {/if} - resizePanel(e)} /> - - - - - resizePanel(e)} /> - - - - + {#if $portfolio.propertiesPanelOpen || $portfolio.layersPanelOpen} + resizePanel(e)} /> + + {#if $portfolio.propertiesPanelOpen} + + + + {/if} + {#if $portfolio.propertiesPanelOpen && $portfolio.layersPanelOpen} + resizePanel(e)} /> + {/if} + {#if $portfolio.layersPanelOpen} + + + + {/if} + + {/if} {#if $dialog.visible} @@ -176,8 +185,9 @@ flex: 1 1 100%; .workspace-grid-subdivision { - min-height: 28px; + position: relative; flex: 1 1 0; + min-height: 28px; &.folded { flex-grow: 0; @@ -196,5 +206,15 @@ cursor: ew-resize; } } + + // Needed for the viewport hole punch on desktop + .viewport-hole-punch & .workspace-grid-subdivision:has(.panel.document-panel)::after { + content: ""; + position: absolute; + inset: 6px; + border-radius: 6px; + box-shadow: 0 0 0 calc(100vw + 100vh) var(--color-2-mildblack); + z-index: -1; + } } diff --git a/frontend/src/editor.ts b/frontend/src/editor.ts index 7dd6a98951..0eacb4f76d 100644 --- a/frontend/src/editor.ts +++ b/frontend/src/editor.ts @@ -1,7 +1,7 @@ // import { panicProxy } from "@graphite/utility-functions/panic-proxy"; import { type JsMessageType } from "@graphite/messages"; import { createSubscriptionRouter, type SubscriptionRouter } from "@graphite/subscription-router"; -import init, { setRandomSeed, wasmMemory, EditorHandle } from "@graphite-frontend/wasm/pkg/graphite_wasm.js"; +import init, { setRandomSeed, wasmMemory, EditorHandle, receiveNativeMessage } from "@graphite-frontend/wasm/pkg/graphite_wasm.js"; export type Editor = { raw: WebAssembly.Memory; @@ -27,6 +27,8 @@ export async function initWasm() { wasmImport = await wasmMemory(); // eslint-disable-next-line @typescript-eslint/no-explicit-any (window as any).imageCanvases = {}; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (window as any).receiveNativeMessage = receiveNativeMessage; // Provide a random starter seed which must occur after initializing the WASM module, since WASM can't generate its own random numbers const randomSeedFloat = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); diff --git a/frontend/src/io-managers/input.ts b/frontend/src/io-managers/input.ts index aee4091c8b..f0ac34db0c 100644 --- a/frontend/src/io-managers/input.ts +++ b/frontend/src/io-managers/input.ts @@ -43,7 +43,7 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli // eslint-disable-next-line @typescript-eslint/no-explicit-any const listeners: { target: EventListenerTarget; eventName: EventName; action: (event: any) => void; options?: AddEventListenerOptions }[] = [ - { target: window, eventName: "resize", action: () => updateBoundsOfViewports(editor, window.document.body) }, + { target: window, eventName: "resize", action: () => updateBoundsOfViewports(editor) }, { target: window, eventName: "beforeunload", action: (e: BeforeUnloadEvent) => onBeforeUnload(e) }, { target: window, eventName: "keyup", action: (e: KeyboardEvent) => onKeyUp(e) }, { target: window, eventName: "keydown", action: (e: KeyboardEvent) => onKeyDown(e) }, @@ -169,7 +169,7 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli potentiallyRestoreCanvasFocus(e); const { target } = e; - const isTargetingCanvas = target instanceof Element && target.closest("[data-viewport], [data-node-graph]"); + const isTargetingCanvas = target instanceof Element && target.closest("[data-viewport], [data-viewport-container], [data-node-graph]"); const inDialog = target instanceof Element && target.closest("[data-dialog] [data-floating-menu-content]"); const inContextMenu = target instanceof Element && target.closest("[data-context-menu]"); const inTextInput = target === textToolInteractiveInputElement; @@ -219,7 +219,7 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli // Allow only events within the viewport or node graph boundaries const { target } = e; - const isTargetingCanvas = target instanceof Element && target.closest("[data-viewport], [data-node-graph]"); + const isTargetingCanvas = target instanceof Element && target.closest("[data-viewport], [data-viewport-container], [data-node-graph]"); if (!(isTargetingCanvas instanceof Element)) return; // Allow only repeated increments of double-clicks (not 1, 3, 5, etc.) @@ -256,7 +256,7 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli function onWheelScroll(e: WheelEvent) { const { target } = e; - const isTargetingCanvas = target instanceof Element && target.closest("[data-viewport], [data-node-graph]"); + const isTargetingCanvas = target instanceof Element && target.closest("[data-viewport], [data-viewport-container], [data-node-graph]"); // Redirect vertical scroll wheel movement into a horizontal scroll on a horizontally scrollable element // There seems to be no possible way to properly employ the browser's smooth scrolling interpolation @@ -303,13 +303,19 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli if (!dataTransfer || targetIsTextField(e.target || undefined)) return; e.preventDefault(); + const LAYER_DATA = "graphite/layer: "; + const NODES_DATA = "graphite/nodes: "; + const VECTOR_DATA = "graphite/vector: "; + Array.from(dataTransfer.items).forEach(async (item) => { if (item.type === "text/plain") { item.getAsString((text) => { - if (text.startsWith("graphite/layer: ")) { - editor.handle.pasteSerializedData(text.substring(16, text.length)); - } else if (text.startsWith("graphite/nodes: ")) { - editor.handle.pasteSerializedNodes(text.substring(16, text.length)); + if (text.startsWith(LAYER_DATA)) { + editor.handle.pasteSerializedData(text.substring(LAYER_DATA.length, text.length)); + } else if (text.startsWith(NODES_DATA)) { + editor.handle.pasteSerializedNodes(text.substring(NODES_DATA.length, text.length)); + } else if (text.startsWith(VECTOR_DATA)) { + editor.handle.pasteSerializedVector(text.substring(VECTOR_DATA.length, text.length)); } }); } @@ -328,8 +334,11 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli editor.handle.pasteImage(file.name, new Uint8Array(imageData.data), imageData.width, imageData.height); } - if (file.name.endsWith(".graphite")) { - editor.handle.openDocumentFile(file.name, await file.text()); + const graphiteFileSuffix = "." + editor.handle.fileExtension(); + if (file.name.endsWith(graphiteFileSuffix)) { + const content = await file.text(); + const documentName = file.name.slice(0, -graphiteFileSuffix.length); + editor.handle.openDocumentFile(documentName, content); } }); } @@ -502,7 +511,9 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli function potentiallyRestoreCanvasFocus(e: Event) { const { target } = e; - const newInCanvasArea = (target instanceof Element && target.closest("[data-viewport], [data-graph]")) instanceof Element && !targetIsTextField(window.document.activeElement || undefined); + const newInCanvasArea = + (target instanceof Element && target.closest("[data-viewport], [data-viewport-container], [data-graph]")) instanceof Element && + !targetIsTextField(window.document.activeElement || undefined); if (!canvasFocused && newInCanvasArea) { canvasFocused = true; app?.focus(); @@ -514,7 +525,7 @@ export function createInputManager(editor: Editor, dialog: DialogState, portfoli // Bind the event listeners bindListeners(); // Resize on creation - updateBoundsOfViewports(editor, window.document.body); + updateBoundsOfViewports(editor); // Return the destructor return unbindListeners; diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 8ab407bbee..1e46fa6155 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -1,12 +1,5 @@ // This file is the browser's entry point for the JS bundle -// Fonts -import "@fontsource/inconsolata"; -import "@fontsource/source-sans-pro/400-italic.css"; -import "@fontsource/source-sans-pro/400.css"; -import "@fontsource/source-sans-pro/700-italic.css"; -import "@fontsource/source-sans-pro/700.css"; - // `reflect-metadata` allows for runtime reflection of types in JavaScript. // It is needed for class-transformer to work and is imported as a side effect. // The library replaces the Reflect API on the window to support more features. diff --git a/frontend/src/messages.ts b/frontend/src/messages.ts index 28b777f806..5d1f30a6bc 100644 --- a/frontend/src/messages.ts +++ b/frontend/src/messages.ts @@ -12,12 +12,6 @@ export class JsMessage { } const TupleToVec2 = Transform(({ value }: { value: [number, number] | undefined }) => (value === undefined ? undefined : { x: value[0], y: value[1] })); -const ImportsToVec2Array = Transform(({ obj: { imports } }: { obj: { imports: [FrontendGraphOutput, number, number][] } }) => - imports.map(([outputMetadata, x, y]) => ({ outputMetadata, position: { x, y } })), -); -const ExportsToVec2Array = Transform(({ obj: { exports } }: { obj: { exports: [FrontendGraphInput, number, number][] } }) => - exports.map(([inputMetadata, x, y]) => ({ inputMetadata, position: { x, y } })), -); // const BigIntTupleToVec2 = Transform(({ value }: { value: [bigint, bigint] | undefined }) => (value === undefined ? undefined : { x: Number(value[0]), y: Number(value[1]) })); @@ -58,17 +52,17 @@ export class UpdateContextMenuInformation extends JsMessage { } export class UpdateImportsExports extends JsMessage { - @ImportsToVec2Array - readonly imports!: { outputMetadata: FrontendGraphOutput; position: XY }[]; + readonly imports!: (FrontendGraphOutput | undefined)[]; - @ExportsToVec2Array - readonly exports!: { inputMetadata: FrontendGraphInput; position: XY }[]; + readonly exports!: (FrontendGraphInput | undefined)[]; @TupleToVec2 - readonly addImport!: XY | undefined; + readonly importPosition!: XY; @TupleToVec2 - readonly addExport!: XY | undefined; + readonly exportPosition!: XY; + + readonly addImportExport!: boolean; } export class UpdateInSelectedNetwork extends JsMessage { @@ -180,7 +174,7 @@ export class Box { export type FrontendClickTargets = { readonly nodeClickTargets: string[]; readonly layerClickTargets: string[]; - readonly portClickTargets: string[]; + readonly connectorClickTargets: string[]; readonly iconClickTargets: string[]; readonly allNodesBoundingBox: string; readonly importExportsBoundingBox: string; @@ -192,30 +186,7 @@ export type ContextMenuInformation = { contextMenuData: "CreateNode" | { type: "CreateNode"; compatibleType: string } | { nodeId: bigint; currentlyIsNode: boolean }; }; -export type FrontendGraphDataType = "General" | "Raster" | "VectorData" | "Number" | "Group" | "Artboard"; - -export class Node { - readonly index!: bigint; - // Omitted if this Node is an Import or Export to/from the node network - readonly nodeId?: bigint; -} - -const CreateOutputConnectorOptional = Transform(({ obj }) => { - if (obj.connectedTo == undefined) { - return undefined; - } - if (obj.connectedTo?.export !== undefined) { - return { index: obj.connectedTo?.export }; - } else if (obj.connectedTo?.import !== undefined) { - return { index: obj.connectedTo?.import }; - } else { - if (obj.connectedTo?.node.inputIndex !== undefined) { - return { nodeId: obj.connectedTo?.node.nodeId, index: obj.connectedTo?.node.inputIndex }; - } else { - return { nodeId: obj.connectedTo?.node.nodeId, index: obj.connectedTo?.node.outputIndex }; - } - } -}); +export type FrontendGraphDataType = "General" | "Number" | "Artboard" | "Graphic" | "Raster" | "Vector" | "Color"; export class FrontendGraphInput { readonly dataType!: FrontendGraphDataType; @@ -228,28 +199,9 @@ export class FrontendGraphInput { readonly validTypes!: string[]; - @CreateOutputConnectorOptional - connectedTo!: Node | undefined; + readonly connectedTo!: string; } -const CreateInputConnectorArray = Transform(({ obj }) => { - const newInputConnectors: Node[] = []; - obj.connectedTo.forEach((connector: any) => { - if (connector.export !== undefined) { - newInputConnectors.push({ index: connector.export }); - } else if (connector.import !== undefined) { - newInputConnectors.push({ index: connector.import }); - } else { - if (connector.node.inputIndex !== undefined) { - newInputConnectors.push({ nodeId: connector.node.nodeId, index: connector.node.inputIndex }); - } else { - newInputConnectors.push({ nodeId: connector.node.nodeId, index: connector.node.outputIndex }); - } - } - }); - return newInputConnectors; -}); - export class FrontendGraphOutput { readonly dataType!: FrontendGraphDataType; @@ -259,8 +211,7 @@ export class FrontendGraphOutput { readonly resolvedType!: string; - @CreateInputConnectorArray - connectedTo!: Node[]; + readonly connectedTo!: string[]; } export class FrontendNode { @@ -274,20 +225,20 @@ export class FrontendNode { readonly displayName!: string; - @Type(() => FrontendGraphInput) readonly primaryInput!: FrontendGraphInput | undefined; - @Type(() => FrontendGraphInput) readonly exposedInputs!: FrontendGraphInput[]; - @Type(() => FrontendGraphOutput) readonly primaryOutput!: FrontendGraphOutput | undefined; - @Type(() => FrontendGraphOutput) readonly exposedOutputs!: FrontendGraphOutput[]; + readonly primaryInputConnectedToLayer!: boolean; + + readonly primaryOutputConnectedToLayer!: boolean; + @TupleToVec2 - readonly position!: XY | undefined; + readonly position!: XY; // TODO: Store field for the width of the left node chain @@ -298,8 +249,6 @@ export class FrontendNode { readonly unlocked!: boolean; readonly errors!: string | undefined; - - readonly uiOnly!: boolean; } export class FrontendNodeType { @@ -349,6 +298,24 @@ export class TriggerIndexedDbRemoveDocument extends JsMessage { documentId!: string; } +export type AppWindowPlatform = "Web" | "Windows" | "Mac" | "Linux"; + +export class UpdatePlatform extends JsMessage { + @Transform(({ value }: { value: AppWindowPlatform }) => value) + readonly platform!: AppWindowPlatform; +} + +export class UpdateWindowState extends JsMessage { + readonly maximized!: boolean; + readonly minimized!: boolean; +} + +export class CloseWindow extends JsMessage {} + +export class UpdateViewportHolePunch extends JsMessage { + readonly active!: boolean; +} + export class UpdateInputHints extends JsMessage { @Type(() => HintInfo) readonly hintData!: HintData; @@ -501,7 +468,7 @@ export class Color { const canvas = document.createElement("canvas"); canvas.width = 1; canvas.height = 1; - const context = canvas.getContext("2d"); + const context = canvas.getContext("2d", { willReadFrequently: true }); if (!context) return undefined; context.clearRect(0, 0, 1, 1); @@ -748,10 +715,16 @@ export class UpdateGraphFadeArtwork extends JsMessage { readonly percentage!: number; } -export class UpdateSpreadsheetState extends JsMessage { +export class UpdateDataPanelState extends JsMessage { readonly open!: boolean; +} - readonly node!: bigint | undefined; +export class UpdatePropertiesPanelState extends JsMessage { + readonly open!: boolean; +} + +export class UpdateLayersPanelState extends JsMessage { + readonly open!: boolean; } export class UpdateMouseCursor extends JsMessage { @@ -776,9 +749,17 @@ export class TriggerImport extends JsMessage {} export class TriggerPaste extends JsMessage {} -export class TriggerDelayedZoomCanvasToFitAll extends JsMessage {} +export class TriggerSaveDocument extends JsMessage { + readonly documentId!: bigint; -export class TriggerDownloadImage extends JsMessage { + readonly name!: string; + + readonly path!: string | undefined; + + readonly content!: ArrayBuffer; +} + +export class TriggerExportImage extends JsMessage { readonly svg!: string; readonly name!: string; @@ -789,10 +770,10 @@ export class TriggerDownloadImage extends JsMessage { readonly size!: XY; } -export class TriggerDownloadTextFile extends JsMessage { - readonly document!: string; - +export class TriggerSaveFile extends JsMessage { readonly name!: string; + + readonly content!: ArrayBuffer; } export class TriggerSavePreferences extends JsMessage { @@ -814,6 +795,8 @@ export class UpdateDocumentLayerStructureJs extends JsMessage { readonly dataBuffer!: DataBuffer; } +export type TextAlign = "Left" | "Center" | "Right" | "JustifyLeft"; + export class DisplayEditableTextbox extends JsMessage { readonly text!: string; @@ -831,6 +814,8 @@ export class DisplayEditableTextbox extends JsMessage { readonly maxWidth!: undefined | number; readonly maxHeight!: undefined | number; + + readonly align!: TextAlign; } export class DisplayEditableTextboxTransform extends JsMessage { @@ -913,6 +898,8 @@ export class TriggerAboutGraphiteLocalizedCommitDate extends JsMessage { readonly commitDate!: string; } +export class TriggerDisplayThirdPartyLicensesDialog extends JsMessage {} + // WIDGET PROPS export abstract class WidgetProps { @@ -954,9 +941,11 @@ export class ColorInput extends WidgetProps { }) value!: FillChoice; + allowNone!: boolean; + disabled!: boolean; - allowNone!: boolean; + menuDirection!: MenuDirection | undefined; // allowTransparency!: boolean; // TODO: Implement @@ -1113,6 +1102,19 @@ export class ImageButton extends WidgetProps { tooltip!: string | undefined; } +export class ImageLabel extends WidgetProps { + url!: string; + + @Transform(({ value }: { value: string }) => value || undefined) + width!: string | undefined; + + @Transform(({ value }: { value: string }) => value || undefined) + height!: string | undefined; + + @Transform(({ value }: { value: string }) => value || undefined) + tooltip!: string | undefined; +} + export type NumberInputIncrementBehavior = "Add" | "Multiply" | "Callback" | "None"; export type NumberInputMode = "Increment" | "Range"; @@ -1305,6 +1307,8 @@ export class TextInput extends WidgetProps { minWidth!: number; + maxWidth!: number; + @Transform(({ value }: { value: string }) => value || undefined) tooltip!: string | undefined; } @@ -1320,18 +1324,20 @@ export class TextLabel extends WidgetProps { italic!: boolean; + monospace!: boolean; + + multiline!: boolean; + centerAlign!: boolean; tableAlign!: boolean; - minWidth!: number; - - multiline!: boolean; + minWidth!: string; @Transform(({ value }: { value: string }) => value || undefined) tooltip!: string | undefined; - checkboxId!: bigint | undefined; + forCheckbox!: bigint | undefined; } export type ReferencePoint = "None" | "TopLeft" | "TopCenter" | "TopRight" | "CenterLeft" | "Center" | "CenterRight" | "BottomLeft" | "BottomCenter" | "BottomRight"; @@ -1356,6 +1362,7 @@ const widgetSubTypes = [ { value: FontInput, name: "FontInput" }, { value: IconButton, name: "IconButton" }, { value: ImageButton, name: "ImageButton" }, + { value: ImageLabel, name: "ImageLabel" }, { value: IconLabel, name: "IconLabel" }, { value: NodeCatalog, name: "NodeCatalog" }, { value: NumberInput, name: "NumberInput" }, @@ -1445,11 +1452,11 @@ export function patchWidgetLayout(layout: /* &mut */ WidgetLayout, updates: Widg updates.diff.forEach((update) => { // Find the object where the diff applies to - const diffObject = update.widgetPath.reduce((targetLayout, index) => { - if ("columnWidgets" in targetLayout) return targetLayout.columnWidgets[index]; - if ("rowWidgets" in targetLayout) return targetLayout.rowWidgets[index]; - if ("tableWidgets" in targetLayout) return targetLayout.tableWidgets[index]; - if ("layout" in targetLayout) return targetLayout.layout[index]; + const diffObject = update.widgetPath.reduce((targetLayout: UIItem | undefined, index: number): UIItem | undefined => { + if (targetLayout && "columnWidgets" in targetLayout) return targetLayout.columnWidgets[index]; + if (targetLayout && "rowWidgets" in targetLayout) return targetLayout.rowWidgets[index]; + if (targetLayout && "tableWidgets" in targetLayout) return targetLayout.tableWidgets[index]; + if (targetLayout && "layout" in targetLayout) return targetLayout.layout[index]; if (targetLayout instanceof Widget) { if (targetLayout.props.kind === "PopoverButton" && targetLayout.props instanceof PopoverButton && targetLayout.props.popoverLayout) { return targetLayout.props.popoverLayout[index]; @@ -1460,10 +1467,21 @@ export function patchWidgetLayout(layout: /* &mut */ WidgetLayout, updates: Widg } // This is a path traversal so we can assume from the backend that it exists // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - if ("action" in targetLayout) return targetLayout.children![index]; - return targetLayout[index]; + if (targetLayout && "action" in targetLayout) return targetLayout.children![index]; + + return targetLayout?.[index]; }, layout.layout as UIItem); + // Exit if we failed to produce a valid patch for the existing layout. + // This means that the backend assumed an existing layout that doesn't exist in the frontend. This can happen, for + // example, if a panel is destroyed in the frontend but was never cleared in the backend, so the next time the backend + // tries to update the layout, it attempts to insert only the changes against the old layout that no longer exists. + if (diffObject === undefined) { + // eslint-disable-next-line no-console + console.error("In `patchWidgetLayout`, the `diffObject` is undefined. The layout has not been updated. See the source code comment above this error for hints."); + return; + } + // If this is a list with a length, then set the length to 0 to clear the list if ("length" in diffObject) { diffObject.length = 0; @@ -1586,9 +1604,9 @@ export class UpdateMenuBarLayout extends JsMessage { export class UpdateNodeGraphControlBarLayout extends WidgetDiffUpdate {} -export class UpdatePropertyPanelSectionsLayout extends WidgetDiffUpdate {} +export class UpdatePropertiesPanelLayout extends WidgetDiffUpdate {} -export class UpdateSpreadsheetLayout extends WidgetDiffUpdate {} +export class UpdateDataPanelLayout extends WidgetDiffUpdate {} export class UpdateToolOptionsLayout extends WidgetDiffUpdate {} @@ -1630,9 +1648,10 @@ export const messageMakers: Record = { DisplayRemoveEditableTextbox, SendUIMetadata, TriggerAboutGraphiteLocalizedCommitDate, - TriggerDelayedZoomCanvasToFitAll, - TriggerDownloadImage, - TriggerDownloadTextFile, + TriggerDisplayThirdPartyLicensesDialog, + TriggerSaveDocument, + TriggerSaveFile, + TriggerExportImage, TriggerFetchAndOpenDocument, TriggerFontLoad, TriggerImport, @@ -1666,29 +1685,34 @@ export const messageMakers: Record = { UpdateEyedropperSamplingState, UpdateGraphFadeArtwork, UpdateGraphViewOverlay, - UpdateSpreadsheetState, UpdateImportReorderIndex, UpdateImportsExports, UpdateInputHints, UpdateInSelectedNetwork, + UpdateLayersPanelBottomBarLayout, UpdateLayersPanelControlBarLeftLayout, UpdateLayersPanelControlBarRightLayout, - UpdateLayersPanelBottomBarLayout, UpdateLayerWidths, + UpdateWindowState, UpdateMenuBarLayout, UpdateMouseCursor, - UpdateNodeGraphNodes, - UpdateVisibleNodes, - UpdateNodeGraphWires, - UpdateNodeGraphTransform, UpdateNodeGraphControlBarLayout, + UpdateNodeGraphNodes, UpdateNodeGraphSelection, + UpdateNodeGraphTransform, + UpdateNodeGraphWires, UpdateNodeThumbnail, UpdateOpenDocumentsList, - UpdatePropertyPanelSectionsLayout, - UpdateSpreadsheetLayout, + UpdatePlatform, + UpdatePropertiesPanelLayout, + UpdateDataPanelLayout, + UpdateDataPanelState, + UpdatePropertiesPanelState, + UpdateLayersPanelState, UpdateToolOptionsLayout, UpdateToolShelfLayout, + UpdateViewportHolePunch, + UpdateVisibleNodes, UpdateWirePathInProgress, UpdateWorkingColorsLayout, } as const; diff --git a/frontend/src/state-providers/app-window.ts b/frontend/src/state-providers/app-window.ts new file mode 100644 index 0000000000..5bef32b114 --- /dev/null +++ b/frontend/src/state-providers/app-window.ts @@ -0,0 +1,40 @@ +/* eslint-disable max-classes-per-file */ + +import { writable } from "svelte/store"; + +import { type Editor } from "@graphite/editor"; +import { type AppWindowPlatform, UpdatePlatform, UpdateViewportHolePunch, UpdateWindowState } from "@graphite/messages"; + +// eslint-disable-next-line @typescript-eslint/explicit-function-return-type +export function createAppWindowState(editor: Editor) { + const { subscribe, update } = writable({ + platform: "Web" as AppWindowPlatform, + maximized: false, + viewportHolePunch: false, + }); + + // Set up message subscriptions on creation + editor.subscriptions.subscribeJsMessage(UpdatePlatform, (updatePlatform) => { + update((state) => { + state.platform = updatePlatform.platform; + return state; + }); + }); + editor.subscriptions.subscribeJsMessage(UpdateWindowState, (updateWindowState) => { + update((state) => { + state.maximized = updateWindowState.maximized; + return state; + }); + }); + editor.subscriptions.subscribeJsMessage(UpdateViewportHolePunch, (viewportHolePunch) => { + update((state) => { + state.viewportHolePunch = viewportHolePunch.active; + return state; + }); + }); + + return { + subscribe, + }; +} +export type AppWindowState = ReturnType; diff --git a/frontend/src/state-providers/dialog.ts b/frontend/src/state-providers/dialog.ts index 1e2da232a3..57a6c7e50d 100644 --- a/frontend/src/state-providers/dialog.ts +++ b/frontend/src/state-providers/dialog.ts @@ -1,7 +1,16 @@ import { writable } from "svelte/store"; import { type Editor } from "@graphite/editor"; -import { defaultWidgetLayout, DisplayDialog, DisplayDialogDismiss, UpdateDialogButtons, UpdateDialogColumn1, UpdateDialogColumn2, patchWidgetLayout } from "@graphite/messages"; +import { + defaultWidgetLayout, + DisplayDialog, + DisplayDialogDismiss, + UpdateDialogButtons, + UpdateDialogColumn1, + UpdateDialogColumn2, + patchWidgetLayout, + TriggerDisplayThirdPartyLicensesDialog, +} from "@graphite/messages"; import { type IconName } from "@graphite/utility-functions/icons"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type @@ -78,6 +87,17 @@ export function createDialogState(editor: Editor) { }); editor.subscriptions.subscribeJsMessage(DisplayDialogDismiss, dismissDialog); + editor.subscriptions.subscribeJsMessage(TriggerDisplayThirdPartyLicensesDialog, async () => { + const BACKUP_URL = "https://editor.graphite.rs/third-party-licenses.txt"; + let licenseText = `Content was not able to load. Please check your network connection and try again.\n\nOr visit ${BACKUP_URL} for the license notices.`; + if (editor.handle.inDevelopmentMode()) licenseText = `Third-party licenses are not available in development builds.\n\nVisit ${BACKUP_URL} for the license notices.`; + + const response = await fetch("/third-party-licenses.txt"); + if (response.ok && response.headers.get("Content-Type")?.includes("text/plain")) licenseText = await response.text(); + + editor.handle.requestLicensesThirdPartyDialogWithLicenseText(licenseText); + }); + return { subscribe, dismissDialog, diff --git a/frontend/src/state-providers/document.ts b/frontend/src/state-providers/document.ts index c9ab1f2b5d..2a8afa666e 100644 --- a/frontend/src/state-providers/document.ts +++ b/frontend/src/state-providers/document.ts @@ -13,7 +13,6 @@ import { UpdateWorkingColorsLayout, UpdateNodeGraphControlBarLayout, UpdateGraphViewOverlay, - TriggerDelayedZoomCanvasToFitAll, UpdateGraphFadeArtwork, } from "@graphite/messages"; @@ -94,12 +93,6 @@ export function createDocumentState(editor: Editor) { return state; }); }); - editor.subscriptions.subscribeJsMessage(TriggerDelayedZoomCanvasToFitAll, () => { - // TODO: This is horribly hacky - [0, 1, 10, 50, 100, 200, 300, 400, 500].forEach((delay) => { - setTimeout(() => editor.handle.zoomCanvasToFitAll(), delay); - }); - }); return { subscribe, diff --git a/frontend/src/state-providers/node-graph.ts b/frontend/src/state-providers/node-graph.ts index 9884659340..9160ad13aa 100644 --- a/frontend/src/state-providers/node-graph.ts +++ b/frontend/src/state-providers/node-graph.ts @@ -1,7 +1,6 @@ import { writable } from "svelte/store"; import { type Editor } from "@graphite/editor"; -import type { FrontendGraphOutput, FrontendGraphInput } from "@graphite/messages"; import { type Box, type FrontendClickTargets, @@ -37,10 +36,7 @@ export function createNodeGraphState(editor: Editor) { layerWidths: new Map(), chainWidths: new Map(), hasLeftInputWire: new Map(), - imports: [] as { outputMetadata: FrontendGraphOutput; position: { x: number; y: number } }[], - exports: [] as { inputMetadata: FrontendGraphInput; position: { x: number; y: number } }[], - addImport: undefined as { x: number; y: number } | undefined, - addExport: undefined as { x: number; y: number } | undefined, + updateImportsExports: undefined as UpdateImportsExports | undefined, nodes: new Map(), visibleNodes: new Set(), /// The index is the exposed input index. The exports have a first key value of u32::MAX. @@ -96,10 +92,7 @@ export function createNodeGraphState(editor: Editor) { }); editor.subscriptions.subscribeJsMessage(UpdateImportsExports, (updateImportsExports) => { update((state) => { - state.imports = updateImportsExports.imports; - state.exports = updateImportsExports.exports; - state.addImport = updateImportsExports.addImport; - state.addExport = updateImportsExports.addExport; + state.updateImportsExports = updateImportsExports; return state; }); }); diff --git a/frontend/src/state-providers/portfolio.ts b/frontend/src/state-providers/portfolio.ts index f425ba17d4..0c3d5ad364 100644 --- a/frontend/src/state-providers/portfolio.ts +++ b/frontend/src/state-providers/portfolio.ts @@ -6,18 +6,18 @@ import { type Editor } from "@graphite/editor"; import { type FrontendDocumentDetails, TriggerFetchAndOpenDocument, - TriggerDownloadImage, - TriggerDownloadTextFile, + TriggerSaveDocument, + TriggerExportImage, + TriggerSaveFile, TriggerImport, TriggerOpenDocument, UpdateActiveDocument, UpdateOpenDocumentsList, - UpdateSpreadsheetState, - defaultWidgetLayout, - patchWidgetLayout, - UpdateSpreadsheetLayout, + UpdateDataPanelState, + UpdatePropertiesPanelState, + UpdateLayersPanelState, } from "@graphite/messages"; -import { downloadFileText, downloadFileBlob, upload } from "@graphite/utility-functions/files"; +import { downloadFile, downloadFileBlob, upload } from "@graphite/utility-functions/files"; import { extractPixelData, rasterizeSVG } from "@graphite/utility-functions/rasterization"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type @@ -26,9 +26,9 @@ export function createPortfolioState(editor: Editor) { unsaved: false, documents: [] as FrontendDocumentDetails[], activeDocumentIndex: 0, - spreadsheetOpen: false, - spreadsheetNode: BigInt(0) as bigint | undefined, - spreadsheetWidgets: defaultWidgetLayout(), + dataPanelOpen: false, + propertiesPanelOpen: true, + layersPanelOpen: true, }); // Set up message subscriptions on creation @@ -62,9 +62,16 @@ export function createPortfolioState(editor: Editor) { } }); editor.subscriptions.subscribeJsMessage(TriggerOpenDocument, async () => { - const extension = editor.handle.fileSaveSuffix(); - const data = await upload(extension, "text"); - editor.handle.openDocumentFile(data.filename, data.content); + const suffix = "." + editor.handle.fileExtension(); + const data = await upload(suffix, "text"); + + // Use filename as document name, removing the extension if it exists + let documentName = data.filename; + if (documentName.endsWith(suffix)) { + documentName = documentName.slice(0, -suffix.length); + } + + editor.handle.openDocumentFile(documentName, data.content); }); editor.subscriptions.subscribeJsMessage(TriggerImport, async () => { const data = await upload("image/*", "both"); @@ -76,19 +83,24 @@ export function createPortfolioState(editor: Editor) { } // In case the user accidentally uploads a Graphite file, open it instead of failing to import it - if (data.filename.endsWith(".graphite")) { - editor.handle.openDocumentFile(data.filename, data.content.text); + const graphiteFileSuffix = "." + editor.handle.fileExtension(); + if (data.filename.endsWith(graphiteFileSuffix)) { + const documentName = data.filename.slice(0, -graphiteFileSuffix.length); + editor.handle.openDocumentFile(documentName, data.content.text); return; } const imageData = await extractPixelData(new Blob([data.content.data], { type: data.type })); editor.handle.pasteImage(data.filename, new Uint8Array(imageData.data), imageData.width, imageData.height); }); - editor.subscriptions.subscribeJsMessage(TriggerDownloadTextFile, (triggerFileDownload) => { - downloadFileText(triggerFileDownload.name, triggerFileDownload.document); + editor.subscriptions.subscribeJsMessage(TriggerSaveDocument, (triggerSaveDocument) => { + downloadFile(triggerSaveDocument.name, triggerSaveDocument.content); }); - editor.subscriptions.subscribeJsMessage(TriggerDownloadImage, async (triggerDownloadImage) => { - const { svg, name, mime, size } = triggerDownloadImage; + editor.subscriptions.subscribeJsMessage(TriggerSaveFile, (triggerFileDownload) => { + downloadFile(triggerFileDownload.name, triggerFileDownload.content); + }); + editor.subscriptions.subscribeJsMessage(TriggerExportImage, async (TriggerExportImage) => { + const { svg, name, mime, size } = TriggerExportImage; // Fill the canvas with white if it'll be a JPEG (which does not support transparency and defaults to black) const backgroundColor = mime.endsWith("jpeg") ? "white" : undefined; @@ -103,18 +115,21 @@ export function createPortfolioState(editor: Editor) { // Fail silently if there's an error rasterizing the SVG, such as a zero-sized image } }); - - editor.subscriptions.subscribeJsMessage(UpdateSpreadsheetState, async (updateSpreadsheetState) => { + editor.subscriptions.subscribeJsMessage(UpdateDataPanelState, async (updateDataPanelState) => { update((state) => { - state.spreadsheetOpen = updateSpreadsheetState.open; - state.spreadsheetNode = updateSpreadsheetState.node; + state.dataPanelOpen = updateDataPanelState.open; return state; }); }); - - editor.subscriptions.subscribeJsMessage(UpdateSpreadsheetLayout, (updateSpreadsheetLayout) => { + editor.subscriptions.subscribeJsMessage(UpdatePropertiesPanelState, async (updatePropertiesPanelState) => { update((state) => { - patchWidgetLayout(state.spreadsheetWidgets, updateSpreadsheetLayout); + state.propertiesPanelOpen = updatePropertiesPanelState.open; + return state; + }); + }); + editor.subscriptions.subscribeJsMessage(UpdateLayersPanelState, async (updateLayersPanelState) => { + update((state) => { + state.layersPanelOpen = updateLayersPanelState.open; return state; }); }); diff --git a/frontend/src/subscription-router.ts b/frontend/src/subscription-router.ts index 1234c1945c..c7af44bab3 100644 --- a/frontend/src/subscription-router.ts +++ b/frontend/src/subscription-router.ts @@ -17,6 +17,10 @@ export function createSubscriptionRouter() { subscriptions[messageType.name] = callback; }; + const unsubscribeJsMessage = (messageType: new () => T) => { + delete subscriptions[messageType.name]; + }; + const handleJsMessage = (messageType: JsMessageType, messageData: Record, wasm: WebAssembly.Memory, handle: EditorHandle) => { // Find the message maker for the message type, which can either be a JS class constructor or a function that returns an instance of the JS class const messageMaker = messageMakers[messageType]; @@ -68,6 +72,7 @@ export function createSubscriptionRouter() { return { subscribeJsMessage, + unsubscribeJsMessage, handleJsMessage, }; } diff --git a/frontend/src/utility-functions/files.ts b/frontend/src/utility-functions/files.ts index 610d4993d8..08be7ccdf2 100644 --- a/frontend/src/utility-functions/files.ts +++ b/frontend/src/utility-functions/files.ts @@ -15,18 +15,19 @@ export function downloadFileBlob(filename: string, blob: Blob) { URL.revokeObjectURL(url); } -export function downloadFileText(filename: string, text: string) { - const type = filename.endsWith(".svg") ? "image/svg+xml;charset=utf-8" : "text/plain;charset=utf-8"; +export function downloadFile(filename: string, content: ArrayBuffer) { + const type = filename.endsWith(".svg") ? "image/svg+xml;charset=utf-8" : "application/octet-stream"; - const blob = new Blob([text], { type }); + const blob = new Blob([new Uint8Array(content)], { type }); downloadFileBlob(filename, blob); } -export async function upload(acceptedExtensions: string, textOrData: T): Promise> { +// See https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/file#accept for the `accept` string format +export async function upload(accept: string, textOrData: T): Promise> { return new Promise>((resolve, _) => { const element = document.createElement("input"); element.type = "file"; - element.accept = acceptedExtensions; + element.accept = accept; element.addEventListener( "change", diff --git a/frontend/src/utility-functions/keyboard-entry.ts b/frontend/src/utility-functions/keyboard-entry.ts index e33181cd36..1749f53c0a 100644 --- a/frontend/src/utility-functions/keyboard-entry.ts +++ b/frontend/src/utility-functions/keyboard-entry.ts @@ -32,7 +32,7 @@ export function textInputCleanup(text: string): string { // // In the desktop version of VS Code, this is achieved with this Electron plugin: // -// We may be able to port that (it's a relatively small codebase) to Rust for use with Tauri. +// We may be able to port that (it's a relatively small codebase) to Rust for use with our desktop application. // But on the web, just like VS Code, we're limited by the shortcomings of the spec. // A collection of further insights: // diff --git a/frontend/src/utility-functions/rasterization.ts b/frontend/src/utility-functions/rasterization.ts index 767c7e8bf9..8a0807ac2d 100644 --- a/frontend/src/utility-functions/rasterization.ts +++ b/frontend/src/utility-functions/rasterization.ts @@ -93,7 +93,7 @@ export async function imageToCanvasContext(imageData: ImageBitmapSource): Promis canvas.width = width; canvas.height = height; - const context = canvas.getContext("2d"); + const context = canvas.getContext("2d", { willReadFrequently: true }); if (!context) throw new Error("Could not create canvas context"); context.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height); diff --git a/frontend/src/utility-functions/viewports.ts b/frontend/src/utility-functions/viewports.ts index edf412655a..134ece0b31 100644 --- a/frontend/src/utility-functions/viewports.ts +++ b/frontend/src/utility-functions/viewports.ts @@ -1,7 +1,7 @@ import { type Editor } from "@graphite/editor"; -export function updateBoundsOfViewports(editor: Editor, container: HTMLElement) { - const viewports = Array.from(container.querySelectorAll("[data-viewport]")); +export function updateBoundsOfViewports(editor: Editor) { + const viewports = Array.from(window.document.querySelectorAll("[data-viewport-container]")); const boundsOfViewports = viewports.map((canvas) => { const bounds = canvas.getBoundingClientRect(); return [bounds.left, bounds.top, bounds.right, bounds.bottom]; diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 04b0fc6b73..bc15f2b019 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -13,34 +13,19 @@ import { DynamicPublicDirectory as viteMultipleAssets } from "vite-multiple-asse const projectRootDir = path.resolve(__dirname); -// Keep this list in sync with those in `/about.toml` and `/deny.toml`. -const ALLOWED_LICENSES = [ - "Apache-2.0 WITH LLVM-exception", - "Apache-2.0", - "BSD-2-Clause", - "BSD-3-Clause", - "BSL-1.0", - "CC0-1.0", - "CDLA-Permissive-2.0", - "ISC", - "MIT-0", - "MIT", - "MPL-2.0", - "OpenSSL", - "Unicode-3.0", - "Unicode-DFS-2016", - "Zlib", - "NCSA", -]; - // https://vitejs.dev/config/ export default defineConfig({ plugins: [ svelte({ preprocess: [sveltePreprocess()], onwarn(warning, defaultHandler) { - // NOTICE: Keep this list in sync with the list in `.vscode/settings.json` - const suppressed = ["css-unused-selector", "vite-plugin-svelte-css-no-scopable-elements", "a11y-no-static-element-interactions", "a11y-no-noninteractive-element-interactions"]; + const suppressed = [ + "css-unused-selector", // NOTICE: Keep this list in sync with the list in `.vscode/settings.json` + "vite-plugin-svelte-css-no-scopable-elements", // NOTICE: Keep this list in sync with the list in `.vscode/settings.json` + "a11y-no-static-element-interactions", // NOTICE: Keep this list in sync with the list in `.vscode/settings.json` + "a11y-no-noninteractive-element-interactions", // NOTICE: Keep this list in sync with the list in `.vscode/settings.json` + "a11y-click-events-have-key-events", // NOTICE: Keep this list in sync with the list in `.vscode/settings.json` + ]; if (suppressed.includes(warning.code)) return; defaultHandler?.(warning); @@ -66,8 +51,10 @@ export default defineConfig({ plugins: [ rollupPluginLicense({ thirdParty: { + includePrivate: false, + multipleVersions: true, allow: { - test: `(${ALLOWED_LICENSES.join(" OR ")})`, + test: `(${getAcceptedLicenses()})`, failOnUnlicensed: true, failOnViolation: true, }, @@ -103,10 +90,11 @@ type PackageInfo = { function formatThirdPartyLicenses(jsLicenses: Dependency[]): string { // Generate the Rust license information. - let licenses = generateRustLicenses() || []; + const rustLicenses = generateRustLicenses(); + const additionalLicenses = generateAdditionalLicenses(); - // Ensure we have license information to work with before proceeding. - if (licenses.length === 0) { + // Ensure we have the required license information to work with before proceeding. + if (rustLicenses.length === 0) { // This is probably caused by `cargo about` not being installed. console.error("Could not run `cargo about`, which is required to generate license information."); console.error("To install cargo-about on your system, you can run `cargo install cargo-about`."); @@ -121,9 +109,11 @@ function formatThirdPartyLicenses(jsLicenses: Dependency[]): string { process.exit(1); } - // Find then duplicate this license if one of its packages is `path-bool`, adding its notice text. - let foundLicensesIndex; - let foundPackagesIndex; + let licenses = rustLicenses.concat(additionalLicenses); + + // SPECIAL CASE: Find then duplicate this license if one of its packages is `path-bool`, adding its notice text. + let foundLicensesIndex: number | undefined = undefined; + let foundPackagesIndex: number | undefined = undefined; licenses.forEach((license, licenseIndex) => { license.packages.forEach((pkg, pkgIndex) => { if (pkg.name === "path-bool") { @@ -147,7 +137,7 @@ function formatThirdPartyLicenses(jsLicenses: Dependency[]): string { }); } - // Augment the imported Rust license list with the provided JS license list. + // Extend the license list with the provided JS licenses. jsLicenses.forEach((jsLicense) => { const name = jsLicense.name || ""; const version = jsLicense.version || ""; @@ -158,14 +148,12 @@ function formatThirdPartyLicenses(jsLicenses: Dependency[]): string { let repository = jsLicense.repository || ""; if (repository && typeof repository === "object") repository = repository.url; - // Remove the `git+` or `git://` prefix and `.git` suffix. - const repo = repository ? repository.replace(/^.*(github.com\/.*?\/.*?)(?:.git)/, "https://$1") : repository; const matchedLicense = licenses.find( (license) => license.licenseName === licenseName && trimBlankLines(license.licenseText || "") === licenseText && trimBlankLines(license.noticeText || "") === noticeText, ); - const pkg: PackageInfo = { name, version, author, repository: repo }; + const pkg: PackageInfo = { name, version, author, repository }; if (matchedLicense) matchedLicense.packages.push(pkg); else licenses.push({ licenseName, licenseText, noticeText, packages: [pkg] }); }); @@ -232,7 +220,15 @@ function formatThirdPartyLicenses(jsLicenses: Dependency[]): string { licenses.forEach((license) => { let packagesWithSameLicense = license.packages.map((packageInfo) => { const { name, version, author, repository } = packageInfo; - return `${name} ${version}${author ? ` - ${author}` : ""}${repository ? ` - ${repository}` : ""}`; + + // Remove the `git+` or `git://` prefix and `.git` suffix. + let repo = repository; + if (repo.startsWith("git+")) repo = repo.slice("git+".length); + if (repo.startsWith("git://")) repo = repo.slice("git://".length); + if (repo.endsWith(".git")) repo = repo.slice(0, -".git".length); + if (repo.endsWith(".git#release")) repo = repo.slice(0, -".git#release".length); + + return `${name} ${version}${author ? ` - ${author}` : ""}${repo ? ` - ${repo}` : ""}`; }); const multi = packagesWithSameLicense.length !== 1; const saysLicense = license.licenseName.toLowerCase().includes("license"); @@ -249,10 +245,44 @@ function formatThirdPartyLicenses(jsLicenses: Dependency[]): string { formattedLicenseNotice += ` ${"โ€พ".repeat(packagesLineLength + 2)}\n`; formattedLicenseNotice += `${license.licenseText}\n`; }); + + formattedLicenseNotice += "\n"; return formattedLicenseNotice; } -function generateRustLicenses(): LicenseInfo[] | undefined { +// Include additional licenses that aren't automatically generated by `cargo about` or `rollup-plugin-license`. +function generateAdditionalLicenses(): LicenseInfo[] { + const ADDITIONAL_LICENSES = [ + { + licenseName: "SIL Open Font License 1.1", + licenseTextPath: "node_modules/source-sans/LICENSE.txt", + manifestPath: "node_modules/source-sans/package.json", + }, + { + licenseName: "SIL Open Font License 1.1", + licenseTextPath: "node_modules/source-code-pro/LICENSE.md", + manifestPath: "node_modules/source-code-pro/package.json", + }, + ]; + + return ADDITIONAL_LICENSES.map(({ licenseName, licenseTextPath, manifestPath }) => { + const licenseText = (fs.existsSync(licenseTextPath) && fs.readFileSync(licenseTextPath, "utf8")) || ""; + + const manifestJSON = (fs.existsSync(manifestPath) && JSON.parse(fs.readFileSync(manifestPath, "utf8"))) || {}; + const name = manifestJSON.name || ""; + const version = manifestJSON.version || ""; + const author = manifestJSON.author.name || manifestJSON.author || ""; + const repository = manifestJSON.repository?.url || ""; + + return { + licenseName, + licenseText: trimBlankLines(licenseText), + packages: [{ name, version, author, repository }], + }; + }); +} + +function generateRustLicenses(): LicenseInfo[] { // Log the starting status to the build output. console.info("\n\nGenerating license information for Rust code\n"); @@ -262,7 +292,6 @@ function generateRustLicenses(): LicenseInfo[] | undefined { const { stdout, stderr, status } = spawnSync("cargo", ["about", "generate", "about.hbs"], { cwd: path.join(__dirname, ".."), encoding: "utf8", - timeout: 60000, // One minute shell: true, windowsHide: true, // Hide the terminal on Windows }); @@ -273,14 +302,14 @@ function generateRustLicenses(): LicenseInfo[] | undefined { if (status !== 101) { console.error("cargo-about failed", status, stderr); } - return undefined; + return []; } // Make sure the output starts with this expected label, which lets us know the file generated with expected output. // We don't want to eval an error message or something else, so we fail early if that happens. if (!stdout.trim().startsWith("GENERATED_BY_CARGO_ABOUT:")) { console.error("Unexpected output from cargo-about", stdout); - return undefined; + return []; } // Convert the array JS syntax string into an actual JS array in memory. @@ -309,7 +338,7 @@ function generateRustLicenses(): LicenseInfo[] | undefined { return rustLicenses; } catch (_) { - return undefined; + return []; } } @@ -356,3 +385,18 @@ function trimBlankLines(input: string): string { return result; } + +function getAcceptedLicenses() { + const tomlContent = fs.readFileSync(path.resolve(__dirname, "../about.toml"), "utf8"); + + const licensesBlock = tomlContent?.match(/accepted\s*=\s*\[([^\]]*)\]/)?.[1] || ""; + + return licensesBlock + .split("\n") + .map((line) => line.replace(/#.*$/, "")) // Remove comments + .join("\n") + .split(",") + .map((license) => license.trim().replace(/"/g, "")) + .filter((license) => license.length > 0) + .join(" OR "); +} diff --git a/frontend/wasm/Cargo.toml b/frontend/wasm/Cargo.toml index 13e45bd07e..90b8ebe6ba 100644 --- a/frontend/wasm/Cargo.toml +++ b/frontend/wasm/Cargo.toml @@ -13,7 +13,7 @@ license = "Apache-2.0" [features] default = ["gpu"] gpu = ["editor/gpu"] -tauri = ["editor/tauri"] +native = [] [lib] crate-type = ["cdylib", "rlib"] @@ -38,6 +38,7 @@ wasm-bindgen-futures = { workspace = true } math-parser = { workspace = true } wgpu = { workspace = true } web-sys = { workspace = true } +ron = { workspace = true } [package.metadata.wasm-pack.profile.dev] wasm-opt = false diff --git a/frontend/wasm/src/editor_api.rs b/frontend/wasm/src/editor_api.rs index 57c5899e0b..c0539ce61c 100644 --- a/frontend/wasm/src/editor_api.rs +++ b/frontend/wasm/src/editor_api.rs @@ -5,9 +5,8 @@ // on the dispatcher messaging system and more complex Rust data types. // use crate::helpers::translate_key; -use crate::{EDITOR, EDITOR_HANDLE, EDITOR_HAS_CRASHED, Error}; -use editor::application::Editor; -use editor::consts::FILE_SAVE_SUFFIX; +use crate::{EDITOR_HANDLE, EDITOR_HAS_CRASHED, Error, MESSAGE_BUFFER}; +use editor::consts::FILE_EXTENSION; use editor::messages::input_mapper::utility_types::input_keyboard::ModifierKeys; use editor::messages::input_mapper::utility_types::input_mouse::{EditorMouseState, ScrollDelta, ViewportBounds}; use editor::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; @@ -16,13 +15,32 @@ use editor::messages::portfolio::utility_types::Platform; use editor::messages::prelude::*; use editor::messages::tool::tool_messages::tool_prelude::WidgetId; use graph_craft::document::NodeId; +use graphene_std::raster::Image; use graphene_std::raster::color::Color; +use js_sys::{Object, Reflect}; use serde::Serialize; use serde_wasm_bindgen::{self, from_value}; use std::cell::RefCell; -use std::sync::atomic::Ordering; +use std::sync::atomic::{AtomicU64, Ordering}; use std::time::Duration; +use wasm_bindgen::JsCast; use wasm_bindgen::prelude::*; +use web_sys::{CanvasRenderingContext2d, HtmlCanvasElement, ImageData, window}; + +#[cfg(not(feature = "native"))] +use crate::EDITOR; +#[cfg(not(feature = "native"))] +use editor::application::Editor; + +static IMAGE_DATA_HASH: AtomicU64 = AtomicU64::new(0); + +fn calculate_hash(t: &T) -> u64 { + use std::collections::hash_map::DefaultHasher; + use std::hash::Hasher; + let mut hasher = DefaultHasher::new(); + t.hash(&mut hasher); + hasher.finish() +} /// Set the random seed used by the editor by calling this from JS upon initialization. /// This is necessary because WASM doesn't have a random number generator. @@ -37,6 +55,75 @@ pub fn wasm_memory() -> JsValue { wasm_bindgen::memory() } +fn render_image_data_to_canvases(image_data: &[(u64, Image)]) { + let window = match window() { + Some(window) => window, + None => { + error!("Cannot render canvas: window object not found"); + return; + } + }; + let document = window.document().expect("window should have a document"); + let window_obj = Object::from(window); + let image_canvases_key = JsValue::from_str("imageCanvases"); + + let canvases_obj = match Reflect::get(&window_obj, &image_canvases_key) { + Ok(obj) if !obj.is_undefined() && !obj.is_null() => obj, + _ => { + let new_obj = Object::new(); + if Reflect::set(&window_obj, &image_canvases_key, &new_obj).is_err() { + error!("Failed to create and set imageCanvases object on window"); + return; + } + new_obj.into() + } + }; + let canvases_obj = Object::from(canvases_obj); + + for (placeholder_id, image) in image_data.iter() { + let canvas_name = placeholder_id.to_string(); + let js_key = JsValue::from_str(&canvas_name); + + if Reflect::has(&canvases_obj, &js_key).unwrap_or(false) || image.width == 0 || image.height == 0 { + continue; + } + + let canvas: HtmlCanvasElement = document + .create_element("canvas") + .expect("Failed to create canvas element") + .dyn_into::() + .expect("Failed to cast element to HtmlCanvasElement"); + + canvas.set_width(image.width); + canvas.set_height(image.height); + + let context: CanvasRenderingContext2d = canvas + .get_context("2d") + .expect("Failed to get 2d context") + .expect("2d context was not found") + .dyn_into::() + .expect("Failed to cast context to CanvasRenderingContext2d"); + let u8_data: Vec = image.data.iter().flat_map(|color| color.to_rgba8_srgb()).collect(); + let clamped_u8_data = wasm_bindgen::Clamped(&u8_data[..]); + match ImageData::new_with_u8_clamped_array_and_sh(clamped_u8_data, image.width, image.height) { + Ok(image_data_obj) => { + if context.put_image_data(&image_data_obj, 0., 0.).is_err() { + error!("Failed to put image data on canvas for id: {placeholder_id}"); + } + } + Err(e) => { + error!("Failed to create ImageData for id: {placeholder_id}: {e:?}"); + } + } + + let js_value = JsValue::from(canvas); + + if Reflect::set(&canvases_obj, &js_key, &js_value).is_err() { + error!("Failed to set canvas '{canvas_name}' on imageCanvases object"); + } + } +} + // ============================================================================ /// This struct is, via wasm-bindgen, used by JS to interact with the editor backend. It does this by calling functions, which are `impl`ed @@ -57,6 +144,7 @@ impl EditorHandle { #[wasm_bindgen] impl EditorHandle { + #[cfg(not(feature = "native"))] #[wasm_bindgen(constructor)] pub fn new(frontend_message_handler_callback: js_sys::Function) -> Self { let editor = Editor::new(); @@ -70,15 +158,37 @@ impl EditorHandle { editor_handle } + #[cfg(feature = "native")] + #[wasm_bindgen(constructor)] + pub fn new(frontend_message_handler_callback: js_sys::Function) -> Self { + let editor_handle = EditorHandle { frontend_message_handler_callback }; + if EDITOR_HANDLE.with(|handle| handle.lock().ok().map(|mut guard| *guard = Some(editor_handle.clone()))).is_none() { + log::error!("Attempted to initialize the editor handle more than once"); + } + editor_handle + } + // Sends a message to the dispatcher in the Editor Backend + #[cfg(not(feature = "native"))] fn dispatch>(&self, message: T) { // Process no further messages after a crash to avoid spamming the console + + use crate::MESSAGE_BUFFER; if EDITOR_HAS_CRASHED.load(Ordering::SeqCst) { return; } // Get the editor, dispatch the message, and store the `FrontendMessage` queue response - let frontend_messages = editor(|editor| editor.handle_message(message.into())); + let frontend_messages = EDITOR.with(|editor| { + let mut guard = editor.try_lock(); + let Ok(Some(editor)) = guard.as_deref_mut() else { + // Enqueue messages which can't be procssed currently + MESSAGE_BUFFER.with_borrow_mut(|buffer| buffer.push(message.into())); + return vec![]; + }; + + editor.handle_message(message) + }); // Send each `FrontendMessage` to the JavaScript frontend for message in frontend_messages.into_iter() { @@ -86,8 +196,29 @@ impl EditorHandle { } } + #[cfg(feature = "native")] + fn dispatch>(&self, message: T) { + let message: Message = message.into(); + let Ok(serialized_message) = ron::to_string(&message) else { + log::error!("Failed to serialize message"); + return; + }; + crate::native_communcation::send_message_to_cef(serialized_message) + } + // Sends a FrontendMessage to JavaScript fn send_frontend_message_to_js(&self, mut message: FrontendMessage) { + if let FrontendMessage::UpdateImageData { ref image_data } = message { + let new_hash = calculate_hash(image_data); + let prev_hash = IMAGE_DATA_HASH.load(Ordering::Relaxed); + + if new_hash != prev_hash { + render_image_data_to_canvases(image_data.as_slice()); + IMAGE_DATA_HASH.store(new_hash, Ordering::Relaxed); + } + return; + } + if let FrontendMessage::UpdateDocumentLayerStructure { data_buffer } = message { message = FrontendMessage::UpdateDocumentLayerStructureJs { data_buffer: data_buffer.into() }; } @@ -100,11 +231,7 @@ impl EditorHandle { let js_return_value = self.frontend_message_handler_callback.call2(&JsValue::null(), &JsValue::from(message_type), &message_data); if let Err(error) = js_return_value { - error!( - "While handling FrontendMessage \"{:?}\", JavaScript threw an error: {:?}", - message.to_discriminant().local_name(), - error, - ) + error!("While handling FrontendMessage {:?}, JavaScript threw an error:\n{:?}", message.to_discriminant().local_name(), error,) } } @@ -115,6 +242,9 @@ impl EditorHandle { #[wasm_bindgen(js_name = initAfterFrontendReady)] pub fn init_after_frontend_ready(&self, platform: String) { + #[cfg(feature = "native")] + crate::native_communcation::initialize_native_communication(); + // Send initialization messages let platform = match platform.as_str() { "Windows" => Platform::Windows, @@ -131,25 +261,26 @@ impl EditorHandle { let g = f.clone(); *g.borrow_mut() = Some(Closure::new(move |_timestamp| { + #[cfg(not(feature = "native"))] wasm_bindgen_futures::spawn_local(poll_node_graph_evaluation()); if !EDITOR_HAS_CRASHED.load(Ordering::SeqCst) { - editor_and_handle(|editor, handle| { - for message in editor.handle_message(InputPreprocessorMessage::CurrentTime { - timestamp: js_sys::Date::now() as u64, - }) { - handle.send_frontend_message_to_js(message); + handle(|handle| { + // Process all messages that have been queued up + let messages = MESSAGE_BUFFER.take(); + + for message in messages { + handle.dispatch(message); } - for message in editor.handle_message(AnimationMessage::IncrementFrameCounter) { - handle.send_frontend_message_to_js(message); - } + handle.dispatch(InputPreprocessorMessage::CurrentTime { + timestamp: js_sys::Date::now() as u64, + }); + handle.dispatch(AnimationMessage::IncrementFrameCounter); // Used by auto-panning, but this could possibly be refactored in the future, see: // - for message in editor.handle_message(BroadcastMessage::TriggerEvent(BroadcastEvent::AnimationFrame)) { - handle.send_frontend_message_to_js(message); - } + handle.dispatch(BroadcastMessage::TriggerEvent(EventMessage::AnimationFrame)); }); } @@ -176,6 +307,51 @@ impl EditorHandle { } } + /// Minimizes the application window to the taskbar or dock + #[wasm_bindgen(js_name = appWindowMinimize)] + pub fn app_window_minimize(&self) { + let message = AppWindowMessage::AppWindowMinimize; + self.dispatch(message); + } + + #[wasm_bindgen(js_name = addPrimaryImport)] + pub fn add_primary_import(&self) { + self.dispatch(DocumentMessage::AddTransaction); + self.dispatch(NodeGraphMessage::AddPrimaryImport); + } + + #[wasm_bindgen(js_name = addSecondaryImport)] + pub fn add_secondary_import(&self) { + self.dispatch(DocumentMessage::AddTransaction); + self.dispatch(NodeGraphMessage::AddSecondaryImport); + } + + #[wasm_bindgen(js_name = addPrimaryExport)] + pub fn add_primary_export(&self) { + self.dispatch(DocumentMessage::AddTransaction); + self.dispatch(NodeGraphMessage::AddPrimaryExport); + } + + #[wasm_bindgen(js_name = addSecondaryExport)] + pub fn add_secondary_export(&self) { + self.dispatch(DocumentMessage::AddTransaction); + self.dispatch(NodeGraphMessage::AddSecondaryExport); + } + + /// Toggles minimizing or restoring down the application window + #[wasm_bindgen(js_name = appWindowMaximize)] + pub fn app_window_maximize(&self) { + let message = AppWindowMessage::AppWindowMaximize; + self.dispatch(message); + } + + /// Closes the application window + #[wasm_bindgen(js_name = appWindowClose)] + pub fn app_window_close(&self) { + let message = AppWindowMessage::AppWindowClose; + self.dispatch(message); + } + /// Displays a dialog with an error message #[wasm_bindgen(js_name = errorDialog)] pub fn error_dialog(&self, title: String, description: String) { @@ -195,10 +371,10 @@ impl EditorHandle { cfg!(debug_assertions) } - /// Get the constant `FILE_SAVE_SUFFIX` - #[wasm_bindgen(js_name = fileSaveSuffix)] - pub fn file_save_suffix(&self) -> String { - FILE_SAVE_SUFFIX.into() + /// Get the constant `FILE_EXTENSION` + #[wasm_bindgen(js_name = fileExtension)] + pub fn file_extension(&self) -> String { + FILE_EXTENSION.into() } /// Update the value of a given UI widget, but don't commit it to the history (unless `commit_layout()` is called, which handles that) @@ -272,7 +448,8 @@ impl EditorHandle { #[wasm_bindgen(js_name = openDocumentFile)] pub fn open_document_file(&self, document_name: String, document_serialized_content: String) { let message = PortfolioMessage::OpenDocumentFile { - document_name, + document_name: Some(document_name), + document_path: None, document_serialized_content, }; self.dispatch(message); @@ -283,7 +460,8 @@ impl EditorHandle { let document_id = DocumentId(document_id); let message = PortfolioMessage::OpenDocumentFileWithId { document_id, - document_name, + document_name: Some(document_name), + document_path: None, document_is_auto_saved: true, document_is_saved, document_serialized_content, @@ -315,6 +493,12 @@ impl EditorHandle { self.dispatch(message); } + #[wasm_bindgen(js_name = requestLicensesThirdPartyDialogWithLicenseText)] + pub fn request_licenses_third_party_dialog_with_license_text(&self, license_text: String) { + let message = DialogMessage::RequestLicensesThirdPartyDialogWithLicenseText { license_text }; + self.dispatch(message); + } + /// Send new bounds when document panel viewports get resized or moved within the editor /// [left, top, right, bottom]... #[wasm_bindgen(js_name = boundsOfViewports)] @@ -510,13 +694,20 @@ impl EditorHandle { self.dispatch(message); } - /// Paste layers from a serialized json representation + /// Paste layers from a serialized JSON representation #[wasm_bindgen(js_name = pasteSerializedData)] pub fn paste_serialized_data(&self, data: String) { let message = PortfolioMessage::PasteSerializedData { data }; self.dispatch(message); } + /// Paste vector into a new layer from a serialized JSON representation + #[wasm_bindgen(js_name = pasteSerializedVector)] + pub fn paste_serialized_vector(&self, data: String) { + let message = PortfolioMessage::PasteSerializedVector { data }; + self.dispatch(message); + } + #[wasm_bindgen(js_name = clipLayer)] pub fn clip_layer(&self, id: u64) { let id = NodeId(id); @@ -600,7 +791,7 @@ impl EditorHandle { self.dispatch(message); } - /// Merge a group of nodes into a subnetwork + /// Merge the selected nodes into a subnetwork #[wasm_bindgen(js_name = mergeSelectedNodes)] pub fn merge_nodes(&self) { let message = NodeGraphMessage::MergeSelectedNodes; @@ -785,38 +976,51 @@ fn set_timeout(f: &Closure, delay: Duration) { } /// Provides access to the `Editor` by calling the given closure with it as an argument. +#[cfg(not(feature = "native"))] fn editor(callback: impl FnOnce(&mut editor::application::Editor) -> T) -> T { EDITOR.with(|editor| { let mut guard = editor.try_lock(); - let Ok(Some(editor)) = guard.as_deref_mut() else { return T::default() }; + let Ok(Some(editor)) = guard.as_deref_mut() else { + log::error!("Failed to borrow editor"); + return T::default(); + }; callback(editor) }) } /// Provides access to the `Editor` and its `EditorHandle` by calling the given closure with them as arguments. -pub(crate) fn editor_and_handle(mut callback: impl FnMut(&mut Editor, &mut EditorHandle)) { - EDITOR_HANDLE.with(|editor_handle| { +#[cfg(not(feature = "native"))] +pub(crate) fn editor_and_handle(callback: impl FnOnce(&mut Editor, &mut EditorHandle)) { + handle(|editor_handle| { editor(|editor| { - let mut guard = editor_handle.try_lock(); - let Ok(Some(editor_handle)) = guard.as_deref_mut() else { - log::error!("Failed to borrow editor handle"); - return; - }; - // Call the closure with the editor and its handle callback(editor, editor_handle); }) }); } +/// Provides access to the `EditorHandle` by calling the given closure with them as arguments. +pub(crate) fn handle(callback: impl FnOnce(&mut EditorHandle)) { + EDITOR_HANDLE.with(|editor_handle| { + let mut guard = editor_handle.try_lock(); + let Ok(Some(editor_handle)) = guard.as_deref_mut() else { + log::error!("Failed to borrow editor handle"); + return; + }; + // Call the closure with the editor and its handle + callback(editor_handle); + }); +} + +#[cfg(not(feature = "native"))] async fn poll_node_graph_evaluation() { // Process no further messages after a crash to avoid spamming the console if EDITOR_HAS_CRASHED.load(Ordering::SeqCst) { return; } - if !editor::node_graph_executor::run_node_graph().await { + if !editor::node_graph_executor::run_node_graph().await.0 { return; }; @@ -849,9 +1053,7 @@ fn auto_save_all_documents() { return; } - editor_and_handle(|editor, handle| { - for message in editor.handle_message(PortfolioMessage::AutoSaveAllDocuments) { - handle.send_frontend_message_to_js(message); - } + handle(|handle| { + handle.dispatch(PortfolioMessage::AutoSaveAllDocuments); }); } diff --git a/frontend/wasm/src/lib.rs b/frontend/wasm/src/lib.rs index 730fb4215c..d3141288b3 100644 --- a/frontend/wasm/src/lib.rs +++ b/frontend/wasm/src/lib.rs @@ -6,6 +6,7 @@ extern crate log; pub mod editor_api; pub mod helpers; +pub mod native_communcation; use editor::messages::prelude::*; use std::panic; @@ -19,7 +20,9 @@ pub static NODE_GRAPH_ERROR_DISPLAYED: AtomicBool = AtomicBool::new(false); pub static LOGGER: WasmLog = WasmLog; thread_local! { + #[cfg(not(feature = "native"))] pub static EDITOR: Mutex> = const { Mutex::new(None) }; + pub static MESSAGE_BUFFER: std::cell::RefCell> = const { std::cell::RefCell::new(Vec::new()) }; pub static EDITOR_HANDLE: Mutex> = const { Mutex::new(None) }; } @@ -48,7 +51,7 @@ pub fn panic_hook(info: &panic::PanicHookInfo) { if !NODE_GRAPH_ERROR_DISPLAYED.load(Ordering::SeqCst) { NODE_GRAPH_ERROR_DISPLAYED.store(true, Ordering::SeqCst); - editor_api::editor_and_handle(|_, handle| { + editor_api::handle(|handle| { let error = r#" diff --git a/frontend/wasm/src/native_communcation.rs b/frontend/wasm/src/native_communcation.rs new file mode 100644 index 0000000000..97cfd4863d --- /dev/null +++ b/frontend/wasm/src/native_communcation.rs @@ -0,0 +1,46 @@ +use editor::messages::prelude::FrontendMessage; +use js_sys::{ArrayBuffer, Uint8Array}; +use wasm_bindgen::prelude::*; + +use crate::editor_api::{self, EditorHandle}; + +#[wasm_bindgen(js_name = "receiveNativeMessage")] +pub fn receive_native_message(buffer: ArrayBuffer) { + let buffer = Uint8Array::new(buffer.as_ref()).to_vec(); + match ron::from_str::>(str::from_utf8(buffer.as_slice()).unwrap()) { + Ok(messages) => { + let callback = move |handle: &mut EditorHandle| { + for message in messages { + handle.send_frontend_message_to_js_rust_proxy(message); + } + }; + editor_api::handle(callback); + } + Err(e) => log::error!("Failed to deserialize frontend messages: {e:?}"), + } +} + +pub fn initialize_native_communication() { + let global = js_sys::global(); + + // Get the function by name + let func = js_sys::Reflect::get(&global, &JsValue::from_str("initializeNativeCommunication")).expect("Function not found"); + let func = func.dyn_into::().expect("Not a function"); + + // Call it + func.call0(&JsValue::NULL).expect("Function call failed"); +} + +pub fn send_message_to_cef(message: String) { + let global = js_sys::global(); + + // Get the function by name + let func = js_sys::Reflect::get(&global, &JsValue::from_str("sendNativeMessage")).expect("Function not found"); + + let func = func.dyn_into::().expect("Not a function"); + let array = Uint8Array::from(message.as_bytes()); + let buffer = array.buffer(); + + // Call it with argument + func.call1(&JsValue::NULL, &JsValue::from(buffer)).expect("Function call failed"); +} diff --git a/libraries/bezier-rs/Cargo.toml b/libraries/bezier-rs/Cargo.toml deleted file mode 100644 index ec9d6499f7..0000000000 --- a/libraries/bezier-rs/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "bezier-rs" -version = "0.4.0" -rust-version = "1.85" -edition = "2024" -authors = ["Graphite Authors "] -description = "Computational geometry algorithms for Bรฉzier segments and shapes useful in the context of 2D graphics" -license = "MIT OR Apache-2.0" -readme = "README.md" -keywords = ["bezier", "curve", "geometry", "2d", "graphics"] -categories = ["graphics", "mathematics"] -homepage = "https://github.com/GraphiteEditor/Graphite/tree/master/libraries/bezier-rs" -repository = "https://github.com/GraphiteEditor/Graphite/tree/master/libraries/bezier-rs" -documentation = "https://graphite.rs/libraries/bezier-rs/" - -[dependencies] -# Required dependencies -glam = { workspace = true } - -# Optional local dependencies -dyn-any = { version = "0.3.0", path = "../dyn-any", optional = true } - -# Optional workspace dependencies -kurbo = { workspace = true, optional = true } -serde = { workspace = true, optional = true } diff --git a/libraries/bezier-rs/LICENSE-APACHE b/libraries/bezier-rs/LICENSE-APACHE deleted file mode 100644 index 261eeb9e9f..0000000000 --- a/libraries/bezier-rs/LICENSE-APACHE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/libraries/bezier-rs/LICENSE-MIT b/libraries/bezier-rs/LICENSE-MIT deleted file mode 100644 index 969d061e8b..0000000000 --- a/libraries/bezier-rs/LICENSE-MIT +++ /dev/null @@ -1,17 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/libraries/bezier-rs/README.md b/libraries/bezier-rs/README.md deleted file mode 100644 index e7856741e5..0000000000 --- a/libraries/bezier-rs/README.md +++ /dev/null @@ -1,28 +0,0 @@ -[crates.io](https://crates.io/crates/bezier-rs) โ€ข [docs.rs](https://docs.rs/bezier-rs/latest/bezier_rs/) โ€ข [repo](https://github.com/GraphiteEditor/Graphite/tree/master/libraries/bezier-rs) - -# Bezier-rs - -Computational geometry algorithms for Bรฉzier segments and shapes useful in the context of 2D graphics. - -Play with the interactive documentation which visualizes each API function in a fun manner: - -### [**View the interactive API**](https://graphite.rs/libraries/bezier-rs/) - ---- - -Bezier-rs is built for the needs of [Graphite](https://graphite.rs), an open source 2D vector graphics editor. We hope it may be useful to others, but presently Graphite is its primary user. Pull requests are welcomed for new features, code cleanup, ergonomic enhancements, performance improvements, and documentation clarifications. - -The library currently provides functions dealing with single Bรฉzier curve segments and open-or-closed multi-segment paths (which we call _subpaths_). - -In the future, the library will be expanded to include compound paths (multiple subpaths forming a single shape, where the winding order determines inside-or-outside-ness) and operations between paths (e.g. boolean operations, convex hull). Pull requests for these additional features would be highly desirable. - -Bezier-rs is inspired by [Bezier.js](https://pomax.github.io/bezierjs/) and [_A Primer on Bรฉzier Curves_](https://pomax.github.io/bezierinfo/) by Pomax. Bezier-rs is not a port of Bezier.js so the API for single-segment Bรฉzier curves has some differences, and the intention is to offer a broader scope that provides algorithms beyond single curve segments (as noted above) to eventually service full vector shapes. - -## Terminology - -Graphite and Bezier-rs use the following terminology for vector data. These depictions are given for cubic Bรฉzier curves. - -![Manipulators](https://static.graphite.rs/libraries/bezier-rs/manipulator-groups.png) -![Curve/Bezier Segment](https://static.graphite.rs/libraries/bezier-rs/curve-bezier-segment.png) -![Subpath/Path](https://static.graphite.rs/libraries/bezier-rs/subpath-path.png) -![Open/Closed](https://static.graphite.rs/libraries/bezier-rs/closed-open-subpath.png) diff --git a/libraries/bezier-rs/src/bezier/core.rs b/libraries/bezier-rs/src/bezier/core.rs deleted file mode 100644 index 123cfe458f..0000000000 --- a/libraries/bezier-rs/src/bezier/core.rs +++ /dev/null @@ -1,278 +0,0 @@ -use super::*; -use std::fmt::Write; -use utils::format_point; - -/// Functionality relating to core `Bezier` operations, such as constructors and `abs_diff_eq`. -impl Bezier { - // TODO: Consider removing this function - /// Create a linear bezier using the provided coordinates as the start and end points. - pub fn from_linear_coordinates(x1: f64, y1: f64, x2: f64, y2: f64) -> Self { - Bezier { - start: DVec2::new(x1, y1), - handles: BezierHandles::Linear, - end: DVec2::new(x2, y2), - } - } - - /// Create a linear bezier using the provided DVec2s as the start and end points. - /// - pub fn from_linear_dvec2(p1: DVec2, p2: DVec2) -> Self { - Bezier { - start: p1, - handles: BezierHandles::Linear, - end: p2, - } - } - - // TODO: Consider removing this function - /// Create a quadratic bezier using the provided coordinates as the start, handle, and end points. - pub fn from_quadratic_coordinates(x1: f64, y1: f64, x2: f64, y2: f64, x3: f64, y3: f64) -> Self { - Bezier { - start: DVec2::new(x1, y1), - handles: BezierHandles::Quadratic { handle: DVec2::new(x2, y2) }, - end: DVec2::new(x3, y3), - } - } - - /// Create a quadratic bezier using the provided DVec2s as the start, handle, and end points. - pub fn from_quadratic_dvec2(p1: DVec2, p2: DVec2, p3: DVec2) -> Self { - Bezier { - start: p1, - handles: BezierHandles::Quadratic { handle: p2 }, - end: p3, - } - } - - // TODO: Consider removing this function - /// Create a cubic bezier using the provided coordinates as the start, handles, and end points. - #[allow(clippy::too_many_arguments)] - pub fn from_cubic_coordinates(x1: f64, y1: f64, x2: f64, y2: f64, x3: f64, y3: f64, x4: f64, y4: f64) -> Self { - Bezier { - start: DVec2::new(x1, y1), - handles: BezierHandles::Cubic { - handle_start: DVec2::new(x2, y2), - handle_end: DVec2::new(x3, y3), - }, - end: DVec2::new(x4, y4), - } - } - - /// Create a cubic bezier using the provided DVec2s as the start, handles, and end points. - pub fn from_cubic_dvec2(p1: DVec2, p2: DVec2, p3: DVec2, p4: DVec2) -> Self { - Bezier { - start: p1, - handles: BezierHandles::Cubic { handle_start: p2, handle_end: p3 }, - end: p4, - } - } - - /// Create a quadratic bezier curve that goes through 3 points, where the middle point will be at the corresponding position `t` on the curve. - /// - `t` - A representation of how far along the curve the provided point should occur at. The default value is 0.5. - /// - /// Note that when `t = 0` or `t = 1`, the expectation is that the `point_on_curve` should be equal to `start` and `end` respectively. - /// In these cases, if the provided values are not equal, this function will use the `point_on_curve` as the `start`/`end` instead. - /// - pub fn quadratic_through_points(start: DVec2, point_on_curve: DVec2, end: DVec2, t: Option) -> Self { - let t = t.unwrap_or(DEFAULT_T_VALUE); - if t == 0. { - return Bezier::from_quadratic_dvec2(point_on_curve, point_on_curve, end); - } - if t == 1. { - return Bezier::from_quadratic_dvec2(start, point_on_curve, point_on_curve); - } - let [a, _, _] = utils::compute_abc_for_quadratic_through_points(start, point_on_curve, end, t); - Bezier::from_quadratic_dvec2(start, a, end) - } - - /// Create a cubic bezier curve that goes through 3 points, where the middle point will be at the corresponding position `t` on the curve. - /// - `t` - A representation of how far along the curve the provided point should occur at. The default value is 0.5. - /// - /// Note that when `t = 0` or `t = 1`, the expectation is that the `point_on_curve` should be equal to `start` and `end` respectively. - /// In these cases, if the provided values are not equal, this function will use the `point_on_curve` as the `start`/`end` instead. - /// - `midpoint_separation` - A representation of how wide the resulting curve will be around `t` on the curve. This parameter designates the distance between the `e1` and `e2` defined in [the projection identity section](https://pomax.github.io/bezierinfo/#abc) of Pomax's bezier curve primer. It is an optional parameter and the default value is the distance between the points `B` and `C` defined in the primer. - pub fn cubic_through_points(start: DVec2, point_on_curve: DVec2, end: DVec2, t: Option, midpoint_separation: Option) -> Self { - let t = t.unwrap_or(DEFAULT_T_VALUE); - if t == 0. { - return Bezier::from_cubic_dvec2(point_on_curve, point_on_curve, end, end); - } - if t == 1. { - return Bezier::from_cubic_dvec2(start, start, point_on_curve, point_on_curve); - } - let [a, b, c] = utils::compute_abc_for_cubic_through_points(start, point_on_curve, end, t); - let midpoint_separation = midpoint_separation.unwrap_or_else(|| b.distance(c)); - let distance_between_start_and_end = (end - start) / (start.distance(end)); - let e1 = b - (distance_between_start_and_end * midpoint_separation); - let e2 = b + (distance_between_start_and_end * midpoint_separation * (1. - t) / t); - - // TODO: these functions can be changed to helpers, but need to come up with an appropriate name first - let v1 = (e1 - t * a) / (1. - t); - let v2 = (e2 - (1. - t) * a) / t; - let handle_start = (v1 - (1. - t) * start) / t; - let handle_end = (v2 - t * end) / (1. - t); - Bezier::from_cubic_dvec2(start, handle_start, handle_end, end) - } - - /// Return the string argument used to create a curve in an SVG `path`, excluding the start point. - pub fn svg_curve_argument(&self) -> String { - let mut out = String::new(); - self.write_curve_argument(&mut out).unwrap(); - out - } - - /// Write the curve argument to the string - pub fn write_curve_argument(&self, svg: &mut String) -> std::fmt::Result { - match self.handles { - BezierHandles::Linear => svg.push_str(SVG_ARG_LINEAR), - BezierHandles::Quadratic { handle } => { - format_point(svg, SVG_ARG_QUADRATIC, handle.x, handle.y)?; - } - BezierHandles::Cubic { handle_start, handle_end } => { - format_point(svg, SVG_ARG_CUBIC, handle_start.x, handle_start.y)?; - format_point(svg, " ", handle_end.x, handle_end.y)?; - } - } - format_point(svg, " ", self.end.x, self.end.y) - } - - /// Return the string argument used to create the lines connecting handles to endpoints in an SVG `path` - pub(crate) fn svg_handle_line_argument(&self) -> Option { - let mut result = String::new(); - - match self.handles { - BezierHandles::Linear => {} - BezierHandles::Quadratic { handle } => { - let _ = format_point(&mut result, SVG_ARG_MOVE, self.start.x, self.start.y); - let _ = format_point(&mut result, SVG_ARG_LINEAR, handle.x, handle.y); - let _ = format_point(&mut result, SVG_ARG_MOVE, self.end.x, self.end.y); - let _ = format_point(&mut result, SVG_ARG_LINEAR, handle.x, handle.y); - } - BezierHandles::Cubic { handle_start, handle_end } => { - let _ = format_point(&mut result, SVG_ARG_MOVE, self.start.x, self.start.y); - let _ = format_point(&mut result, SVG_ARG_LINEAR, handle_start.x, handle_start.y); - let _ = format_point(&mut result, SVG_ARG_MOVE, self.end.x, self.end.y); - let _ = format_point(&mut result, SVG_ARG_LINEAR, handle_end.x, handle_end.y); - } - } - - (!result.is_empty()).then_some(result) - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the curve. - pub fn curve_to_svg(&self, svg: &mut String, attributes: String) { - let _ = write!(svg, r#""#, self.start.x, self.start.y, self.svg_curve_argument(), attributes); - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the handle lines. - pub fn handle_lines_to_svg(&self, svg: &mut String, attributes: String) { - let _ = write!(svg, r#""#, self.svg_handle_line_argument().unwrap_or_default(), attributes); - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the anchors. - pub fn anchors_to_svg(&self, svg: &mut String, attributes: String) { - let _ = write!( - svg, - r#""#, - self.start.x, self.start.y, self.end.x, self.end.y - ); - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the handles. - pub fn handles_to_svg(&self, svg: &mut String, attributes: String) { - if let BezierHandles::Quadratic { handle } = self.handles { - let _ = write!(svg, r#""#, handle.x, handle.y); - } else if let BezierHandles::Cubic { handle_start, handle_end } = self.handles { - let _ = write!( - svg, - r#""#, - handle_start.x, handle_start.y, handle_end.x, handle_end.y - ); - }; - } - - /// Appends to the `svg` mutable string with an SVG shape representation that includes the curve, the handle lines, the anchors, and the handles. - pub fn to_svg(&self, svg: &mut String, curve_attributes: String, anchor_attributes: String, handle_attributes: String, handle_line_attributes: String) { - if !curve_attributes.is_empty() { - self.curve_to_svg(svg, curve_attributes); - } - if !handle_line_attributes.is_empty() { - self.handle_lines_to_svg(svg, handle_line_attributes); - } - if !anchor_attributes.is_empty() { - self.anchors_to_svg(svg, anchor_attributes); - } - if !handle_attributes.is_empty() { - self.handles_to_svg(svg, handle_attributes); - } - } - - /// Returns true if the corresponding points of the two `Bezier`s are within the provided absolute value difference from each other. - /// The points considered includes the start, end, and any relevant handles. - pub fn abs_diff_eq(&self, other: &Bezier, max_abs_diff: f64) -> bool { - let a = if self.is_linear() { Self::from_linear_dvec2(self.start, self.end) } else { *self }; - let b = if other.is_linear() { Self::from_linear_dvec2(other.start, other.end) } else { *other }; - - let self_points = a.get_points().collect::>(); - let other_points = b.get_points().collect::>(); - - self_points.len() == other_points.len() && self_points.into_iter().zip(other_points).all(|(a, b)| a.abs_diff_eq(b, max_abs_diff)) - } - - /// Returns true if the start, end and handles of the Bezier are all at the same location - pub fn is_point(&self) -> bool { - let start = self.start(); - - self.get_points().all(|point| point.abs_diff_eq(start, MAX_ABSOLUTE_DIFFERENCE)) - } - - /// Returns true if the Bezier curve is equivalent to a line. - /// - /// **NOTE**: This is different from simply checking if the handle is [`BezierHandles::Linear`]. A [`Quadratic`](BezierHandles::Quadratic) or [`Cubic`](BezierHandles::Cubic) Bezier curve can also be a line if the handles are colinear to the start and end points. Therefore if the handles exceed the start and end point, it will still be considered as a line. - pub fn is_linear(&self) -> bool { - let is_colinear = |a: DVec2, b: DVec2, c: DVec2| -> bool { ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)).abs() < MAX_ABSOLUTE_DIFFERENCE }; - - match self.handles { - BezierHandles::Linear => true, - BezierHandles::Quadratic { handle } => is_colinear(self.start, handle, self.end), - BezierHandles::Cubic { handle_start, handle_end } => is_colinear(self.start, handle_start, self.end) && is_colinear(self.start, handle_end, self.end), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::compare::compare_points; - use crate::utils::TValue; - - #[test] - fn test_quadratic_from_points() { - let p1 = DVec2::new(30., 50.); - let p2 = DVec2::new(140., 30.); - let p3 = DVec2::new(160., 170.); - - let bezier1 = Bezier::quadratic_through_points(p1, p2, p3, None); - assert!(compare_points(bezier1.evaluate(TValue::Parametric(0.5)), p2)); - - let bezier2 = Bezier::quadratic_through_points(p1, p2, p3, Some(0.8)); - assert!(compare_points(bezier2.evaluate(TValue::Parametric(0.8)), p2)); - - let bezier3 = Bezier::quadratic_through_points(p1, p2, p3, Some(0.)); - assert!(compare_points(bezier3.evaluate(TValue::Parametric(0.)), p2)); - } - - #[test] - fn test_cubic_through_points() { - let p1 = DVec2::new(30., 30.); - let p2 = DVec2::new(60., 140.); - let p3 = DVec2::new(160., 160.); - - let bezier1 = Bezier::cubic_through_points(p1, p2, p3, Some(0.3), Some(10.)); - assert!(compare_points(bezier1.evaluate(TValue::Parametric(0.3)), p2)); - - let bezier2 = Bezier::cubic_through_points(p1, p2, p3, Some(0.8), Some(91.7)); - assert!(compare_points(bezier2.evaluate(TValue::Parametric(0.8)), p2)); - - let bezier3 = Bezier::cubic_through_points(p1, p2, p3, Some(0.), Some(91.7)); - assert!(compare_points(bezier3.evaluate(TValue::Parametric(0.)), p2)); - } -} diff --git a/libraries/bezier-rs/src/bezier/lookup.rs b/libraries/bezier-rs/src/bezier/lookup.rs deleted file mode 100644 index 499c933f03..0000000000 --- a/libraries/bezier-rs/src/bezier/lookup.rs +++ /dev/null @@ -1,362 +0,0 @@ -use super::*; -use crate::utils::{TValue, TValueType}; - -/// Functionality relating to looking up properties of the `Bezier` or points along the `Bezier`. -impl Bezier { - /// Convert a euclidean distance ratio along the `Bezier` curve to a parametric `t`-value. - pub fn euclidean_to_parametric(&self, ratio: f64, error: f64) -> f64 { - let total_length = self.length(None); - self.euclidean_to_parametric_with_total_length(ratio, error, total_length) - } - - /// Convert a euclidean distance ratio along the `Bezier` curve to a parametric `t`-value. - /// For performance reasons, this version of the [`euclidean_to_parametric`] function allows the caller to - /// provide the total length of the curve so it doesn't have to be calculated every time the function is called. - pub fn euclidean_to_parametric_with_total_length(&self, euclidean_t: f64, error: f64, total_length: f64) -> f64 { - if euclidean_t < error { - return 0.; - } - if 1. - euclidean_t < error { - return 1.; - } - - match self.handles { - BezierHandles::Linear => euclidean_t, - BezierHandles::Quadratic { handle } => { - // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles - fn recurse(a0: DVec2, a1: DVec2, a2: DVec2, level: u8, desired_len: f64) -> (f64, f64) { - let lower = a0.distance(a2); - let upper = a0.distance(a1) + a1.distance(a2); - if level >= 8 { - let approx_len = (lower + upper) / 2.; - return (approx_len, desired_len / approx_len); - } - - let b1 = 0.5 * (a0 + a1); - let c1 = 0.5 * (a1 + a2); - let b2 = 0.5 * (b1 + c1); - let (first_len, t) = recurse(a0, b1, b2, level + 1, desired_len); - if first_len > desired_len { - return (first_len, t * 0.5); - } - let (second_len, t) = recurse(b2, c1, a2, level + 1, desired_len - first_len); - (first_len + second_len, t * 0.5 + 0.5) - } - recurse(self.start, handle, self.end, 0, total_length * euclidean_t).1 - } - BezierHandles::Cubic { handle_start, handle_end } => { - // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles - fn recurse(a0: DVec2, a1: DVec2, a2: DVec2, a3: DVec2, level: u8, desired_len: f64) -> (f64, f64) { - let lower = a0.distance(a3); - let upper = a0.distance(a1) + a1.distance(a2) + a2.distance(a3); - if level >= 8 { - let approx_len = (lower + upper) / 2.; - return (approx_len, desired_len / approx_len); - } - - let b1 = 0.5 * (a0 + a1); - let t0 = 0.5 * (a1 + a2); - let c1 = 0.5 * (a2 + a3); - let b2 = 0.5 * (b1 + t0); - let c2 = 0.5 * (t0 + c1); - let b3 = 0.5 * (b2 + c2); - let (first_len, t) = recurse(a0, b1, b2, b3, level + 1, desired_len); - if first_len > desired_len { - return (first_len, t * 0.5); - } - let (second_len, t) = recurse(b3, c2, c1, a3, level + 1, desired_len - first_len); - (first_len + second_len, t * 0.5 + 0.5) - } - recurse(self.start, handle_start, handle_end, self.end, 0, total_length * euclidean_t).1 - } - } - .clamp(0., 1.) - } - - /// Convert a [TValue] to a parametric `t`-value. - pub(crate) fn t_value_to_parametric(&self, t: TValue) -> f64 { - match t { - TValue::Parametric(t) => { - assert!((0.0..=1.).contains(&t)); - t - } - TValue::Euclidean(t) => { - assert!((0.0..=1.).contains(&t)); - self.euclidean_to_parametric(t, DEFAULT_EUCLIDEAN_ERROR_BOUND) - } - TValue::EuclideanWithinError { t, error } => { - assert!((0.0..=1.).contains(&t)); - self.euclidean_to_parametric(t, error) - } - } - } - - /// Calculate the point on the curve based on the `t`-value provided. - pub(crate) fn unrestricted_parametric_evaluate(&self, t: f64) -> DVec2 { - // Basis code based off of pseudocode found here: . - - let t_squared = t * t; - let one_minus_t = 1. - t; - let squared_one_minus_t = one_minus_t * one_minus_t; - - match self.handles { - BezierHandles::Linear => self.start.lerp(self.end, t), - BezierHandles::Quadratic { handle } => squared_one_minus_t * self.start + 2. * one_minus_t * t * handle + t_squared * self.end, - BezierHandles::Cubic { handle_start, handle_end } => { - let t_cubed = t_squared * t; - let cubed_one_minus_t = squared_one_minus_t * one_minus_t; - cubed_one_minus_t * self.start + 3. * squared_one_minus_t * t * handle_start + 3. * one_minus_t * t_squared * handle_end + t_cubed * self.end - } - } - } - - /// Calculate the coordinates of the point `t` along the curve. - /// Expects `t` to be within the inclusive range `[0, 1]`. - /// - pub fn evaluate(&self, t: TValue) -> DVec2 { - let t = self.t_value_to_parametric(t); - self.unrestricted_parametric_evaluate(t) - } - - /// Return a selection of equidistant points on the bezier curve. - /// If no value is provided for `steps`, then the function will default `steps` to be 10. - /// - pub fn compute_lookup_table(&self, steps: Option, tvalue_type: Option) -> impl Iterator + '_ { - let steps = steps.unwrap_or(DEFAULT_LUT_STEP_SIZE); - let tvalue_type = tvalue_type.unwrap_or(TValueType::Parametric); - - (0..=steps).map(move |t| { - let tvalue = match tvalue_type { - TValueType::Parametric => TValue::Parametric(t as f64 / steps as f64), - TValueType::Euclidean => TValue::Euclidean(t as f64 / steps as f64), - }; - self.evaluate(tvalue) - }) - } - - /// Return an approximation of the length of the bezier curve. - /// - `tolerance` - Tolerance used to approximate the curve. - /// - pub fn length(&self, tolerance: Option) -> f64 { - match self.handles { - BezierHandles::Linear => (self.start - self.end).length(), - BezierHandles::Quadratic { handle } => { - // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles - fn recurse(a0: DVec2, a1: DVec2, a2: DVec2, tolerance: f64, level: u8) -> f64 { - let lower = a0.distance(a2); - let upper = a0.distance(a1) + a1.distance(a2); - if upper - lower <= 2. * tolerance || level >= 8 { - return (lower + upper) / 2.; - } - - let b1 = 0.5 * (a0 + a1); - let c1 = 0.5 * (a1 + a2); - let b2 = 0.5 * (b1 + c1); - recurse(a0, b1, b2, 0.5 * tolerance, level + 1) + recurse(b2, c1, a2, 0.5 * tolerance, level + 1) - } - recurse(self.start, handle, self.end, tolerance.unwrap_or_default(), 0) - } - BezierHandles::Cubic { handle_start, handle_end } => { - // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles - fn recurse(a0: DVec2, a1: DVec2, a2: DVec2, a3: DVec2, tolerance: f64, level: u8) -> f64 { - let lower = a0.distance(a3); - let upper = a0.distance(a1) + a1.distance(a2) + a2.distance(a3); - if upper - lower <= 2. * tolerance || level >= 8 { - return (lower + upper) / 2.; - } - - let b1 = 0.5 * (a0 + a1); - let t0 = 0.5 * (a1 + a2); - let c1 = 0.5 * (a2 + a3); - let b2 = 0.5 * (b1 + t0); - let c2 = 0.5 * (t0 + c1); - let b3 = 0.5 * (b2 + c2); - recurse(a0, b1, b2, b3, 0.5 * tolerance, level + 1) + recurse(b3, c2, c1, a3, 0.5 * tolerance, level + 1) - } - recurse(self.start, handle_start, handle_end, self.end, tolerance.unwrap_or_default(), 0) - } - } - } - - /// Return an approximation of the length centroid, together with the length, of the bezier curve. - /// - /// The length centroid is the center of mass for the arc length of the Bezier segment. - /// An infinitely thin wire forming the Bezier segment's shape would balance at this point. - /// - /// - `tolerance` - Tolerance used to approximate the curve. - pub fn length_centroid_and_length(&self, tolerance: Option) -> (DVec2, f64) { - match self.handles { - BezierHandles::Linear => ((self.start + self.end()) / 2., (self.start - self.end).length()), - BezierHandles::Quadratic { handle } => { - // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles - fn recurse(a0: DVec2, a1: DVec2, a2: DVec2, tolerance: f64, level: u8) -> (f64, DVec2) { - let lower = a0.distance(a2); - let upper = a0.distance(a1) + a1.distance(a2); - if upper - lower <= 2. * tolerance || level >= 8 { - let length = (lower + upper) / 2.; - return (length, length * (a0 + a1 + a2) / 3.); - } - - let b1 = 0.5 * (a0 + a1); - let c1 = 0.5 * (a1 + a2); - let b2 = 0.5 * (b1 + c1); - - let (length1, centroid_part1) = recurse(a0, b1, b2, 0.5 * tolerance, level + 1); - let (length2, centroid_part2) = recurse(b2, c1, a2, 0.5 * tolerance, level + 1); - (length1 + length2, centroid_part1 + centroid_part2) - } - - let (length, centroid_parts) = recurse(self.start, handle, self.end, tolerance.unwrap_or_default(), 0); - (centroid_parts / length, length) - } - BezierHandles::Cubic { handle_start, handle_end } => { - // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles - fn recurse(a0: DVec2, a1: DVec2, a2: DVec2, a3: DVec2, tolerance: f64, level: u8) -> (f64, DVec2) { - let lower = a0.distance(a3); - let upper = a0.distance(a1) + a1.distance(a2) + a2.distance(a3); - if upper - lower <= 2. * tolerance || level >= 8 { - let length = (lower + upper) / 2.; - return (length, length * (a0 + a1 + a2 + a3) / 4.); - } - - let b1 = 0.5 * (a0 + a1); - let t0 = 0.5 * (a1 + a2); - let c1 = 0.5 * (a2 + a3); - let b2 = 0.5 * (b1 + t0); - let c2 = 0.5 * (t0 + c1); - let b3 = 0.5 * (b2 + c2); - - let (length1, centroid_part1) = recurse(a0, b1, b2, b3, 0.5 * tolerance, level + 1); - let (length2, centroid_part2) = recurse(b3, c2, c1, a3, 0.5 * tolerance, level + 1); - (length1 + length2, centroid_part1 + centroid_part2) - } - let (length, centroid_parts) = recurse(self.start, handle_start, handle_end, self.end, tolerance.unwrap_or_default(), 0); - (centroid_parts / length, length) - } - } - } - - /// Return an approximation of the length centroid of the Bezier curve. - /// - /// The length centroid is the center of mass for the arc length of the Bezier segment. - /// An infinitely thin wire with the Bezier segment's shape would balance at this point. - /// - /// - `tolerance` - Tolerance used to approximate the curve. - /// - pub fn length_centroid(&self, tolerance: Option) -> DVec2 { - self.length_centroid_and_length(tolerance).0 - } - - /// Returns the parametric `t`-value that corresponds to the closest point on the curve to the provided point. - /// - pub fn project(&self, point: DVec2) -> f64 { - let sbasis = crate::symmetrical_basis::to_symmetrical_basis_pair(*self); - let derivative = sbasis.derivative(); - let dd = (sbasis - point).dot(&derivative); - let roots = dd.roots(); - - let mut closest = 0.; - let mut min_dist_squared = self.evaluate(TValue::Parametric(0.)).distance_squared(point); - - for time in roots { - let distance = self.evaluate(TValue::Parametric(time)).distance_squared(point); - if distance < min_dist_squared { - closest = time; - min_dist_squared = distance; - } - } - - if self.evaluate(TValue::Parametric(1.)).distance_squared(point) < min_dist_squared { - closest = 1.; - } - closest - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_evaluate() { - let p1 = DVec2::new(3., 5.); - let p2 = DVec2::new(14., 3.); - let p3 = DVec2::new(19., 14.); - let p4 = DVec2::new(30., 21.); - - let bezier1 = Bezier::from_quadratic_dvec2(p1, p2, p3); - assert_eq!(bezier1.evaluate(TValue::Parametric(0.5)), DVec2::new(12.5, 6.25)); - - let bezier2 = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - assert_eq!(bezier2.evaluate(TValue::Parametric(0.5)), DVec2::new(16.5, 9.625)); - } - - #[test] - fn test_compute_lookup_table() { - let bezier1 = Bezier::from_quadratic_coordinates(10., 10., 30., 30., 50., 10.); - let lookup_table1 = bezier1.compute_lookup_table(Some(2), Some(TValueType::Parametric)).collect::>(); - assert_eq!(lookup_table1, vec![bezier1.start(), bezier1.evaluate(TValue::Parametric(0.5)), bezier1.end()]); - - let bezier2 = Bezier::from_cubic_coordinates(10., 10., 30., 30., 70., 70., 90., 10.); - let lookup_table2 = bezier2.compute_lookup_table(Some(4), Some(TValueType::Parametric)).collect::>(); - assert_eq!( - lookup_table2, - vec![ - bezier2.start(), - bezier2.evaluate(TValue::Parametric(0.25)), - bezier2.evaluate(TValue::Parametric(0.50)), - bezier2.evaluate(TValue::Parametric(0.75)), - bezier2.end() - ] - ); - } - - #[test] - fn test_length() { - let p1 = DVec2::new(30., 50.); - let p2 = DVec2::new(140., 30.); - let p3 = DVec2::new(160., 170.); - let p4 = DVec2::new(77., 129.); - - let bezier_linear = Bezier::from_linear_dvec2(p1, p2); - assert!(utils::f64_compare(bezier_linear.length(None), p1.distance(p2), MAX_ABSOLUTE_DIFFERENCE)); - - let bezier_quadratic = Bezier::from_quadratic_dvec2(p1, p2, p3); - assert!(utils::f64_compare(bezier_quadratic.length(None), 204., 1e-2)); - - let bezier_cubic = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - assert!(utils::f64_compare(bezier_cubic.length(None), 199., 1e-2)); - } - - #[test] - fn test_length_centroid() { - let p1 = DVec2::new(30., 50.); - let p2 = DVec2::new(140., 30.); - let p3 = DVec2::new(160., 170.); - let p4 = DVec2::new(77., 129.); - - let bezier_linear = Bezier::from_linear_dvec2(p1, p2); - assert!(bezier_linear.length_centroid_and_length(None).0.abs_diff_eq((p1 + p2) / 2., MAX_ABSOLUTE_DIFFERENCE)); - - let bezier_quadratic = Bezier::from_quadratic_dvec2(p1, p2, p3); - let expected = DVec2::new(112.81017736920136, 87.98713052477228); - assert!(bezier_quadratic.length_centroid_and_length(None).0.abs_diff_eq(expected, MAX_ABSOLUTE_DIFFERENCE)); - - let bezier_cubic = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - let expected = DVec2::new(95.23597072432115, 88.0645175770206); - assert!(bezier_cubic.length_centroid_and_length(None).0.abs_diff_eq(expected, MAX_ABSOLUTE_DIFFERENCE)); - } - - #[test] - fn test_project() { - let bezier1 = Bezier::from_cubic_coordinates(4., 4., 23., 45., 10., 30., 56., 90.); - assert_eq!(bezier1.project(DVec2::ZERO), 0.); - assert_eq!(bezier1.project(DVec2::new(100., 100.)), 1.); - - let bezier2 = Bezier::from_quadratic_coordinates(0., 0., 0., 100., 100., 100.); - assert_eq!(bezier2.project(DVec2::new(100., 0.)), 0.); - - let bezier3 = Bezier::from_cubic_coordinates(-50., -50., -50., -50., 50., -50., 50., -50.); - assert_eq!(DVec2::new(0., -50.), bezier3.evaluate(TValue::Parametric(bezier3.project(DVec2::new(0., -50.))))); - } -} diff --git a/libraries/bezier-rs/src/bezier/manipulators.rs b/libraries/bezier-rs/src/bezier/manipulators.rs deleted file mode 100644 index 1b70f3586b..0000000000 --- a/libraries/bezier-rs/src/bezier/manipulators.rs +++ /dev/null @@ -1,79 +0,0 @@ -use super::*; - -/// Functionality for the getters and setters of the various points in a Bezier -impl Bezier { - /// Set the coordinates of the start point. - pub fn set_start(&mut self, s: DVec2) { - self.start = s; - } - - /// Set the coordinates of the end point. - pub fn set_end(&mut self, e: DVec2) { - self.end = e; - } - - /// Set the coordinates of the first handle point. This represents the only handle in a quadratic segment. If used on a linear segment, it will be changed to a quadratic. - pub fn set_handle_start(&mut self, h1: DVec2) { - match self.handles { - BezierHandles::Linear => { - self.handles = BezierHandles::Quadratic { handle: h1 }; - } - BezierHandles::Quadratic { ref mut handle } => { - *handle = h1; - } - BezierHandles::Cubic { ref mut handle_start, .. } => { - *handle_start = h1; - } - }; - } - - /// Set the coordinates of the second handle point. This will convert both linear and quadratic segments into cubic ones. For a linear segment, the first handle will be set to the start point. - pub fn set_handle_end(&mut self, h2: DVec2) { - match self.handles { - BezierHandles::Linear => { - self.handles = BezierHandles::Cubic { - handle_start: self.start, - handle_end: h2, - }; - } - BezierHandles::Quadratic { handle } => { - self.handles = BezierHandles::Cubic { handle_start: handle, handle_end: h2 }; - } - BezierHandles::Cubic { ref mut handle_end, .. } => { - *handle_end = h2; - } - }; - } - - /// Get the coordinates of the bezier segment's start point. - pub fn start(&self) -> DVec2 { - self.start - } - - /// Get the coordinates of the bezier segment's end point. - pub fn end(&self) -> DVec2 { - self.end - } - - /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. - pub fn handle_start(&self) -> Option { - self.handles.start() - } - - /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. - pub fn handle_end(&self) -> Option { - self.handles.end() - } - - /// Get an iterator over the coordinates of all points in a vector. - /// - For a linear segment, the order of the points will be: `start`, `end`. - /// - For a quadratic segment, the order of the points will be: `start`, `handle`, `end`. - /// - For a cubic segment, the order of the points will be: `start`, `handle_start`, `handle_end`, `end`. - pub fn get_points(&self) -> impl Iterator + use<> { - match self.handles { - BezierHandles::Linear => [self.start, self.end, DVec2::ZERO, DVec2::ZERO].into_iter().take(2), - BezierHandles::Quadratic { handle } => [self.start, handle, self.end, DVec2::ZERO].into_iter().take(3), - BezierHandles::Cubic { handle_start, handle_end } => [self.start, handle_start, handle_end, self.end].into_iter().take(4), - } - } -} diff --git a/libraries/bezier-rs/src/bezier/mod.rs b/libraries/bezier-rs/src/bezier/mod.rs deleted file mode 100644 index 57c320fd20..0000000000 --- a/libraries/bezier-rs/src/bezier/mod.rs +++ /dev/null @@ -1,147 +0,0 @@ -mod core; -mod lookup; -mod manipulators; -mod solvers; -mod structs; -mod transform; - -use crate::consts::*; -use crate::utils; -use glam::DVec2; -use std::fmt::{Debug, Formatter, Result}; -pub use structs::*; - -/// Representation of the handle point(s) in a bezier segment. -#[derive(Copy, Clone, PartialEq, Debug)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub enum BezierHandles { - Linear, - /// Handles for a quadratic curve. - Quadratic { - /// Point representing the location of the single handle. - handle: DVec2, - }, - /// Handles for a cubic curve. - Cubic { - /// Point representing the location of the handle associated to the start point. - handle_start: DVec2, - /// Point representing the location of the handle associated to the end point. - handle_end: DVec2, - }, -} - -impl std::hash::Hash for BezierHandles { - fn hash(&self, state: &mut H) { - std::mem::discriminant(self).hash(state); - match self { - BezierHandles::Linear => {} - BezierHandles::Quadratic { handle } => handle.to_array().map(|v| v.to_bits()).hash(state), - BezierHandles::Cubic { handle_start, handle_end } => [handle_start, handle_end].map(|handle| handle.to_array().map(|v| v.to_bits())).hash(state), - } - } -} - -impl BezierHandles { - pub fn is_cubic(&self) -> bool { - matches!(self, Self::Cubic { .. }) - } - - pub fn is_finite(&self) -> bool { - match self { - BezierHandles::Linear => true, - BezierHandles::Quadratic { handle } => handle.is_finite(), - BezierHandles::Cubic { handle_start, handle_end } => handle_start.is_finite() && handle_end.is_finite(), - } - } - - /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. - pub fn start(&self) -> Option { - match *self { - BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } => Some(handle_start), - _ => None, - } - } - - /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. - pub fn end(&self) -> Option { - match *self { - BezierHandles::Cubic { handle_end, .. } => Some(handle_end), - _ => None, - } - } - - pub fn move_start(&mut self, delta: DVec2) { - if let BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } = self { - *handle_start += delta - } - } - - pub fn move_end(&mut self, delta: DVec2) { - if let BezierHandles::Cubic { handle_end, .. } = self { - *handle_end += delta - } - } - - /// Returns a Bezier curve that results from applying the transformation function to each handle point in the Bezier. - #[must_use] - pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Self { - match *self { - BezierHandles::Linear => Self::Linear, - BezierHandles::Quadratic { handle } => { - let handle = transformation_function(handle); - Self::Quadratic { handle } - } - BezierHandles::Cubic { handle_start, handle_end } => { - let handle_start = transformation_function(handle_start); - let handle_end = transformation_function(handle_end); - Self::Cubic { handle_start, handle_end } - } - } - } - - #[must_use] - pub fn reversed(self) -> Self { - match self { - BezierHandles::Cubic { handle_start, handle_end } => Self::Cubic { - handle_start: handle_end, - handle_end: handle_start, - }, - _ => self, - } - } -} - -#[cfg(feature = "dyn-any")] -unsafe impl dyn_any::StaticType for BezierHandles { - type Static = BezierHandles; -} - -/// Representation of a bezier curve with 2D points. -#[derive(Copy, Clone, PartialEq)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct Bezier { - /// Start point of the bezier curve. - pub start: DVec2, - /// End point of the bezier curve. - pub end: DVec2, - /// Handles of the bezier curve. - pub handles: BezierHandles, -} - -impl Debug for Bezier { - fn fmt(&self, f: &mut Formatter<'_>) -> Result { - let mut debug_struct = f.debug_struct("Bezier"); - let mut debug_struct_ref = debug_struct.field("start", &self.start); - debug_struct_ref = match self.handles { - BezierHandles::Linear => debug_struct_ref, - BezierHandles::Quadratic { handle } => debug_struct_ref.field("handle", &handle), - BezierHandles::Cubic { handle_start, handle_end } => debug_struct_ref.field("handle_start", &handle_start).field("handle_end", &handle_end), - }; - debug_struct_ref.field("end", &self.end).finish() - } -} - -#[cfg(feature = "dyn-any")] -unsafe impl dyn_any::StaticType for Bezier { - type Static = Bezier; -} diff --git a/libraries/bezier-rs/src/bezier/solvers.rs b/libraries/bezier-rs/src/bezier/solvers.rs deleted file mode 100644 index 320e772d9f..0000000000 --- a/libraries/bezier-rs/src/bezier/solvers.rs +++ /dev/null @@ -1,1152 +0,0 @@ -use super::*; -use crate::polynomial::Polynomial; -use crate::utils::{TValue, solve_cubic, solve_quadratic}; -use crate::{SymmetricalBasis, to_symmetrical_basis_pair}; -use glam::DMat2; -use std::ops::Range; - -/// Functionality that solve for various curve information such as derivative, tangent, intersect, etc. -impl Bezier { - /// Get roots as [[x], [y]] - #[must_use] - pub fn roots(self) -> [Vec; 2] { - let s_basis = to_symmetrical_basis_pair(self); - [s_basis.x.roots(), s_basis.y.roots()] - } - - /// Returns a list of lists of points representing the De Casteljau points for all iterations at the point `t` along the curve using De Casteljau's algorithm. - /// The `i`th element of the list represents the set of points in the `i`th iteration. - /// More information on the algorithm can be found in the [De Casteljau section](https://pomax.github.io/bezierinfo/#decasteljau) in Pomax's primer. - /// - pub fn de_casteljau_points(&self, t: TValue) -> Vec> { - let t = self.t_value_to_parametric(t); - let bezier_points = match self.handles { - BezierHandles::Linear => vec![self.start, self.end], - BezierHandles::Quadratic { handle } => vec![self.start, handle, self.end], - BezierHandles::Cubic { handle_start, handle_end } => vec![self.start, handle_start, handle_end, self.end], - }; - let mut de_casteljau_points = vec![bezier_points]; - let mut current_points = de_casteljau_points.last().unwrap(); - - // Iterate until one point is left, that point will be equal to `evaluate(t)` - while current_points.len() > 1 { - // Map from every adjacent pair of points to their respective midpoints, which decrements by 1 the number of points for the next iteration - let next_points: Vec = current_points.as_slice().windows(2).map(|pair| DVec2::lerp(pair[0], pair[1], t)).collect(); - de_casteljau_points.push(next_points); - - current_points = de_casteljau_points.last().unwrap(); - } - - de_casteljau_points - } - - /// Returns two [`Polynomial`]s representing the parametric equations for x and y coordinates of the bezier curve respectively. - /// The domain of both the equations are from t=0.0 representing the start and t=1.0 representing the end of the bezier curve. - pub fn parametric_polynomial(&self) -> (Polynomial<4>, Polynomial<4>) { - match self.handles { - BezierHandles::Linear => { - let term1 = self.end - self.start; - - (Polynomial::new([self.start.x, term1.x, 0., 0.]), Polynomial::new([self.start.y, term1.y, 0., 0.])) - } - BezierHandles::Quadratic { handle } => { - let term1 = 2. * (handle - self.start); - let term2 = self.start - 2. * handle + self.end; - - (Polynomial::new([self.start.x, term1.x, term2.x, 0.]), Polynomial::new([self.start.y, term1.y, term2.y, 0.])) - } - BezierHandles::Cubic { handle_start, handle_end } => { - let term1 = 3. * (handle_start - self.start); - let term2 = 3. * (handle_end - handle_start) - term1; - let term3 = self.end - self.start - term2 - term1; - - (Polynomial::new([self.start.x, term1.x, term2.x, term3.x]), Polynomial::new([self.start.y, term1.y, term2.y, term3.y])) - } - } - } - - /// Returns a [Bezier] representing the derivative of the original curve. - /// - This function returns `None` for a linear segment. - /// - pub fn derivative(&self) -> Option { - match self.handles { - BezierHandles::Linear => None, - BezierHandles::Quadratic { handle } => { - let p1_minus_p0 = handle - self.start; - let p2_minus_p1 = self.end - handle; - Some(Bezier::from_linear_dvec2(2. * p1_minus_p0, 2. * p2_minus_p1)) - } - BezierHandles::Cubic { handle_start, handle_end } => { - let p1_minus_p0 = handle_start - self.start; - let p2_minus_p1 = handle_end - handle_start; - let p3_minus_p2 = self.end - handle_end; - Some(Bezier::from_quadratic_dvec2(3. * p1_minus_p0, 3. * p2_minus_p1, 3. * p3_minus_p2)) - } - } - } - - /// Returns the non-normalized vector representing the tangent at the point `t` along the curve. - pub(crate) fn non_normalized_tangent(&self, t: f64) -> DVec2 { - match self.handles { - BezierHandles::Linear => self.end - self.start, - _ => self.derivative().unwrap().evaluate(TValue::Parametric(t)), - } - } - - /// Returns a normalized unit vector representing the tangent at the point `t` along the curve. - /// - pub fn tangent(&self, t: TValue) -> DVec2 { - let t = self.t_value_to_parametric(t); - let tangent = self.non_normalized_tangent(t); - if tangent.length() > 0. { tangent.normalize() } else { tangent } - } - - /// Find the `t`-value(s) such that the tangent(s) at `t` pass through the specified point. - /// - #[must_use] - pub fn tangents_to_point(self, point: DVec2) -> Vec { - let sbasis: crate::SymmetricalBasisPair = to_symmetrical_basis_pair(self); - let derivative = sbasis.derivative(); - let cross = (sbasis - point).cross(&derivative); - SymmetricalBasis::roots(&cross) - } - - /// Returns a normalized unit vector representing the direction of the normal at the point `t` along the curve. - /// - pub fn normal(&self, t: TValue) -> DVec2 { - self.tangent(t).perp() - } - - /// Find the `t`-value(s) such that the normal(s) at `t` pass through the specified point. - /// - #[must_use] - pub fn normals_to_point(self, point: DVec2) -> Vec { - let sbasis = to_symmetrical_basis_pair(self); - let derivative = sbasis.derivative(); - let cross = (sbasis - point).dot(&derivative); - SymmetricalBasis::roots(&cross) - } - - /// Returns the curvature, a scalar value for the derivative at the point `t` along the curve. - /// Curvature is 1 over the radius of a circle with an equivalent derivative. - /// - pub fn curvature(&self, t: TValue) -> f64 { - let t = self.t_value_to_parametric(t); - let (d, dd) = match &self.derivative() { - Some(first_derivative) => match first_derivative.derivative() { - Some(second_derivative) => (first_derivative.evaluate(TValue::Parametric(t)), second_derivative.evaluate(TValue::Parametric(t))), - None => (first_derivative.evaluate(TValue::Parametric(t)), first_derivative.end - first_derivative.start), - }, - None => (self.end - self.start, DVec2::new(0., 0.)), - }; - - let numerator = d.x * dd.y - d.y * dd.x; - let denominator = (d.x.powf(2.) + d.y.powf(2.)).powf(1.5); - if denominator.abs() < MAX_ABSOLUTE_DIFFERENCE { 0. } else { numerator / denominator } - } - - /// Returns two lists of `t`-values representing the local extrema of the `x` and `y` parametric curves respectively. - /// The local extrema are defined to be points at which the derivative of the curve is equal to zero. - fn unrestricted_local_extrema(&self) -> [[Option; 3]; 2] { - match self.handles { - BezierHandles::Linear => [[None; 3]; 2], - BezierHandles::Quadratic { handle } => { - let d0 = handle - self.start; - let d1 = self.end - handle; - let dd = d1 - d0; - let a = (dd.x != 0.).then(|| -d0.x / dd.x); - let b = (dd.y != 0.).then(|| -d0.y / dd.y); - [[a, None, None], [b, None, None]] - } - BezierHandles::Cubic { handle_start, handle_end } => { - let d0 = handle_start - self.start; - let d1 = handle_end - handle_start; - let d2 = self.end - handle_end; - let a = d0 - 2. * d1 + d2; - let b = 2. * (d1 - d0); - let c = d0; - let discriminant = b * b - 4. * a * c; - let two_times_a = 2. * a; - [ - utils::solve_quadratic(discriminant.x, two_times_a.x, b.x, c.x), - utils::solve_quadratic(discriminant.y, two_times_a.y, b.y, c.y), - ] - } - } - } - - /// Returns two lists of `t`-values representing the local extrema of the `x` and `y` parametric curves respectively. - /// The list of `t`-values returned are filtered such that they fall within the range `[0, 1]`. - /// - pub fn local_extrema(&self) -> [impl Iterator; 2] { - self.unrestricted_local_extrema().map(|t_values| t_values.into_iter().flatten().filter(|&t| t > 0. && t < 1.)) - } - - /// Return the min and max corners that represent the bounding box of the curve. - /// - pub fn bounding_box(&self) -> [DVec2; 2] { - // Start by taking min/max of endpoints. - let mut endpoints_min = self.start.min(self.end); - let mut endpoints_max = self.start.max(self.end); - - // Iterate through extrema points. - let extrema = self.local_extrema(); - for t_values in extrema { - for t in t_values { - let point = self.evaluate(TValue::Parametric(t)); - // Update bounding box if new min/max is found. - endpoints_min = endpoints_min.min(point); - endpoints_max = endpoints_max.max(point); - } - } - - [endpoints_min, endpoints_max] - } - - /// Return the min and max corners that represent the bounding box enclosing this Bezier's two anchor points and any handles. - pub fn bounding_box_of_anchors_and_handles(&self) -> [DVec2; 2] { - match self.handles { - BezierHandles::Linear => [self.start.min(self.end), self.start.max(self.end)], - BezierHandles::Quadratic { handle } => [self.start.min(self.end).min(handle), self.start.max(self.end).max(handle)], - BezierHandles::Cubic { handle_start, handle_end } => [self.start.min(self.end).min(handle_start).min(handle_end), self.start.max(self.end).max(handle_start).max(handle_end)], - } - } - - /// Returns `true` if the bounding box of the bezier is contained entirely within a rectangle defined by its minimum and maximum corners. - pub fn is_contained_within(&self, min_corner: DVec2, max_corner: DVec2) -> bool { - let [bounding_box_min, bounding_box_max] = self.bounding_box(); - min_corner.x <= bounding_box_min.x && min_corner.y <= bounding_box_min.y && bounding_box_max.x <= max_corner.x && bounding_box_max.y <= max_corner.y - } - - /// Returns an `Iterator` containing all possible parametric `t`-values at the given `x`-coordinate. - pub fn find_tvalues_for_x(&self, x: f64) -> impl Iterator + use<> { - // Compute the roots of the resulting bezier curve - match self.handles { - BezierHandles::Linear => { - // If the transformed linear bezier is on the x-axis, `a` and `b` will both be zero and `solve_linear` will return no roots - let a = self.end.x - self.start.x; - let b = self.start.x - x; - utils::solve_linear(a, b) - } - BezierHandles::Quadratic { handle } => { - let a = self.start.x - 2. * handle.x + self.end.x; - let b = 2. * (handle.x - self.start.x); - let c = self.start.x - x; - - let discriminant = b * b - 4. * a * c; - let two_times_a = 2. * a; - - utils::solve_quadratic(discriminant, two_times_a, b, c) - } - BezierHandles::Cubic { handle_start, handle_end } => { - let start_x = self.start.x; - let a = -start_x + 3. * handle_start.x - 3. * handle_end.x + self.end.x; - let b = 3. * start_x - 6. * handle_start.x + 3. * handle_end.x; - let c = -3. * start_x + 3. * handle_start.x; - let d = start_x - x; - - utils::solve_cubic(a, b, c, d) - } - } - .into_iter() - .flatten() - .filter(|&t| utils::f64_approximately_in_range(t, 0., 1., MAX_ABSOLUTE_DIFFERENCE)) - } - - // TODO: Use an `impl Iterator` return type instead of a `Vec` - /// Returns list of `t`-values representing the inflection points of the curve. - /// The inflection points are defined to be points at which the second derivative of the curve is equal to zero. - pub fn unrestricted_inflections(&self) -> impl Iterator { - match self.handles { - // There exists no inflection points for linear and quadratic beziers. - BezierHandles::Linear => [None; 3], - BezierHandles::Quadratic { .. } => [None; 3], - BezierHandles::Cubic { .. } => { - // Axis align the curve. - let translated_bezier = self.translate(-self.start); - let angle = translated_bezier.end.angle_to(DVec2::new(1., 0.)); - let rotated_bezier = translated_bezier.rotate(angle); - if let BezierHandles::Cubic { handle_start, handle_end } = rotated_bezier.handles { - // These formulas and naming conventions follows https://pomax.github.io/bezierinfo/#inflections - let a = handle_end.x * handle_start.y; - let b = rotated_bezier.end.x * handle_start.y; - let c = handle_start.x * handle_end.y; - let d = rotated_bezier.end.x * handle_end.y; - - let x = -3. * a + 2. * b + 3. * c - d; - let y = 3. * a - b - 3. * c; - let z = c - a; - - let discriminant = y * y - 4. * x * z; - utils::solve_quadratic(discriminant, 2. * x, y, z) - } else { - unreachable!("shouldn't happen") - } - } - } - .into_iter() - .flatten() - } - - /// Returns list of parametric `t`-values representing the inflection points of the curve. - /// The list of `t`-values returned are filtered such that they fall within the range `[0, 1]`. - /// - pub fn inflections(&self) -> Vec { - self.unrestricted_inflections().filter(|&t| t > 0. && t < 1.).collect::>() - } - - /// Implementation of the algorithm to find curve intersections by iterating on bounding boxes. - /// - `self_original_t_interval` - Used to identify the `t` values of the original parent of `self` that the current iteration is representing. - /// - `other_original_t_interval` - Used to identify the `t` values of the original parent of `other` that the current iteration is representing. - pub(crate) fn intersections_between_subcurves(&self, self_original_t_interval: Range, other: &Bezier, other_original_t_interval: Range, error: f64) -> Vec<[f64; 2]> { - let bounding_box1 = self.bounding_box(); - let bounding_box2 = other.bounding_box(); - - // Get the `t` interval of the original parent of `self` and determine the middle `t` value - let Range { start: self_start_t, end: self_end_t } = self_original_t_interval; - let self_mid_t = (self_start_t + self_end_t) / 2.; - - // Get the `t` interval of the original parent of `other` and determine the middle `t` value - let Range { - start: other_start_t, - end: other_end_t, - } = other_original_t_interval; - let other_mid_t = (other_start_t + other_end_t) / 2.; - - let error_threshold = DVec2::new(error, error); - - // Check if the bounding boxes overlap - if utils::do_rectangles_overlap(bounding_box1, bounding_box2) { - // If bounding boxes are within the error threshold (i.e. are small enough), we have found an intersection - if (bounding_box1[1] - bounding_box1[0]).cmplt(error_threshold).all() && (bounding_box2[1] - bounding_box2[0]).cmplt(error_threshold).all() { - // Use the middle t value, return the corresponding `t` value for `self` and `other` - return vec![[self_mid_t, other_mid_t]]; - } - - // Split curves in half and repeat with the combinations of the two halves of each curve - let [split_1_a, split_1_b] = self.split(TValue::Parametric(0.5)); - let [split_2_a, split_2_b] = other.split(TValue::Parametric(0.5)); - - [ - split_1_a.intersections_between_subcurves(self_start_t..self_mid_t, &split_2_a, other_start_t..other_mid_t, error), - split_1_a.intersections_between_subcurves(self_start_t..self_mid_t, &split_2_b, other_mid_t..other_end_t, error), - split_1_b.intersections_between_subcurves(self_mid_t..self_end_t, &split_2_a, other_start_t..other_mid_t, error), - split_1_b.intersections_between_subcurves(self_mid_t..self_end_t, &split_2_b, other_mid_t..other_end_t, error), - ] - .concat() - } else { - vec![] - } - } - - // TODO: Use an `impl Iterator` return type instead of a `Vec` - /// Returns a list of filtered parametric `t` values that correspond to intersection points between the current bezier curve and the provided one - /// such that the difference between adjacent `t` values in sorted order is greater than some minimum separation value. If the difference - /// between 2 adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. - /// The returned `t` values are with respect to the current bezier, not the provided parameter. - /// If the provided curve is linear, then zero intersection points will be returned along colinear segments. - /// - `error` - For intersections where the provided bezier is non-linear, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - The minimum difference between adjacent `t` values in sorted order - /// - pub fn intersections(&self, other: &Bezier, error: Option, minimum_separation: Option) -> Vec { - // TODO: Consider using the `intersections_between_vectors_of_curves` helper function here - // Otherwise, use bounding box to determine intersections - let mut intersection_t_values = self.unfiltered_intersections(other, error); - intersection_t_values.sort_by(|a, b| a.partial_cmp(b).unwrap()); - - intersection_t_values.iter().map(|x| x[0]).fold(Vec::new(), |mut accumulator, t| { - if !accumulator.is_empty() && (accumulator.last().unwrap() - t).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) { - accumulator.pop(); - } - accumulator.push(t); - accumulator - }) - } - - // TODO: Use an `impl Iterator` return type instead of a `Vec` - /// Returns a list of pairs of filtered parametric `t` values that correspond to intersection points between the current bezier curve and the provided one - /// such that the difference between adjacent `t` values in sorted order is greater than some minimum separation value. If the difference - /// between 2 adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. - /// The first value in pair is with respect to the current bezier and the second value in pair is with respect to the provided parameter. - /// If the provided curve is linear, then zero intersection points will be returned along colinear segments. - /// - `error` - For intersections where the provided bezier is non-linear, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - The minimum difference between adjacent `t` values in sorted order - pub fn all_intersections(&self, other: &Bezier, error: Option, minimum_separation: Option) -> Vec<[f64; 2]> { - // TODO: Consider using the `intersections_between_vectors_of_curves` helper function here - // Otherwise, use bounding box to determine intersections - let mut intersection_t_values = self.unfiltered_intersections(other, error); - intersection_t_values.sort_by(|a, b| (a[0] + a[1]).partial_cmp(&(b[0] + b[1])).unwrap()); - - intersection_t_values.iter().fold(Vec::new(), |mut accumulator, t| { - if !accumulator.is_empty() - && (accumulator.last().unwrap()[0] - t[0]).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) - && (accumulator.last().unwrap()[1] - t[1]).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) - { - accumulator.pop(); - } - accumulator.push(*t); - accumulator - }) - } - - // TODO: Use an `impl Iterator` return type instead of a `Vec` - /// Returns a list of `t` values that correspond to intersection points between the current bezier curve and the provided one. The returned `t` values are with respect to the current bezier, not the provided parameter. - /// If the provided curve is linear, then zero intersection points will be returned along colinear segments. - /// - `error` - For intersections where the provided bezier is non-linear, `error` defines the threshold for bounding boxes to be considered an intersection point. - pub fn unfiltered_intersections(&self, other: &Bezier, error: Option) -> Vec<[f64; 2]> { - let error = error.unwrap_or(0.5); - - // TODO: This implementation does not handle the case of line-like bezier curves properly. Two line-like bezier curves which have the same slope - // should not return any intersection points but the current implementation returns many of them. This results in the area of line not being zero. - // Using `is_linear` does prevent it but only in cases where the line-like cubic bezier has it handles at exactly the same position as the start - // and end points. In future, the below algorithm needs to be changed to account for all possible cases. - - if other.is_linear() { - // Rotate the bezier and the line by the angle that the line makes with the x axis - let line_directional_vector = other.end - other.start; - let angle = line_directional_vector.angle_to(DVec2::new(0., 1.)); - let rotation_matrix = DMat2::from_angle(angle); - let rotated_bezier = self.apply_transformation(|point| rotation_matrix * point); - - // Translate the bezier such that the line becomes aligned on top of the x-axis - let vertical_distance = (rotation_matrix * other.start).x; - let translated_bezier = rotated_bezier.translate(DVec2::new(-vertical_distance, 0.)); - - let y_start = (rotation_matrix * other.start).y; - let y_end = (rotation_matrix * other.end).y; - - // Compute the roots of the resulting bezier curve - let list_intersection_t = translated_bezier.find_tvalues_for_x(0.); - - // Calculate line's bounding box - let [min_corner, max_corner] = other.bounding_box_of_anchors_and_handles(); - - return list_intersection_t - // Accept the t value if it is approximately in [0, 1] and if the corresponding coordinates are within the range of the linear line - .filter(|&t| utils::dvec2_approximately_in_range(self.unrestricted_parametric_evaluate(t), min_corner, max_corner, MAX_ABSOLUTE_DIFFERENCE).all()) - // Ensure the returned value is within the correct range - .map(|t| t.clamp(0., 1.)) - .map(|t| { - let y = translated_bezier.evaluate(TValue::Parametric(t)).y; - let other_t = (y-y_start)/(y_end-y_start); - [t, other_t] - }) - .collect::>(); - } - - // TODO: Consider using the `intersections_between_vectors_of_curves` helper function here - // Otherwise, use bounding box to determine intersections - self.intersections_between_subcurves(0. ..1., other, 0. ..1., error).to_vec() - } - - /// Returns a list of `t` values that correspond to points on this Bezier segment where they intersect with the given line. (`direction_vector` does not need to be normalized.) - /// If this needs to be called frequently with a line of the same rotation angle, consider instead using [`line_test_crossings_prerotated`] and moving this function's setup code into your own logic before the repeated call. - pub fn line_test_crossings(&self, point_on_line: DVec2, direction_vector: DVec2) -> impl Iterator + '_ { - // Rotate the bezier and the line by the angle that the line makes with the x axis - let angle = direction_vector.angle_to(DVec2::new(0., 1.)); - let rotation_matrix = DMat2::from_angle(angle); - let rotated_bezier = self.apply_transformation(|point| rotation_matrix * point); - - self.line_test_crossings_prerotated(point_on_line, rotation_matrix, rotated_bezier) - } - - /// Returns a list of `t` values that correspond to points on this Bezier segment where they intersect with the given infinite line. - /// This version of the function is for better performance when calling it frequently without needing to change the rotation between each call. - /// If that isn't important, use [`line_test_crossings`] which wraps this and provides an easier interface by taking a line rotation vector. - /// Instead, this version requires a rotation matrix for the line's rotation and a version of this Bezier segment that has had its rotation already applied. - pub fn line_test_crossings_prerotated(&self, point_on_line: DVec2, rotation_matrix: DMat2, rotated_bezier: Self) -> impl Iterator + '_ { - // Translate the bezier such that the line becomes aligned on top of the x-axis - let vertical_distance = (rotation_matrix.x_axis.x * point_on_line.x) + (rotation_matrix.y_axis.x * point_on_line.y); - let translated_bezier = rotated_bezier.translate(DVec2::new(-vertical_distance, 0.)); - - // Compute the roots of the resulting bezier curve - translated_bezier.find_tvalues_for_x(0.) - } - - /// Returns a list of `t` values that correspond to points on this Bezier segment where they intersect with the given ray. (`ray_direction` does not need to be normalized.) - /// If this needs to be called frequently with a ray of the same rotation angle, consider instead using [`ray_test_crossings_prerotated`] and moving this function's setup code into your own logic before the repeated call. - pub fn ray_test_crossings(&self, ray_start: DVec2, ray_direction: DVec2) -> impl Iterator + '_ { - // Rotate the bezier and the line by the angle that the line makes with the x axis - let angle = ray_direction.angle_to(DVec2::new(0., 1.)); - let rotation_matrix = DMat2::from_angle(angle); - let rotated_bezier = self.apply_transformation(|point| rotation_matrix * point); - - self.ray_test_crossings_prerotated(ray_start, rotation_matrix, rotated_bezier) - } - - /// Returns a list of `t` values that correspond to points on this Bezier segment where they intersect with the given infinite ray. - /// This version of the function is for better performance when calling it frequently without needing to change the rotation between each call. - /// If that isn't important, use [`ray_test_crossings`] which wraps this and provides an easier interface by taking a ray direction vector. - /// Instead, this version requires a rotation matrix for the ray's rotation and a version of this Bezier segment that has had its rotation already applied. - pub fn ray_test_crossings_prerotated(&self, ray_start: DVec2, rotation_matrix: DMat2, rotated_bezier: Self) -> impl Iterator + '_ { - // Intersection t-values include those beyond the [0-1] range where the segment's ends extend through the X-axis - let intersection_t_values_on_rotated_bezier = self.line_test_crossings_prerotated(ray_start, rotation_matrix, rotated_bezier); - - intersection_t_values_on_rotated_bezier - // Accept the t value if it is approximately in [0, 1] and if the corresponding coordinates are within the range of the linear line - .filter(move |&t| { - let point = self.unrestricted_parametric_evaluate(t); - // Ensure the returned value is within the correct range - let in_bounds = point.cmpge(ray_start) | utils::dvec2_compare(point, ray_start, MAX_ABSOLUTE_DIFFERENCE); - in_bounds.x && in_bounds.y - }) - } - - /// Helper function to compute intersections between lists of subcurves. - /// This function uses the algorithm implemented in `intersections_between_subcurves`. - fn intersections_between_vectors_of_curves(subcurves1: &[(Bezier, Range)], subcurves2: &[(Bezier, Range)], error: f64) -> Vec<[f64; 2]> { - let segment_pairs = subcurves1.iter().flat_map(move |(curve1, curve1_t_pair)| { - subcurves2 - .iter() - .filter_map(move |(curve2, curve2_t_pair)| utils::do_rectangles_overlap(curve1.bounding_box(), curve2.bounding_box()).then_some((curve1, curve1_t_pair, curve2, curve2_t_pair))) - }); - segment_pairs - .flat_map(|(curve1, curve1_t_pair, curve2, curve2_t_pair)| curve1.intersections_between_subcurves(curve1_t_pair.clone(), curve2, curve2_t_pair.clone(), error)) - .collect::>() - } - - // TODO: Use an `impl Iterator` return type instead of a `Vec` - /// Returns a list of parametric `t` values that correspond to the self intersection points of the current bezier curve. For each intersection point, the returned `t` value is the smaller of the two that correspond to the point. - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - fn unfiltered_self_intersections(&self, error: Option) -> Vec<[f64; 2]> { - if self.handles == BezierHandles::Linear || matches!(self.handles, BezierHandles::Quadratic { .. }) { - return vec![]; - } - - let error = error.unwrap_or(0.5); - - // Get 2 copies of the reduced curves - let (self1, self1_t_values) = self.reduced_curves_and_t_values(None); - let (self2, self2_t_values) = (self1.clone(), self1_t_values.clone()); - let num_curves = self1.len(); - - // Adjacent reduced curves cannot intersect - if num_curves <= 2 { - return vec![]; - } - - // Create iterators that combine a subcurve with the `t` value pair that it was trimmed with - let combined_iterator1 = self1.into_iter().zip(self1_t_values.iter().map(|t_pair| Range { start: t_pair[0], end: t_pair[1] })); - // Second one needs to be a list because Iterator does not implement copy - let combined_list2: Vec<(Bezier, Range)> = self2.into_iter().zip(self2_t_values.iter().map(|t_pair| Range { start: t_pair[0], end: t_pair[1] })).collect(); - - // For each curve, look for intersections with every curve that is at least 2 indices away - combined_iterator1 - .take(num_curves - 2) - .enumerate() - .flat_map(|(index, (subcurve, t_pair))| Bezier::intersections_between_vectors_of_curves(&[(subcurve, t_pair)], &combined_list2[index + 2..], error)) - .collect() - } - - // TODO: Use an `impl Iterator` return type instead of a `Vec` - /// Returns a list of parametric `t` values that correspond to the self intersection points of the current bezier curve. For each intersection point, the returned `t` value is the smaller of the two that correspond to the point. - /// If the difference between 2 adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - The minimum difference between adjacent `t` values in sorted order - pub fn self_intersections(&self, error: Option, minimum_separation: Option) -> Vec<[f64; 2]> { - let mut intersection_t_values = self.unfiltered_self_intersections(error); - intersection_t_values.sort_by(|a, b| (a[0] + a[1]).partial_cmp(&(b[0] + b[1])).unwrap()); - - intersection_t_values.iter().fold(Vec::new(), |mut accumulator, t| { - if !accumulator.is_empty() - && (accumulator.last().unwrap()[0] - t[0]).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) - && (accumulator.last().unwrap()[1] - t[1]).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) - { - accumulator.pop(); - } - accumulator.push(*t); - accumulator - }) - } - - /// Returns a list of parametric `t` values that correspond to the intersection points between the curve and a rectangle defined by opposite corners. - /// - pub fn rectangle_intersections(&self, corner1: DVec2, corner2: DVec2) -> Vec { - [ - Bezier::from_linear_coordinates(corner1.x, corner1.y, corner2.x, corner1.y), - Bezier::from_linear_coordinates(corner2.x, corner1.y, corner2.x, corner2.y), - Bezier::from_linear_coordinates(corner2.x, corner2.y, corner1.x, corner2.y), - Bezier::from_linear_coordinates(corner1.x, corner2.y, corner1.x, corner1.y), - ] - .iter() - .flat_map(|bezier| self.intersections(bezier, None, None)) - .collect() - } - - /// Returns a cubic bezier which joins this with the provided bezier curve. - /// The resulting path formed by the Bezier curves is continuous up to the first derivative. - /// - pub fn join(&self, other: &Bezier) -> Bezier { - let handle1 = self.non_normalized_tangent(1.) / 3. + self.end; - let handle2 = other.start - other.non_normalized_tangent(0.) / 3.; - Bezier::from_cubic_dvec2(self.end, handle1, handle2, other.start) - } - - /// Compute the winding order (number of times crossing an infinite line to the left of the point) - /// - /// Assumes curve is split at the extrema. - fn pre_split_winding_number(&self, target_point: DVec2) -> i32 { - // Clockwise is -1, anticlockwise is +1 (with +y as up) - // Looking only to the left (-x) of the target_point - let resulting_sign = if self.end.y > self.start.y { - if target_point.y < self.start.y || target_point.y >= self.end.y { - return 0; - } - -1 - } else if self.end.y < self.start.y { - if target_point.y < self.end.y || target_point.y >= self.start.y { - return 0; - } - 1 - } else { - return 0; - }; - match &self.handles { - BezierHandles::Linear => { - if target_point.x < self.start.x.min(self.end.x) { - return 0; - } - if target_point.x >= self.start.x.max(self.end.x) { - return resulting_sign; - } - // line equation ax + by = c - let a = self.end.y - self.start.y; - let b = self.start.x - self.end.x; - let c = a * self.start.x + b * self.start.y; - if (a * target_point.x + b * target_point.y - c) * (resulting_sign as f64) <= 0. { - resulting_sign - } else { - 0 - } - } - BezierHandles::Quadratic { handle: p1 } => { - if target_point.x < self.start.x.min(self.end.x).min(p1.x) { - return 0; - } - if target_point.x >= self.start.x.max(self.end.x).max(p1.x) { - return resulting_sign; - } - let a = self.end.y - 2. * p1.y + self.start.y; - let b = 2. * (p1.y - self.start.y); - let c = self.start.y - target_point.y; - - let discriminant = b * b - 4. * a * c; - let two_times_a = 2. * a; - for t in solve_quadratic(discriminant, two_times_a, b, c).into_iter().flatten() { - if (0.0..=1.).contains(&t) { - let x = self.evaluate(TValue::Parametric(t)).x; - if target_point.x >= x { - return resulting_sign; - } else { - return 0; - } - } - } - 0 - } - BezierHandles::Cubic { handle_start: p1, handle_end: p2 } => { - if target_point.x < self.start.x.min(self.end.x).min(p1.x).min(p2.x) { - return 0; - } - if target_point.x >= self.start.x.max(self.end.x).max(p1.x).max(p2.x) { - return resulting_sign; - } - let a = self.end.y - 3. * p2.y + 3. * p1.y - self.start.y; - let b = 3. * (p2.y - 2. * p1.y + self.start.y); - let c = 3. * (p1.y - self.start.y); - let d = self.start.y - target_point.y; - for t in solve_cubic(a, b, c, d).into_iter().flatten() { - if (0.0..=1.).contains(&t) { - let x = self.evaluate(TValue::Parametric(t)).x; - if target_point.x >= x { - return resulting_sign; - } else { - return 0; - } - } - } - 0 - } - } - } - - /// Compute the winding number contribution of a single segment. - /// - /// Cast a ray to the left and count intersections. - pub fn winding(&self, target_point: DVec2) -> i32 { - let [x_extrema_t, y_extrema_t] = self.unrestricted_local_extrema(); - let mut x_extrema_t = x_extrema_t.map(|t| t.filter(|&t| t > 0. && t < 1.)); - let mut y_extrema_t = y_extrema_t.map(|t| t.filter(|&t| t > 0. && t < 1.)); - - let mut results = [None; 8]; - results[7] = Some(1.); - for i in (0..7).rev() { - let Some(min) = x_extrema_t.iter_mut().chain(y_extrema_t.iter_mut()).max_by(|a, b| a.partial_cmp(b).unwrap()) else { - results[i] = Some(0.); - break; - }; - if let Some(value) = min.take() { - results[i] = Some(value); - } else { - results[i] = Some(0.); - break; - } - } - results - .windows(2) - .flat_map(|t| t[0].and_then(|first| t[1].map(|second| [first, second]))) - .map(|t| self.trim(TValue::Parametric(t[0]), TValue::Parametric(t[1])).pre_split_winding_number(target_point)) - .sum() - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::compare::{compare_f64s, compare_points, compare_vec_of_points}; - - #[test] - fn test_de_casteljau_points() { - let bezier = Bezier::from_cubic_coordinates(0., 0., 0., 100., 100., 100., 100., 0.); - let de_casteljau_points = bezier.de_casteljau_points(TValue::Parametric(0.5)); - let expected_de_casteljau_points = vec![ - vec![DVec2::new(0., 0.), DVec2::new(0., 100.), DVec2::new(100., 100.), DVec2::new(100., 0.)], - vec![DVec2::new(0., 50.), DVec2::new(50., 100.), DVec2::new(100., 50.)], - vec![DVec2::new(25., 75.), DVec2::new(75., 75.)], - vec![DVec2::new(50., 75.)], - ]; - assert_eq!(&de_casteljau_points, &expected_de_casteljau_points); - - assert_eq!(expected_de_casteljau_points[3][0], bezier.evaluate(TValue::Parametric(0.5))); - } - - #[test] - fn test_derivative() { - // Test derivatives of each Bezier curve type - let p1 = DVec2::new(10., 10.); - let p2 = DVec2::new(40., 30.); - let p3 = DVec2::new(60., 60.); - let p4 = DVec2::new(70., 100.); - - let linear = Bezier::from_linear_dvec2(p1, p2); - assert!(linear.derivative().is_none()); - - let quadratic = Bezier::from_quadratic_dvec2(p1, p2, p3); - let derivative_quadratic = quadratic.derivative().unwrap(); - assert_eq!(derivative_quadratic, Bezier::from_linear_coordinates(60., 40., 40., 60.)); - - let cubic = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - let derivative_cubic = cubic.derivative().unwrap(); - assert_eq!(derivative_cubic, Bezier::from_quadratic_coordinates(90., 60., 60., 90., 30., 120.)); - - // Cases where the all manipulator points are the same - let quadratic_point = Bezier::from_quadratic_dvec2(p1, p1, p1); - assert_eq!(quadratic_point.derivative().unwrap(), Bezier::from_linear_dvec2(DVec2::ZERO, DVec2::ZERO)); - - let cubic_point = Bezier::from_cubic_dvec2(p1, p1, p1, p1); - assert_eq!(cubic_point.derivative().unwrap(), Bezier::from_quadratic_dvec2(DVec2::ZERO, DVec2::ZERO, DVec2::ZERO)); - } - - #[test] - fn test_tangent() { - // Test tangents at start and end points of each Bezier curve type - let p1 = DVec2::new(10., 10.); - let p2 = DVec2::new(40., 30.); - let p3 = DVec2::new(60., 60.); - let p4 = DVec2::new(70., 100.); - - let linear = Bezier::from_linear_dvec2(p1, p2); - let unit_slope = DVec2::new(30., 20.).normalize(); - assert_eq!(linear.tangent(TValue::Parametric(0.)), unit_slope); - assert_eq!(linear.tangent(TValue::Parametric(1.)), unit_slope); - - let quadratic = Bezier::from_quadratic_dvec2(p1, p2, p3); - assert_eq!(quadratic.tangent(TValue::Parametric(0.)), DVec2::new(60., 40.).normalize()); - assert_eq!(quadratic.tangent(TValue::Parametric(1.)), DVec2::new(40., 60.).normalize()); - - let cubic = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - assert_eq!(cubic.tangent(TValue::Parametric(0.)), DVec2::new(90., 60.).normalize()); - assert_eq!(cubic.tangent(TValue::Parametric(1.)), DVec2::new(30., 120.).normalize()); - } - - #[test] - fn tangent_at_point() { - let validate = |bz: Bezier, p: DVec2| { - let solutions = bz.tangents_to_point(p); - assert_ne!(solutions.len(), 0); - for t in solutions { - let pos = bz.evaluate(TValue::Parametric(t)); - let expected_tangent = (pos - p).normalize(); - let tangent = bz.tangent(TValue::Parametric(t)); - assert!(expected_tangent.perp_dot(tangent).abs() < 0.2, "Expected tangent {expected_tangent} found {tangent} pos {pos}") - } - }; - let bz = Bezier::from_quadratic_coordinates(55., 50., 165., 30., 185., 170.); - let p = DVec2::new(193., 83.); - validate(bz, p); - - let bz = Bezier::from_cubic_coordinates(55., 30., 18., 139., 175., 30., 185., 160.); - let p = DVec2::new(127., 121.); - validate(bz, p); - } - - #[test] - fn test_normal() { - // Test normals at start and end points of each Bezier curve type - let p1 = DVec2::new(10., 10.); - let p2 = DVec2::new(40., 30.); - let p3 = DVec2::new(60., 60.); - let p4 = DVec2::new(70., 100.); - - let linear = Bezier::from_linear_dvec2(p1, p2); - let unit_slope = DVec2::new(-20., 30.).normalize(); - assert_eq!(linear.normal(TValue::Parametric(0.)), unit_slope); - assert_eq!(linear.normal(TValue::Parametric(1.)), unit_slope); - - let quadratic = Bezier::from_quadratic_dvec2(p1, p2, p3); - assert_eq!(quadratic.normal(TValue::Parametric(0.)), DVec2::new(-40., 60.).normalize()); - assert_eq!(quadratic.normal(TValue::Parametric(1.)), DVec2::new(-60., 40.).normalize()); - - let cubic = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - assert_eq!(cubic.normal(TValue::Parametric(0.)), DVec2::new(-60., 90.).normalize()); - assert_eq!(cubic.normal(TValue::Parametric(1.)), DVec2::new(-120., 30.).normalize()); - } - - #[test] - fn normal_at_point() { - let validate = |bz: Bezier, p: DVec2| { - let solutions = bz.normals_to_point(p); - assert_ne!(solutions.len(), 0); - for t in solutions { - let pos = bz.evaluate(TValue::Parametric(t)); - let expected_normal = (pos - p).normalize(); - let normal = bz.normal(TValue::Parametric(t)); - assert!(expected_normal.perp_dot(normal).abs() < 0.2, "Expected normal {expected_normal} found {normal} pos {pos}") - } - }; - - let bz = Bezier::from_linear_coordinates(50., 50., 100., 100.); - let p = DVec2::new(100., 50.); - validate(bz, p); - - let bz = Bezier::from_quadratic_coordinates(55., 50., 165., 30., 185., 170.); - let p = DVec2::new(193., 83.); - validate(bz, p); - - let bz = Bezier::from_cubic_coordinates(55., 30., 18., 139., 175., 30., 185., 160.); - let p = DVec2::new(127., 121.); - validate(bz, p); - - let bz = Bezier::from_cubic_coordinates(55., 30., 85., 140., 175., 30., 185., 160.); - let p = DVec2::new(17., 172.); - validate(bz, p); - } - - #[test] - fn test_curvature() { - let p1 = DVec2::new(10., 10.); - let p2 = DVec2::new(50., 10.); - let p3 = DVec2::new(50., 50.); - let p4 = DVec2::new(50., 10.); - - let linear = Bezier::from_linear_dvec2(p1, p2); - assert_eq!(linear.curvature(TValue::Parametric(0.)), 0.); - assert_eq!(linear.curvature(TValue::Parametric(0.5)), 0.); - assert_eq!(linear.curvature(TValue::Parametric(1.)), 0.); - - let quadratic = Bezier::from_quadratic_dvec2(p1, p2, p3); - assert!(compare_f64s(quadratic.curvature(TValue::Parametric(0.)), 0.0125)); - assert!(compare_f64s(quadratic.curvature(TValue::Parametric(0.5)), 0.035355)); - assert!(compare_f64s(quadratic.curvature(TValue::Parametric(1.)), 0.0125)); - - let cubic = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - assert!(compare_f64s(cubic.curvature(TValue::Parametric(0.)), 0.016667)); - assert!(compare_f64s(cubic.curvature(TValue::Parametric(0.5)), 0.)); - assert!(compare_f64s(cubic.curvature(TValue::Parametric(1.)), 0.)); - - // The curvature at an inflection point is zero - let inflection_curve = Bezier::from_cubic_coordinates(30., 30., 30., 150., 150., 30., 150., 150.); - let inflections = inflection_curve.inflections(); - assert_eq!(inflection_curve.curvature(TValue::Parametric(inflections[0])), 0.); - } - - #[test] - fn test_extrema_linear() { - // Linear bezier cannot have extrema - let line = Bezier::from_linear_dvec2(DVec2::new(10., 10.), DVec2::new(50., 50.)); - let [x_extrema, y_extrema] = line.local_extrema(); - assert_eq!(y_extrema.count(), 0); - assert_eq!(x_extrema.count(), 0); - } - - #[test] - fn test_extrema_quadratic() { - // Test with no x-extrema, no y-extrema - let bezier1 = Bezier::from_quadratic_coordinates(40., 35., 149., 54., 155., 170.); - let [x_extrema1, y_extrema1] = bezier1.local_extrema(); - assert_eq!(x_extrema1.count(), 0); - assert_eq!(y_extrema1.count(), 0); - - // Test with 1 x-extrema, no y-extrema - let bezier2 = Bezier::from_quadratic_coordinates(45., 30., 170., 90., 45., 150.); - let [x_extrema2, y_extrema2] = bezier2.local_extrema(); - assert_eq!(x_extrema2.count(), 1); - assert_eq!(y_extrema2.count(), 0); - - // Test with no x-extrema, 1 y-extrema - let bezier3 = Bezier::from_quadratic_coordinates(30., 130., 100., 25., 150., 130.); - let [x_extrema3, y_extrema3] = bezier3.local_extrema(); - assert_eq!(x_extrema3.count(), 0); - assert_eq!(y_extrema3.count(), 1); - - // Test with 1 x-extrema, 1 y-extrema - let bezier4 = Bezier::from_quadratic_coordinates(50., 70., 170., 35., 60., 150.); - let [x_extrema4, y_extrema4] = bezier4.local_extrema(); - assert_eq!(x_extrema4.count(), 1); - assert_eq!(y_extrema4.count(), 1); - } - - #[test] - fn test_extrema_cubic() { - // 0 x-extrema, 0 y-extrema - let bezier1 = Bezier::from_cubic_coordinates(100., 105., 250., 250., 110., 150., 260., 260.); - let [x_extrema1, y_extrema1] = bezier1.local_extrema(); - assert_eq!(x_extrema1.count(), 0); - assert_eq!(y_extrema1.count(), 0); - - // 1 x-extrema, 0 y-extrema - let bezier2 = Bezier::from_cubic_coordinates(55., 145., 40., 40., 110., 110., 180., 40.); - let [x_extrema2, y_extrema2] = bezier2.local_extrema(); - assert_eq!(x_extrema2.count(), 1); - assert_eq!(y_extrema2.count(), 0); - - // 1 x-extrema, 1 y-extrema - let bezier3 = Bezier::from_cubic_coordinates(100., 105., 170., 10., 25., 20., 20., 120.); - let [x_extrema3, y_extrema3] = bezier3.local_extrema(); - assert_eq!(x_extrema3.count(), 1); - assert_eq!(y_extrema3.count(), 1); - - // 1 x-extrema, 2 y-extrema - let bezier4 = Bezier::from_cubic_coordinates(50., 90., 120., 16., 150., 190., 45., 150.); - let [x_extrema4, y_extrema4] = bezier4.local_extrema(); - assert_eq!(x_extrema4.count(), 1); - assert_eq!(y_extrema4.count(), 2); - - // 2 x-extrema, 0 y-extrema - let bezier5 = Bezier::from_cubic_coordinates(40., 170., 150., 160., 10., 10., 170., 10.); - let [x_extrema5, y_extrema5] = bezier5.local_extrema(); - assert_eq!(x_extrema5.count(), 2); - assert_eq!(y_extrema5.count(), 0); - - // 2 x-extrema, 1 y-extrema - let bezier6 = Bezier::from_cubic_coordinates(40., 170., 150., 160., 10., 10., 160., 45.); - let [x_extrema6, y_extrema6] = bezier6.local_extrema(); - assert_eq!(x_extrema6.count(), 2); - assert_eq!(y_extrema6.count(), 1); - - // 2 x-extrema, 2 y-extrema - let bezier7 = Bezier::from_cubic_coordinates(46., 60., 140., 10., 50., 160., 120., 120.); - let [x_extrema7, y_extrema7] = bezier7.local_extrema(); - assert_eq!(x_extrema7.count(), 2); - assert_eq!(y_extrema7.count(), 2); - } - - #[test] - fn test_bounding_box() { - // Case where the start and end points dictate the bounding box - let bezier_simple = Bezier::from_linear_coordinates(0., 0., 10., 10.); - assert_eq!(bezier_simple.bounding_box(), [DVec2::new(0., 0.), DVec2::new(10., 10.)]); - - // Case where the curve's extrema dictate the bounding box - let bezier_complex = Bezier::from_cubic_coordinates(90., 70., 25., 25., 175., 175., 110., 130.); - assert!(compare_vec_of_points( - bezier_complex.bounding_box().to_vec(), - vec![DVec2::new(73.2774, 61.4755), DVec2::new(126.7226, 138.5245)], - 1e-3 - )); - } - - #[test] - fn test_find_tvalues_for_x() { - struct Assertion { - bezier: Bezier, - x: f64, - ys: &'static [f64], - } - - let assertions = [ - Assertion { - bezier: Bezier::from_linear_coordinates(0., 0., 20., 10.), - x: 5., - ys: &[2.5], - }, - Assertion { - bezier: Bezier::from_quadratic_coordinates(0., 0., 10., 5., 20., 10.), - x: 5., - ys: &[2.5], - }, - Assertion { - bezier: Bezier::from_cubic_coordinates(0., 0., 10., 5., 10., 5., 20., 10.), - x: 5., - ys: &[2.5], - }, - Assertion { - bezier: Bezier::from_cubic_coordinates(90., 70., 25., 25., 175., 175., 110., 130.), - x: 100., - ys: &[100.], - }, - Assertion { - bezier: Bezier::from_cubic_coordinates(90., 70., 25., 25., 175., 175., 110., 130.), - x: 80., - ys: &[63.62683, 74.53867], - }, - Assertion { - bezier: Bezier::from_cubic_coordinates(110., 70., 25., 25., 175., 175., 90., 130.), - x: 100., - ys: &[65.11345, 100., 134.88655], - }, - ]; - - for Assertion { bezier, x, ys } in assertions { - let mut got: Vec = bezier - .find_tvalues_for_x(x) - .map(|t| bezier.evaluate(TValue::Parametric(t))) - .inspect(|p| assert!((p.x - x).abs() < 1e-4, "wrong x-coordinate, got {} expected {x}", p.x)) - .map(|p| p.y) - .collect(); - assert_eq!(got.len(), ys.len()); - got.sort_by(f64::total_cmp); - got.into_iter() - .zip(ys) - .for_each(|(got, &expected)| assert!((got - expected).abs() < 1e-4, "wrong y-coordinate, got {got} expected {expected}")); - } - } - - #[test] - fn test_inflections() { - let bezier = Bezier::from_cubic_coordinates(30., 30., 30., 150., 150., 30., 150., 150.); - let inflections = bezier.inflections(); - assert_eq!(inflections.len(), 1); - assert_eq!(inflections[0], 0.5); - } - - #[test] - fn test_intersect_line_segment_linear() { - let p1 = DVec2::new(30., 60.); - let p2 = DVec2::new(140., 120.); - - // Intersection at edge of curve - let bezier = Bezier::from_linear_dvec2(p1, p2); - let line1 = Bezier::from_linear_coordinates(20., 60., 70., 60.); - let intersections1 = bezier.intersections(&line1, None, None); - assert!(intersections1.len() == 1); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections1[0])), DVec2::new(30., 60.))); - - // Intersection in the middle of curve - let line2 = Bezier::from_linear_coordinates(150., 150., 30., 30.); - let intersections2 = bezier.intersections(&line2, None, None); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections2[0])), DVec2::new(96., 96.))); - } - - #[test] - fn test_intersect_line_segment_quadratic() { - let p1 = DVec2::new(30., 50.); - let p2 = DVec2::new(140., 30.); - let p3 = DVec2::new(160., 170.); - - // Intersection at edge of curve - let bezier = Bezier::from_quadratic_dvec2(p1, p2, p3); - let line1 = Bezier::from_linear_coordinates(20., 50., 40., 50.); - let intersections1 = bezier.intersections(&line1, None, None); - assert!(intersections1.len() == 1); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections1[0])), p1)); - - // Intersection in the middle of curve - let line2 = Bezier::from_linear_coordinates(150., 150., 30., 30.); - let intersections2 = bezier.intersections(&line2, None, None); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections2[0])), DVec2::new(47.77355, 47.77354))); - } - - #[test] - fn test_intersect_line_segment_cubic() { - let p1 = DVec2::new(30., 30.); - let p2 = DVec2::new(60., 140.); - let p3 = DVec2::new(150., 30.); - let p4 = DVec2::new(160., 160.); - - let bezier = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - // Intersection at edge of curve, Discriminant > 0 - let line1 = Bezier::from_linear_coordinates(20., 30., 40., 30.); - let intersections1 = bezier.intersections(&line1, None, None); - assert!(intersections1.len() == 1); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections1[0])), p1)); - - // Intersection at edge and in middle of curve, Discriminant < 0 - let line2 = Bezier::from_linear_coordinates(150., 150., 30., 30.); - let intersections2 = bezier.intersections(&line2, None, None); - assert!(intersections2.len() == 2); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections2[0])), p1)); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections2[1])), DVec2::new(85.84, 85.84))); - } - - #[test] - fn test_intersect_curve_cubic_anchor_handle_overlap() { - // M31 94 C40 40 107 107 106 106 - - let p1 = DVec2::new(31., 94.); - let p2 = DVec2::new(40., 40.); - let p3 = DVec2::new(107., 107.); - let p4 = DVec2::new(106., 106.); - let bezier = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - - let line = Bezier::from_linear_coordinates(150., 150., 20., 20.); - let intersections = bezier.intersections(&line, None, None); - - assert_eq!(intersections.len(), 1); - assert!(compare_points(bezier.evaluate(TValue::Parametric(intersections[0])), p4)); - } - - #[test] - fn test_intersect_curve_cubic_edge_case() { - // M34 107 C40 40 120 120 102 29 - - let p1 = DVec2::new(34., 107.); - let p2 = DVec2::new(40., 40.); - let p3 = DVec2::new(120., 120.); - let p4 = DVec2::new(102., 29.); - let bezier = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - - let line = Bezier::from_linear_coordinates(150., 150., 20., 20.); - let intersections = bezier.intersections(&line, None, None); - - assert_eq!(intersections.len(), 1); - } - - #[test] - fn test_intersect_curve() { - let bezier1 = Bezier::from_cubic_coordinates(30., 30., 60., 140., 150., 30., 160., 160.); - let bezier2 = Bezier::from_quadratic_coordinates(175., 140., 20., 20., 120., 20.); - - let intersections1 = bezier1.intersections(&bezier2, None, None); - let intersections2 = bezier2.intersections(&bezier1, None, None); - - let intersections1_points: Vec = intersections1.iter().map(|&t| bezier1.evaluate(TValue::Parametric(t))).collect(); - let intersections2_points: Vec = intersections2.iter().map(|&t| bezier2.evaluate(TValue::Parametric(t))).rev().collect(); - - assert!(compare_vec_of_points(intersections1_points, intersections2_points, 2.)); - } - - #[test] - fn test_intersect_with_self() { - let bezier = Bezier::from_cubic_coordinates(160., 180., 170., 10., 30., 90., 180., 140.); - let intersections = bezier.self_intersections(Some(0.5), None); - assert!(compare_vec_of_points( - intersections.iter().map(|&t| bezier.evaluate(TValue::Parametric(t[0]))).collect(), - intersections.iter().map(|&t| bezier.evaluate(TValue::Parametric(t[1]))).collect(), - 2. - )); - assert!(Bezier::from_linear_coordinates(160., 180., 170., 10.).self_intersections(None, None).is_empty()); - assert!(Bezier::from_quadratic_coordinates(160., 180., 170., 10., 30., 90.).self_intersections(None, None).is_empty()); - } -} diff --git a/libraries/bezier-rs/src/bezier/structs.rs b/libraries/bezier-rs/src/bezier/structs.rs deleted file mode 100644 index 088d541bef..0000000000 --- a/libraries/bezier-rs/src/bezier/structs.rs +++ /dev/null @@ -1,71 +0,0 @@ -use glam::DVec2; -use std::fmt::{Debug, Formatter, Result}; - -/// Struct used to represent the different strategies for generating arc approximations. -#[derive(Copy, Clone)] -pub enum ArcStrategy { - /// Start with the greedy strategy of maximizing arc approximations and automatically switch to the divide-and-conquer when the greedy approximations no longer fall within the error bound. - Automatic, - /// Use the greedy strategy to maximize approximated arcs, despite potentially erroneous arcs. - FavorLargerArcs, - /// Use the divide-and-conquer strategy that prioritizes correctness over maximal arcs. - FavorCorrectness, -} - -/// Struct to represent optional parameters that can be passed to the `arcs` function. -#[derive(Copy, Clone)] -pub struct ArcsOptions { - /// Determines how the approximated arcs are computed. - /// When maximizing the arcs, the algorithm may return incorrect arcs when the curve contains any small loops or segments that look like a very thin "U". - /// The enum options behave as follows: - /// - `Automatic`: Maximize arcs until an erroneous approximation is found. Compute the arcs of the rest of the curve by first splitting on extremas to ensure no more erroneous cases are encountered. - /// - `FavorLargerArcs`: Maximize arcs using the original algorithm from the [Approximating a Bezier curve with circular arcs](https://pomax.github.io/bezierinfo/#arcapproximation) section of Pomax's bezier curve primer. Erroneous arcs are possible. - /// - `FavorCorrectness`: Prioritize correctness by first spliting the curve by its extremas and determine the arc approximation of each segment instead. - /// - /// The default value is `Automatic`. - pub strategy: ArcStrategy, - /// The error used for approximating the arc's fit. The default is `0.5`. - pub error: f64, - /// The maximum number of segment iterations used as attempts for arc approximations. The default is `100`. - pub max_iterations: usize, -} - -impl Default for ArcsOptions { - fn default() -> Self { - Self { - strategy: ArcStrategy::Automatic, - error: 0.5, - max_iterations: 100, - } - } -} - -/// Struct to represent the circular arc approximation used in the `arcs` bezier function. -#[derive(Copy, Clone, PartialEq)] -pub struct CircleArc { - /// The center point of the circle. - pub center: DVec2, - /// The radius of the circle. - pub radius: f64, - /// The start angle of the circle sector in rad. - pub start_angle: f64, - /// The end angle of the circle sector in rad. - pub end_angle: f64, -} - -impl Debug for CircleArc { - fn fmt(&self, f: &mut Formatter<'_>) -> Result { - write!(f, "Center: {}, radius: {}, start to end angles: {} to {}", self.center, self.radius, self.start_angle, self.end_angle) - } -} - -impl Default for CircleArc { - fn default() -> Self { - Self { - center: DVec2::ZERO, - radius: 0., - start_angle: 0., - end_angle: 0., - } - } -} diff --git a/libraries/bezier-rs/src/bezier/transform.rs b/libraries/bezier-rs/src/bezier/transform.rs deleted file mode 100644 index 6a48dc73bb..0000000000 --- a/libraries/bezier-rs/src/bezier/transform.rs +++ /dev/null @@ -1,1053 +0,0 @@ -use super::*; -use crate::compare::compare_points; -use crate::utils::{Cap, TValue, f64_compare}; -use crate::{AppendType, ManipulatorGroup, Subpath}; -use glam::DMat2; -use std::f64::consts::PI; - -/// Functionality that transform Beziers, such as split, reduce, offset, etc. -impl Bezier { - /// Returns a linear approximation of the given [Bezier]. For higher order [Bezier], this means simply dropping the handles. - pub fn to_linear(&self) -> Bezier { - Bezier::from_linear_dvec2(self.start(), self.end()) - } - - /// Returns a quadratic approximation of the given [Bezier]. For cubic Bezier, which typically cannot be represented by a single - /// quadratic segment, this function simply takes the average of the cubic handles to be the new quadratic handle. - pub fn to_quadratic(&self) -> Bezier { - let handle = match self.handles { - BezierHandles::Linear => self.start, - BezierHandles::Quadratic { handle } => handle, - BezierHandles::Cubic { handle_start, handle_end } => (handle_start + handle_end) / 2., - }; - Bezier::from_quadratic_dvec2(self.start, handle, self.end) - } - - /// Returns a cubic approximation of the given [Bezier]. - pub fn to_cubic(&self) -> Bezier { - let (handle_start, handle_end) = match self.handles { - BezierHandles::Linear => (self.start, self.end), - // Conversion reference source: https://stackoverflow.com/a/63059651/775283 - BezierHandles::Quadratic { handle } => (self.start + (2. / 3.) * (handle - self.start), self.end + (2. / 3.) * (handle - self.end)), - BezierHandles::Cubic { handle_start: _, handle_end: _ } => return *self, - }; - Bezier::from_cubic_dvec2(self.start, handle_start, handle_end, self.end) - } - - /// Returns the pair of Bezier curves that result from splitting the original curve at the point `t` along the curve. - /// - pub fn split(&self, t: TValue) -> [Bezier; 2] { - let t = self.t_value_to_parametric(t); - let split_point = self.evaluate(TValue::Parametric(t)); - - match self.handles { - BezierHandles::Linear => [Bezier::from_linear_dvec2(self.start, split_point), Bezier::from_linear_dvec2(split_point, self.end)], - // TODO: Actually calculate the correct handle locations - BezierHandles::Quadratic { handle } => { - let t_minus_one = t - 1.; - [ - Bezier::from_quadratic_dvec2(self.start, t * handle - t_minus_one * self.start, split_point), - Bezier::from_quadratic_dvec2(split_point, t * self.end - t_minus_one * handle, self.end), - ] - } - BezierHandles::Cubic { handle_start, handle_end } => { - let t_minus_one = t - 1.; - [ - Bezier::from_cubic_dvec2( - self.start, - t * handle_start - t_minus_one * self.start, - (t * t) * handle_end - 2. * t * t_minus_one * handle_start + (t_minus_one * t_minus_one) * self.start, - split_point, - ), - Bezier::from_cubic_dvec2( - split_point, - (t * t) * self.end - 2. * t * t_minus_one * handle_end + (t_minus_one * t_minus_one) * handle_start, - t * self.end - t_minus_one * handle_end, - self.end, - ), - ] - } - } - } - - /// Returns a reversed version of the Bezier curve. - pub fn reverse(&self) -> Bezier { - match self.handles { - BezierHandles::Linear => Bezier::from_linear_dvec2(self.end, self.start), - BezierHandles::Quadratic { handle } => Bezier::from_quadratic_dvec2(self.end, handle, self.start), - BezierHandles::Cubic { handle_start, handle_end } => Bezier::from_cubic_dvec2(self.end, handle_end, handle_start, self.start), - } - } - - /// Returns the Bezier curve representing the sub-curve between the two provided points. - /// It will start at the point corresponding to the smaller of `t1` and `t2`, and end at the point corresponding to the larger of `t1` and `t2`. - /// - pub fn trim(&self, t1: TValue, t2: TValue) -> Bezier { - let (mut t1, mut t2) = (self.t_value_to_parametric(t1), self.t_value_to_parametric(t2)); - // If t1 is equal to t2, return a bezier comprised entirely of the same point - if f64_compare(t1, t2, MAX_ABSOLUTE_DIFFERENCE) { - let point = self.evaluate(TValue::Parametric(t1)); - return match self.handles { - BezierHandles::Linear => Bezier::from_linear_dvec2(point, point), - BezierHandles::Quadratic { handle: _ } => Bezier::from_quadratic_dvec2(point, point, point), - BezierHandles::Cubic { handle_start: _, handle_end: _ } => Bezier::from_cubic_dvec2(point, point, point, point), - }; - } else if t1 > t2 { - (t1, t2) = (t2, t1) - } - let bezier_ending_at_t2 = self.split(TValue::Parametric(t2))[0]; - // Adjust the ratio `t1` to its corresponding value on the new curve that was split on `t2` - let adjusted_t1 = t1 / t2; - bezier_ending_at_t2.split(TValue::Parametric(adjusted_t1))[1] - } - - /// Returns a Bezier curve that results from applying the transformation function to each point in the Bezier. - pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Bezier { - Self { - start: transformation_function(self.start), - end: transformation_function(self.end), - handles: self.handles.apply_transformation(transformation_function), - } - } - - /// Returns a Bezier curve that results from rotating the curve around the origin by the given angle (in radians). - /// - pub fn rotate(&self, angle: f64) -> Bezier { - let rotation_matrix = DMat2::from_angle(angle); - self.apply_transformation(|point| rotation_matrix.mul_vec2(point)) - } - - /// Returns a Bezier curve that results from rotating the curve around the provided point by the given angle (in radians). - pub fn rotate_about_point(&self, angle: f64, pivot: DVec2) -> Bezier { - let rotation_matrix = DMat2::from_angle(angle); - self.apply_transformation(|point| rotation_matrix.mul_vec2(point - pivot) + pivot) - } - - /// Returns a Bezier curve that results from translating the curve by the given `DVec2`. - pub fn translate(&self, translation: DVec2) -> Bezier { - self.apply_transformation(|point| point + translation) - } - - /// Determine if it is possible to scale the given curve, using the following conditions: - /// 1. All the handles are located on a single side of the curve. - /// 2. The on-curve point for `t = 0.5` must occur roughly in the center of the polygon defined by the curve's endpoint normals. - /// - /// See [the offset section](https://pomax.github.io/bezierinfo/#offsetting) of Pomax's bezier curve primer for more details. - fn is_scalable(&self) -> bool { - if self.handles == BezierHandles::Linear { - return true; - } - // Verify all the handles are located on a single side of the curve. - if let BezierHandles::Cubic { handle_start, handle_end } = self.handles { - let angle_1 = (self.end - self.start).angle_to(handle_start - self.start); - let angle_2 = (self.end - self.start).angle_to(handle_end - self.start); - if (angle_1 > 0. && angle_2 < 0.) || (angle_1 < 0. && angle_2 > 0.) { - return false; - } - } - // Verify the angle formed by the endpoint normals is sufficiently small, ensuring the on-curve point for `t = 0.5` occurs roughly in the center of the polygon. - let normal_0 = self.normal(TValue::Parametric(0.)); - let normal_1 = self.normal(TValue::Parametric(1.)); - let endpoint_normal_angle = (normal_0.x * normal_1.x + normal_0.y * normal_1.y).min(1.).acos(); - endpoint_normal_angle < SCALABLE_CURVE_MAX_ENDPOINT_NORMAL_ANGLE - } - - /// Add the bezier endpoints if not already present, and combine and sort the dimensional extrema. - pub(crate) fn get_extrema_t_list(&self) -> Vec { - let mut extrema = self.local_extrema().into_iter().flatten().collect::>(); - extrema.append(&mut vec![0., 1.]); - extrema.sort_by(|ex1, ex2| ex1.partial_cmp(ex2).unwrap()); - extrema.dedup(); - extrema - } - - /// Returns a tuple of the scalable subcurves and the corresponding `t` values that were used to split the curve. - /// This function may introduce gaps if subsections of the curve are not reducible. - /// The function takes the following parameter: - /// - `step_size` - Dictates the granularity at which the function searches for reducible subcurves. The default value is `0.01`. - /// A small granularity may increase the chance the function does not introduce gaps, but will increase computation time. - pub(crate) fn reduced_curves_and_t_values(&self, step_size: Option) -> (Vec, Vec<[f64; 2]>) { - // A linear segment is scalable, so return itself - if let BezierHandles::Linear = self.handles { - return (vec![*self], vec![[0., 1.]]); - } - - let step_size = step_size.unwrap_or(DEFAULT_REDUCE_STEP_SIZE); - - let mut extrema = self.get_extrema_t_list(); - if let BezierHandles::Cubic { handle_start: _, handle_end: _ } = self.handles { - extrema.append(&mut self.inflections()); - extrema.sort_by(|ex1, ex2| ex1.partial_cmp(ex2).unwrap()); - } - - // Split each subcurve such that each resulting segment is scalable. - let mut result_beziers: Vec = Vec::new(); - let mut result_t_values: Vec<[f64; 2]> = vec![]; - - extrema.windows(2).for_each(|t_pair| { - let t_subcurve_start = t_pair[0]; - let t_subcurve_end = t_pair[1]; - let subcurve = self.trim(TValue::Parametric(t_subcurve_start), TValue::Parametric(t_subcurve_end)); - // Perform no processing on the subcurve if it's already scalable. - if subcurve.is_scalable() { - result_beziers.push(subcurve); - result_t_values.push([t_subcurve_start, t_subcurve_end]); - return; - } - - // Greedily iterate across the subcurve at intervals of size `step_size` to break up the curve into maximally large segments - let mut segment: Bezier; - let mut t1 = 0.; - let mut t2 = step_size; - let mut is_prev_valid = false; - while t2 <= 1. + step_size { - segment = subcurve.trim(TValue::Parametric(t1), TValue::Parametric(f64::min(t2, 1.))); - if !segment.is_scalable() { - t2 -= step_size; - - // If the previous step does not exist, the start of the subcurve is irreducible. - // Otherwise, add the valid segment from the previous step to the result. - if is_prev_valid { - segment = subcurve.trim(TValue::Parametric(t1), TValue::Parametric(t2)); - if segment.is_scalable() { - result_beziers.push(segment); - result_t_values.push([t_subcurve_start + t1 * (t_subcurve_end - t_subcurve_start), t_subcurve_start + t2 * (t_subcurve_end - t_subcurve_start)]); - } else { - t2 = t1 + step_size; - } - } else { - t2 = t1 + step_size; - } - t1 = t2; - is_prev_valid = false; - } else { - is_prev_valid = true; - } - t2 += step_size; - } - // Collect final remainder of the curve. - if t1 < 1. { - segment = subcurve.trim(TValue::Parametric(t1), TValue::Parametric(1.)); - if segment.is_scalable() { - result_beziers.push(segment); - result_t_values.push([t_subcurve_start + t1 * (t_subcurve_end - t_subcurve_start), t_subcurve_end]); - } - } - }); - (result_beziers, result_t_values) - } - - /// Split the curve into a number of scalable subcurves. This function may introduce gaps if subsections of the curve are not reducible. - /// The function takes the following parameter: - /// - `step_size` - Dictates the granularity at which the function searches for reducible subcurves. The default value is `0.01`. - /// A small granularity may increase the chance the function does not introduce gaps, but will increase computation time. - /// - pub fn reduce(&self, step_size: Option) -> Vec { - self.reduced_curves_and_t_values(step_size).0 - } - - /// Scale will translate a bezier curve a fixed distance away from its original position, and stretch/compress the transformed curve to match the translation ratio. - /// Note that not all bezier curves are possible to scale, so this function asserts that the provided curve is scalable. - /// A proof for why this is true can be found in the [Curve offsetting section](https://pomax.github.io/bezierinfo/#offsetting) of Pomax's bezier curve primer. - /// `scale` takes the parameter `distance`, which is the distance away from the curve that the new one will be scaled to. Positive values will scale the curve in the - /// same direction as the endpoint normals, while negative values will scale in the opposite direction. - fn scale(&self, distance: f64) -> Bezier { - assert!(self.is_scalable(), "The curve provided to scale is not scalable. Reduce the curve first."); - - let normal_start = self.normal(TValue::Parametric(0.)); - let normal_end = self.normal(TValue::Parametric(1.)); - - // If normal unit vectors are equal, then the lines are parallel - if normal_start.abs_diff_eq(normal_end, MAX_ABSOLUTE_DIFFERENCE) { - return self.translate(distance * normal_start); - } - - // Find the intersection point of the endpoint normals - let intersection = utils::line_intersection(self.start, normal_start, self.end, normal_end); - - // If the Bezier is a quadratic, convert it to a cubic to increase expressiveness - let intermediate = match self.handles { - BezierHandles::Quadratic { handle: _ } => self.to_cubic(), - _ => *self, - }; - - let should_flip_direction = (self.start - intersection).normalize().abs_diff_eq(normal_start, MAX_ABSOLUTE_DIFFERENCE); - intermediate.apply_transformation(|point| { - let mut direction_unit_vector = (intersection - point).normalize(); - if should_flip_direction { - direction_unit_vector *= -1.; - } - point + distance * direction_unit_vector - }) - } - - /// Version of the `scale` function which scales the curve such that the start of the scaled curve is `start_distance` from the original curve, while the end of - /// of the scaled curve is `end_distance` from the original curve. The curve transitions from `start_distance` to `end_distance` gradually, proportional to the - /// distance along the equation (`t`-value) of the curve. - pub fn graduated_scale(&self, start_distance: f64, end_distance: f64) -> Bezier { - assert!(self.is_scalable(), "The curve provided to scale is not scalable. Reduce the curve first."); - - // If the Bezier is a quadratic, convert it to a cubic to increase expressiveness - let intermediate = match self.handles { - BezierHandles::Quadratic { handle: _ } => self.to_cubic(), - _ => *self, - }; - - let normal_start = intermediate.normal(TValue::Parametric(0.)); - let normal_end = intermediate.normal(TValue::Parametric(1.)); - - // If normal unit vectors are equal, then the lines are parallel - if normal_start.abs_diff_eq(normal_end, MAX_ABSOLUTE_DIFFERENCE) { - let transformed_start = utils::scale_point_from_direction_vector(intermediate.start, intermediate.normal(TValue::Parametric(0.)), false, start_distance); - let transformed_end = utils::scale_point_from_direction_vector(intermediate.end, intermediate.normal(TValue::Parametric(1.)), false, end_distance); - - return match intermediate.handles { - BezierHandles::Linear => Bezier::from_linear_dvec2(transformed_start, transformed_end), - BezierHandles::Quadratic { handle: _ } => unreachable!(), - BezierHandles::Cubic { handle_start, handle_end } => { - let handle_start_closest_t = intermediate.project(handle_start); - let handle_start_scale_distance = (1. - handle_start_closest_t) * start_distance + handle_start_closest_t * end_distance; - let transformed_handle_start = - utils::scale_point_from_direction_vector(handle_start, intermediate.normal(TValue::Parametric(handle_start_closest_t)), false, handle_start_scale_distance); - - let handle_end_closest_t = intermediate.project(handle_start); - let handle_end_scale_distance = (1. - handle_end_closest_t) * start_distance + handle_end_closest_t * end_distance; - let transformed_handle_end = utils::scale_point_from_direction_vector(handle_end, intermediate.normal(TValue::Parametric(handle_end_closest_t)), false, handle_end_scale_distance); - Bezier::from_cubic_dvec2(transformed_start, transformed_handle_start, transformed_handle_end, transformed_end) - } - }; - } - - // Find the intersection point of the endpoint normals - let intersection = utils::line_intersection(intermediate.start, normal_start, intermediate.end, normal_end); - let should_flip_direction = (intermediate.start - intersection).normalize().abs_diff_eq(normal_start, MAX_ABSOLUTE_DIFFERENCE); - - let transformed_start = utils::scale_point_from_origin(intermediate.start, intersection, should_flip_direction, start_distance); - let transformed_end = utils::scale_point_from_origin(intermediate.end, intersection, should_flip_direction, end_distance); - - match intermediate.handles { - BezierHandles::Linear => Bezier::from_linear_dvec2(transformed_start, transformed_end), - BezierHandles::Quadratic { handle: _ } => unreachable!(), - BezierHandles::Cubic { handle_start, handle_end } => { - let handle_start_scale_distance = (start_distance * 2. + end_distance) / 3.; - let transformed_handle_start = utils::scale_point_from_origin(handle_start, intersection, should_flip_direction, handle_start_scale_distance); - - let handle_end_scale_distance = (start_distance + end_distance * 2.) / 3.; - let transformed_handle_end = utils::scale_point_from_origin(handle_end, intersection, should_flip_direction, handle_end_scale_distance); - Bezier::from_cubic_dvec2(transformed_start, transformed_handle_start, transformed_handle_end, transformed_end) - } - } - } - - /// Offset will break down the Bezier into reducible subcurves, and scale each subcurve a set distance from the original curve. - /// Note that not all bezier curves are possible to offset, so this function first reduces the curve to scalable segments and then offsets those segments. - /// A proof for why this is true can be found in the [Curve offsetting section](https://pomax.github.io/bezierinfo/#offsetting) of Pomax's bezier curve primer. - /// Offset takes the following parameter: - /// - `distance` - The offset's distance from the curve. Positive values will offset the curve in the same direction as the endpoint normals, - /// while negative values will offset in the opposite direction. - /// - pub fn offset(&self, distance: f64) -> Subpath { - if self.is_point() { - return Subpath::from_bezier(self); - } - let reduced = self.reduce(None); - let mut scaled = Subpath::new(vec![], false); - reduced.iter().enumerate().for_each(|(index, bezier)| { - let scaled_bezier = bezier.scale(distance); - if !bezier.is_point() { - if index > 0 && !compare_points(bezier.start(), reduced[index - 1].end()) { - scaled.append_bezier(&scaled_bezier, AppendType::SmoothJoin(MAX_ABSOLUTE_DIFFERENCE)); - } else { - scaled.append_bezier(&scaled_bezier, AppendType::IgnoreStart); - } - } - }); - - // If the curve is not linear, smooth the handles. All segments produced by bezier::scale will be cubic. - if self.handles != BezierHandles::Linear { - scaled.smooth_open_subpath(); - } - - scaled - } - - /// Version of the `offset` function which scales the offset such that the start of the offset is `start_distance` from the original curve, while the end of - /// of the offset is `end_distance` from the original curve. The curve transitions from `start_distance` to `end_distance` gradually, proportional to the - /// distance along the equation (`t`-value) of the curve. Similarly to the `offset` function, the returned result is an approximation. - pub fn graduated_offset(&self, start_distance: f64, end_distance: f64) -> Subpath { - let reduced = self.reduce(None); - let mut next_start_distance = start_distance; - let distance_difference = end_distance - start_distance; - let total_length = self.length(None); - if total_length < MAX_ABSOLUTE_DIFFERENCE { - return Subpath::new(vec![], false); - } - - let mut result = Subpath::new(vec![], false); - reduced.iter().enumerate().for_each(|(index, bezier)| { - if !bezier.is_point() { - let current_length = bezier.length(None); - let next_end_distance = next_start_distance + (current_length / total_length) * distance_difference; - let scaled_bezier = bezier.graduated_scale(next_start_distance, next_end_distance); - - if index > 0 && !compare_points(bezier.start(), reduced[index - 1].end()) { - result.append_bezier(&scaled_bezier, AppendType::SmoothJoin(MAX_ABSOLUTE_DIFFERENCE)); - } else { - result.append_bezier(&scaled_bezier, AppendType::IgnoreStart); - } - next_start_distance = next_end_distance; - } - }); - - // If the curve is not linear, smooth the handles. All segments produced by bezier::scale will be cubic. - if self.handles != BezierHandles::Linear { - result.smooth_open_subpath(); - } - - result - } - - /// Outline will return a vector of Beziers that creates an outline around the curve at the designated distance away from the curve. - /// It makes use of the `offset` function, thus restrictions applicable to `offset` are relevant to this function as well. - /// The 'caps', the linear segments at opposite ends of the outline, intersect the original curve at the midpoint of the cap. - /// Outline takes the following parameter: - /// - `distance` - The outline's distance from the curve. - /// - pub fn outline(&self, distance: f64, cap: Cap) -> Subpath { - let (pos_offset, neg_offset) = if self.is_point() { - ( - Subpath::new(vec![ManipulatorGroup::new_anchor(self.start() + DVec2::NEG_Y * distance)], false), - Subpath::new(vec![ManipulatorGroup::new_anchor(self.start() + DVec2::Y * distance)], false), - ) - } else { - (self.offset(distance), self.reverse().offset(distance)) - }; - - if pos_offset.is_empty() || neg_offset.is_empty() { - return Subpath::new(vec![], false); - } - - pos_offset.combine_outline(&neg_offset, cap) - } - - /// Version of the `outline` function which draws the outline at the specified distances away from the curve. - /// The outline begins `start_distance` away, and gradually move to being `end_distance` away. - /// - pub fn graduated_outline(&self, start_distance: f64, end_distance: f64, cap: Cap) -> Subpath { - self.skewed_outline(start_distance, end_distance, end_distance, start_distance, cap) - } - - /// Version of the `graduated_outline` function that allows for the 4 corners of the outline to be different distances away from the curve. - /// - pub fn skewed_outline(&self, distance1: f64, distance2: f64, distance3: f64, distance4: f64, cap: Cap) -> Subpath { - let (pos_offset, neg_offset) = if self.is_point() { - ( - Subpath::new(vec![ManipulatorGroup::new_anchor(self.start() + DVec2::NEG_Y * distance1)], false), - Subpath::new(vec![ManipulatorGroup::new_anchor(self.start() + DVec2::Y * distance1)], false), - ) - } else { - (self.graduated_offset(distance1, distance2), self.reverse().graduated_offset(distance3, distance4)) - }; - - if pos_offset.is_empty() || neg_offset.is_empty() { - return Subpath::new(vec![], false); - } - - pos_offset.combine_outline(&neg_offset, cap) - } - - /// Approximate a bezier curve with circular arcs. - /// The algorithm can be customized using the [ArcsOptions] structure. - /// - pub fn arcs(&self, arcs_options: ArcsOptions) -> Vec { - let ArcsOptions { - strategy: maximize_arcs, - error, - max_iterations, - } = arcs_options; - - match maximize_arcs { - ArcStrategy::Automatic => { - let (auto_arcs, final_low_t) = self.approximate_curve_with_arcs(0., 1., error, max_iterations, true); - let arc_approximations = self.split(TValue::Parametric(final_low_t))[1].arcs(ArcsOptions { - strategy: ArcStrategy::FavorCorrectness, - error, - max_iterations, - }); - if final_low_t != 1. { [auto_arcs, arc_approximations].concat() } else { auto_arcs } - } - ArcStrategy::FavorLargerArcs => self.approximate_curve_with_arcs(0., 1., error, max_iterations, false).0, - ArcStrategy::FavorCorrectness => self - .get_extrema_t_list() - .windows(2) - .flat_map(|t_pair| self.approximate_curve_with_arcs(t_pair[0], t_pair[1], error, max_iterations, false).0) - .collect::>(), - } - } - - /// Implements an algorithm that approximates a bezier curve with circular arcs. - /// This algorithm uses a method akin to binary search to find an arc that approximates a maximal segment of the curve. - /// Once a maximal arc has been found for a sub-segment of the curve, the algorithm continues by starting again at the end of the previous approximation. - /// More details can be found in the [Approximating a Bezier curve with circular arcs](https://pomax.github.io/bezierinfo/#arcapproximation) section of Pomax's bezier curve primer. - /// A caveat with this algorithm is that it is possible to find erroneous approximations in cases such as in a very narrow `U`. - /// - `stop_when_invalid`: Used to determine whether the algorithm should terminate early if erroneous approximations are encountered. - /// - /// Returns a tuple where the first element is the list of circular arcs and the second is the `t` value where the next segment should start from. - /// The second value will be `1.` except for when `stop_when_invalid` is true and an invalid approximation is encountered. - fn approximate_curve_with_arcs(&self, local_low: f64, local_high: f64, error: f64, max_iterations: usize, stop_when_invalid: bool) -> (Vec, f64) { - let mut low = local_low; - let mut middle = (local_low + local_high) / 2.; - let mut high = local_high; - let mut previous_high = local_high; - - let mut iterations = 0; - let mut previous_arc = CircleArc::default(); - let mut was_previous_good = false; - let mut arcs = Vec::new(); - - // Outer loop to iterate over the curve - while low < local_high { - // Inner loop to find the next maximal segment of the curve that can be approximated with a circular arc - while iterations <= max_iterations { - iterations += 1; - let p1 = self.evaluate(TValue::Parametric(low)); - let p2 = self.evaluate(TValue::Parametric(middle)); - let p3 = self.evaluate(TValue::Parametric(high)); - - let wrapped_center = utils::compute_circle_center_from_points(p1, p2, p3); - // If the segment is linear, move on to next segment - if wrapped_center.is_none() { - previous_high = high; - low = high; - high = 1.; - middle = (low + high) / 2.; - was_previous_good = false; - break; - } - - let center = wrapped_center.unwrap(); - let radius = center.distance(p1); - - let angle_p1 = DVec2::new(1., 0.).angle_to(p1 - center); - let angle_p2 = DVec2::new(1., 0.).angle_to(p2 - center); - let angle_p3 = DVec2::new(1., 0.).angle_to(p3 - center); - - let mut start_angle = angle_p1; - let mut end_angle = angle_p3; - - // Adjust start and end angles of the arc to ensure that it travels in the counter-clockwise direction - if angle_p1 < angle_p3 { - if angle_p2 < angle_p1 || angle_p3 < angle_p2 { - std::mem::swap(&mut start_angle, &mut end_angle); - } - } else if angle_p2 < angle_p1 && angle_p3 < angle_p2 { - std::mem::swap(&mut start_angle, &mut end_angle); - } - - let new_arc = CircleArc { - center, - radius, - start_angle, - end_angle, - }; - - // Use points in between low, middle, and high to evaluate how well the arc approximates the curve - let e1 = self.evaluate(TValue::Parametric((low + middle) / 2.)); - let e2 = self.evaluate(TValue::Parametric((middle + high) / 2.)); - - // Iterate until we find the largest good approximation such that the next iteration is not a good approximation with an arc - if utils::f64_compare(radius, e1.distance(center), error) && utils::f64_compare(radius, e2.distance(center), error) { - // Check if the good approximation is actually valid: the sector angle cannot be larger than 180 degrees (PI radians) - let mut sector_angle = end_angle - start_angle; - if sector_angle < 0. { - sector_angle += 2. * PI; - } - if stop_when_invalid && sector_angle > PI { - return (arcs, low); - } - if high == local_high { - // Found the final arc approximation - arcs.push(new_arc); - low = high; - break; - } - // If the approximation is good, expand the segment by half to try finding a larger good approximation - previous_high = high; - high = (high + (high - low) / 2.).min(local_high); - middle = (low + high) / 2.; - previous_arc = new_arc; - was_previous_good = true; - } else if was_previous_good { - // If the previous approximation was good and the current one is bad, then we use the previous good approximation - arcs.push(previous_arc); - - // Continue searching for approximations for the rest of the curve - low = previous_high; - high = local_high; - middle = low + (high - low) / 2.; - was_previous_good = false; - break; - } else { - // If no good approximation has been seen yet, try again with half the segment - previous_high = high; - high = middle; - middle = low + (high - low) / 2.; - previous_arc = new_arc; - } - } - } - - (arcs, low) - } - - /// Reverses the direction of the bรฉzier. - #[must_use] - pub fn reversed(self) -> Self { - Self { - start: self.end, - end: self.start, - handles: self.handles.reversed(), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::EmptyId; - use crate::compare::{compare_arcs, compare_points}; - use crate::utils::{Cap, TValue}; - - #[test] - fn test_split() { - let line = Bezier::from_linear_coordinates(25., 25., 75., 75.); - let [part1, part2] = line.split(TValue::Parametric(0.5)); - - assert_eq!(part1.start(), line.start()); - assert_eq!(part1.end(), line.evaluate(TValue::Parametric(0.5))); - assert_eq!(part1.evaluate(TValue::Parametric(0.5)), line.evaluate(TValue::Parametric(0.25))); - - assert_eq!(part2.start(), line.evaluate(TValue::Parametric(0.5))); - assert_eq!(part2.end(), line.end()); - assert_eq!(part2.evaluate(TValue::Parametric(0.5)), line.evaluate(TValue::Parametric(0.75))); - - let quad_bezier = Bezier::from_quadratic_coordinates(10., 10., 50., 50., 90., 10.); - let [part3, part4] = quad_bezier.split(TValue::Parametric(0.5)); - - assert_eq!(part3.start(), quad_bezier.start()); - assert_eq!(part3.end(), quad_bezier.evaluate(TValue::Parametric(0.5))); - assert_eq!(part3.evaluate(TValue::Parametric(0.5)), quad_bezier.evaluate(TValue::Parametric(0.25))); - - assert_eq!(part4.start(), quad_bezier.evaluate(TValue::Parametric(0.5))); - assert_eq!(part4.end(), quad_bezier.end()); - assert_eq!(part4.evaluate(TValue::Parametric(0.5)), quad_bezier.evaluate(TValue::Parametric(0.75))); - - let cubic_bezier = Bezier::from_cubic_coordinates(10., 10., 50., 50., 90., 10., 40., 50.); - let [part5, part6] = cubic_bezier.split(TValue::Parametric(0.5)); - - assert_eq!(part5.start(), cubic_bezier.start()); - assert_eq!(part5.end(), cubic_bezier.evaluate(TValue::Parametric(0.5))); - assert_eq!(part5.evaluate(TValue::Parametric(0.5)), cubic_bezier.evaluate(TValue::Parametric(0.25))); - - assert_eq!(part6.start(), cubic_bezier.evaluate(TValue::Parametric(0.5))); - assert_eq!(part6.end(), cubic_bezier.end()); - assert_eq!(part6.evaluate(TValue::Parametric(0.5)), cubic_bezier.evaluate(TValue::Parametric(0.75))); - } - - #[test] - fn test_split_at_anchors() { - let start = DVec2::new(30., 50.); - let end = DVec2::new(160., 170.); - - let bezier_quadratic = Bezier::from_quadratic_dvec2(start, DVec2::new(140., 30.), end); - - // Test splitting a quadratic bezier at the startpoint - let [point_bezier1, remainder1] = bezier_quadratic.split(TValue::Parametric(0.)); - assert_eq!(point_bezier1, Bezier::from_quadratic_dvec2(start, start, start)); - assert!(remainder1.abs_diff_eq(&bezier_quadratic, MAX_ABSOLUTE_DIFFERENCE)); - - // Test splitting a quadratic bezier at the endpoint - let [remainder2, point_bezier2] = bezier_quadratic.split(TValue::Parametric(1.)); - assert_eq!(point_bezier2, Bezier::from_quadratic_dvec2(end, end, end)); - assert!(remainder2.abs_diff_eq(&bezier_quadratic, MAX_ABSOLUTE_DIFFERENCE)); - - let bezier_cubic = Bezier::from_cubic_dvec2(start, DVec2::new(60., 140.), DVec2::new(150., 30.), end); - - // Test splitting a cubic bezier at the startpoint - let [point_bezier3, remainder3] = bezier_cubic.split(TValue::Parametric(0.)); - assert_eq!(point_bezier3, Bezier::from_cubic_dvec2(start, start, start, start)); - assert!(remainder3.abs_diff_eq(&bezier_cubic, MAX_ABSOLUTE_DIFFERENCE)); - - // Test splitting a cubic bezier at the endpoint - let [remainder4, point_bezier4] = bezier_cubic.split(TValue::Parametric(1.)); - assert_eq!(point_bezier4, Bezier::from_cubic_dvec2(end, end, end, end)); - assert!(remainder4.abs_diff_eq(&bezier_cubic, MAX_ABSOLUTE_DIFFERENCE)); - } - - #[test] - fn test_trim() { - let line = Bezier::from_linear_coordinates(80., 80., 40., 40.); - let trimmed1 = line.trim(TValue::Parametric(0.25), TValue::Parametric(0.75)); - - assert_eq!(trimmed1.start(), line.evaluate(TValue::Parametric(0.25))); - assert_eq!(trimmed1.end(), line.evaluate(TValue::Parametric(0.75))); - assert_eq!(trimmed1.evaluate(TValue::Parametric(0.5)), line.evaluate(TValue::Parametric(0.5))); - - let quadratic_bezier = Bezier::from_quadratic_coordinates(80., 80., 40., 40., 70., 70.); - let trimmed2 = quadratic_bezier.trim(TValue::Parametric(0.25), TValue::Parametric(0.75)); - - assert_eq!(trimmed2.start(), quadratic_bezier.evaluate(TValue::Parametric(0.25))); - assert_eq!(trimmed2.end(), quadratic_bezier.evaluate(TValue::Parametric(0.75))); - assert_eq!(trimmed2.evaluate(TValue::Parametric(0.5)), quadratic_bezier.evaluate(TValue::Parametric(0.5))); - - let cubic_bezier = Bezier::from_cubic_coordinates(80., 80., 40., 40., 70., 70., 150., 150.); - let trimmed3 = cubic_bezier.trim(TValue::Parametric(0.25), TValue::Parametric(0.75)); - - assert!(trimmed3.start().abs_diff_eq(cubic_bezier.evaluate(TValue::Parametric(0.25)), MAX_ABSOLUTE_DIFFERENCE)); - assert_eq!(trimmed3.end(), cubic_bezier.evaluate(TValue::Parametric(0.75))); - assert_eq!(trimmed3.evaluate(TValue::Parametric(0.5)), cubic_bezier.evaluate(TValue::Parametric(0.5))); - } - - #[test] - fn test_trim_t2_greater_than_t1() { - // Test trimming quadratic curve when t2 > t1 - let bezier_quadratic = Bezier::from_quadratic_coordinates(30., 50., 140., 30., 160., 170.); - let trim1 = bezier_quadratic.trim(TValue::Parametric(0.25), TValue::Parametric(0.75)); - let trim2 = bezier_quadratic.trim(TValue::Parametric(0.75), TValue::Parametric(0.25)); - assert!(trim1.abs_diff_eq(&trim2, MAX_ABSOLUTE_DIFFERENCE)); - - // Test trimming cubic curve when t2 > t1 - let bezier_cubic = Bezier::from_cubic_coordinates(30., 30., 60., 140., 150., 30., 160., 160.); - let trim3 = bezier_cubic.trim(TValue::Parametric(0.25), TValue::Parametric(0.75)); - let trim4 = bezier_cubic.trim(TValue::Parametric(0.75), TValue::Parametric(0.25)); - assert!(trim3.abs_diff_eq(&trim4, MAX_ABSOLUTE_DIFFERENCE)); - } - - #[test] - fn test_rotate() { - let bezier_linear = Bezier::from_linear_coordinates(30., 60., 140., 120.); - let rotated_bezier_linear = bezier_linear.rotate(-PI / 2.); - let expected_bezier_linear = Bezier::from_linear_coordinates(60., -30., 120., -140.); - assert!(rotated_bezier_linear.abs_diff_eq(&expected_bezier_linear, MAX_ABSOLUTE_DIFFERENCE)); - - let bezier_quadratic = Bezier::from_quadratic_coordinates(30., 50., 140., 30., 160., 170.); - let rotated_bezier_quadratic = bezier_quadratic.rotate(PI); - let expected_bezier_quadratic = Bezier::from_quadratic_coordinates(-30., -50., -140., -30., -160., -170.); - assert!(rotated_bezier_quadratic.abs_diff_eq(&expected_bezier_quadratic, MAX_ABSOLUTE_DIFFERENCE)); - - let bezier = Bezier::from_cubic_coordinates(30., 30., 60., 140., 150., 30., 160., 160.); - let rotated_bezier = bezier.rotate(PI / 2.); - let expected_bezier = Bezier::from_cubic_coordinates(-30., 30., -140., 60., -30., 150., -160., 160.); - assert!(rotated_bezier.abs_diff_eq(&expected_bezier, MAX_ABSOLUTE_DIFFERENCE)); - } - - #[test] - fn test_translate() { - let bezier_linear = Bezier::from_linear_coordinates(30., 60., 140., 120.); - let rotated_bezier_linear = bezier_linear.translate(DVec2::new(10., 10.)); - let expected_bezier_linear = Bezier::from_linear_coordinates(40., 70., 150., 130.); - assert!(rotated_bezier_linear.abs_diff_eq(&expected_bezier_linear, MAX_ABSOLUTE_DIFFERENCE)); - - let bezier_quadratic = Bezier::from_quadratic_coordinates(30., 50., 140., 30., 160., 170.); - let rotated_bezier_quadratic = bezier_quadratic.translate(DVec2::new(-10., 10.)); - let expected_bezier_quadratic = Bezier::from_quadratic_coordinates(20., 60., 130., 40., 150., 180.); - assert!(rotated_bezier_quadratic.abs_diff_eq(&expected_bezier_quadratic, MAX_ABSOLUTE_DIFFERENCE)); - - let bezier = Bezier::from_cubic_coordinates(30., 30., 60., 140., 150., 30., 160., 160.); - let translated_bezier = bezier.translate(DVec2::new(10., -10.)); - let expected_bezier = Bezier::from_cubic_coordinates(40., 20., 70., 130., 160., 20., 170., 150.); - assert!(translated_bezier.abs_diff_eq(&expected_bezier, MAX_ABSOLUTE_DIFFERENCE)); - } - - #[test] - fn test_reduce() { - let p1 = DVec2::new(0., 0.); - let p2 = DVec2::new(50., 50.); - let p3 = DVec2::new(0., 0.); - let bezier = Bezier::from_quadratic_dvec2(p1, p2, p3); - - let reduced_curves = bezier.reduce(None); - assert!(reduced_curves.iter().all(|bezier| bezier.is_scalable())); - - // Check that the reduce helper is correct - let (helper_curves, helper_t_values) = bezier.reduced_curves_and_t_values(None); - assert!( - reduced_curves - .iter() - .zip(helper_curves.iter()) - .all(|(bezier1, bezier2)| bezier1.abs_diff_eq(bezier2, MAX_ABSOLUTE_DIFFERENCE)) - ); - assert!( - reduced_curves - .iter() - .zip(helper_t_values.iter()) - .all(|(curve, t_pair)| curve.abs_diff_eq(&bezier.trim(TValue::Parametric(t_pair[0]), TValue::Parametric(t_pair[1])), MAX_ABSOLUTE_DIFFERENCE)) - ) - } - - fn assert_valid_offset(bezier: &Bezier, offset: &Subpath, expected_distance: f64) { - // Verify that the offset is smooth - if offset.len() > 1 { - offset.iter().take(offset.len() - 2).zip(offset.iter().skip(1)).for_each(|beziers_pair| { - assert!(compare_points(beziers_pair.0.end, beziers_pair.1.start)); - assert!(compare_points(beziers_pair.0.normal(TValue::Parametric(1.)), beziers_pair.1.normal(TValue::Parametric(0.)))); - }); - } - - // Verify that the offset spans the length of the curve - let start_distance = bezier.evaluate(TValue::Parametric(0.)).distance(offset.iter().next().unwrap().evaluate(TValue::Parametric(0.))); - assert!(f64_compare(start_distance, expected_distance, MAX_ABSOLUTE_DIFFERENCE)); - let end_distance = bezier.evaluate(TValue::Parametric(1.)).distance(offset.iter().last().unwrap().evaluate(TValue::Parametric(1.))); - assert!(f64_compare(end_distance, expected_distance, MAX_ABSOLUTE_DIFFERENCE)); - - let err_threshold = expected_distance / 10.; - // Sample the curve and verify that the offset lies at the correct distance from the curve. - // Collect the t-value associated with the point on the bezier closest to the sample. - let t_values: Vec = offset - .iter() - .flat_map(|offset_segment| { - [0.1, 0.25, 0.5, 0.75, 0.9] - .iter() - .map(|t| { - let offset_point = offset_segment.evaluate(TValue::Parametric(*t)); - let closest_point_t = bezier.project(offset_point); - let closest_point = bezier.evaluate(TValue::Parametric(closest_point_t)); - let actual_distance = offset_point.distance(closest_point); - - assert!(f64_compare(actual_distance, expected_distance, err_threshold)); - closest_point_t - }) - .collect::>() - }) - .collect(); - - // Verify that the curve segments are in the correct order by asserting that t_values is sorted - for i in 1..t_values.len() { - assert!(t_values[i - 1] < t_values[i]); - } - } - - #[test] - fn test_offset_linear() { - let start = DVec2::new(30., 60.); - let end = DVec2::new(140., 120.); - let bezier = Bezier::from_linear_dvec2(start, end); - - for distance in [-20., -10., 10., 20.] { - let offset = bezier.offset::(distance); - assert_valid_offset(&bezier, &offset, distance.abs()); - } - } - - #[test] - fn test_offset_quadratic() { - let start = DVec2::new(30., 50.); - let handle = DVec2::new(140., 30.); - let end = DVec2::new(160., 170.); - let bezier = Bezier::from_quadratic_dvec2(start, handle, end); - - for distance in [-20., -10., 10., 20.] { - let offset = bezier.offset::(distance); - assert_valid_offset(&bezier, &offset, distance.abs()); - } - } - - #[test] - fn test_offset_cubic() { - let start = DVec2::new(30., 30.); - let handle1 = DVec2::new(60., 140.); - let handle2 = DVec2::new(150., 30.); - let end = DVec2::new(160., 160.); - let bezier = Bezier::from_cubic_dvec2(start, handle1, handle2, end); - - for distance in [-20., -10., 10., 20.] { - let offset = bezier.offset::(distance); - assert_valid_offset(&bezier, &offset, distance.abs()); - } - } - - #[test] - fn test_offset_curve_that_has_a_single_point_after_reduce() { - let p1 = DVec2::new(30., 30.); - let p2 = DVec2::new(150., 29.); - let p3 = DVec2::new(150., 30.); - let p4 = DVec2::new(160., 160.); - - let bezier = Bezier::from_cubic_dvec2(p1, p2, p3, p4); - - let reduce = bezier.reduce(None); - let offset = bezier.offset::(15.); - assert!(reduce.last().is_some()); - assert!(reduce.last().unwrap().is_point()); - // Expect the single point bezier to be dropped in the offset - assert_eq!(reduce.len(), offset.len_segments() + 1); - } - - #[test] - fn test_outline() { - let p1 = DVec2::new(30., 50.); - let p2 = DVec2::new(140., 30.); - let line = Bezier::from_linear_dvec2(p1, p2); - let outline = line.outline::(10., Cap::Butt); - - assert_eq!(outline.len(), 4); - - // Assert the first length-wise piece of the outline is 10 units from the line - assert!(f64_compare( - outline.iter().next().unwrap().evaluate(TValue::Parametric(0.25)).distance(line.evaluate(TValue::Parametric(0.25))), - 10., - MAX_ABSOLUTE_DIFFERENCE - )); // f64 - - // Assert the first cap touches the line end point at the halfway point - assert!(outline.iter().nth(1).unwrap().evaluate(TValue::Parametric(0.5)).abs_diff_eq(line.end(), MAX_ABSOLUTE_DIFFERENCE)); - - // Assert the second length-wise piece of the outline is 10 units from the line - assert!(f64_compare( - outline.iter().nth(2).unwrap().evaluate(TValue::Parametric(0.25)).distance(line.evaluate(TValue::Parametric(0.75))), - 10., - MAX_ABSOLUTE_DIFFERENCE - )); // f64 - - // Assert the second cap touches the line start point at the halfway point - assert!(outline.iter().nth(3).unwrap().evaluate(TValue::Parametric(0.5)).abs_diff_eq(line.start(), MAX_ABSOLUTE_DIFFERENCE)); - } - - #[test] - fn test_outline_single_point_circle() { - let ellipse: Subpath = Subpath::new_ellipse(DVec2::new(0., 0.), DVec2::new(50., 50.)).reverse(); - let p = DVec2::new(25., 25.); - - let line = Bezier::from_linear_dvec2(p, p); - let outline = line.outline::(25., Cap::Round); - assert_eq!(outline, ellipse); - - let cubic = Bezier::from_cubic_dvec2(p, p, p, p); - let outline_cubic = cubic.outline::(25., Cap::Round); - assert_eq!(outline_cubic, ellipse); - } - - #[test] - fn test_outline_single_point_square() { - let square: Subpath = Subpath::from_anchors( - [ - DVec2::new(25., 0.), - DVec2::new(0., 0.), - DVec2::new(0., 50.), - DVec2::new(25., 50.), - DVec2::new(50., 50.), - DVec2::new(50., 0.), - ], - true, - ); - let p = DVec2::new(25., 25.); - - let line = Bezier::from_linear_dvec2(p, p); - let outline = line.outline::(25., Cap::Square); - assert_eq!(outline, square); - - let cubic = Bezier::from_cubic_dvec2(p, p, p, p); - let outline_cubic = cubic.outline::(25., Cap::Square); - assert_eq!(outline_cubic, square); - } - - #[test] - fn test_graduated_scale() { - let bezier = Bezier::from_linear_coordinates(30., 60., 140., 120.); - bezier.graduated_scale(10., 20.); - } - - #[test] - fn test_graduated_scale_quadratic() { - let bezier = Bezier::from_quadratic_coordinates(30., 50., 82., 98., 160., 170.); - let scaled_bezier = bezier.graduated_scale(30., 30.); - - dbg!(scaled_bezier); - - // Assert the scaled bezier is 30 units from the line - assert!(f64_compare( - scaled_bezier.evaluate(TValue::Parametric(0.)).distance(bezier.evaluate(TValue::Parametric(0.))), - 30., - MAX_ABSOLUTE_DIFFERENCE - )); - assert!(f64_compare( - scaled_bezier.evaluate(TValue::Parametric(1.)).distance(bezier.evaluate(TValue::Parametric(1.))), - 30., - MAX_ABSOLUTE_DIFFERENCE - )); - assert!(f64_compare( - scaled_bezier.evaluate(TValue::Parametric(0.5)).distance(bezier.evaluate(TValue::Parametric(0.5))), - 30., - MAX_ABSOLUTE_DIFFERENCE - )); - } - - #[test] - fn test_arcs_linear() { - let bezier = Bezier::from_linear_coordinates(30., 60., 140., 120.); - let linear_arcs = bezier.arcs(ArcsOptions::default()); - assert!(linear_arcs.is_empty()); - } - - #[test] - fn test_arcs_quadratic() { - let bezier1 = Bezier::from_quadratic_coordinates(30., 30., 50., 50., 100., 100.); - assert!(bezier1.arcs(ArcsOptions::default()).is_empty()); - - let bezier2 = Bezier::from_quadratic_coordinates(50., 50., 85., 65., 100., 100.); - let actual_arcs = bezier2.arcs(ArcsOptions::default()); - let expected_arc = CircleArc { - center: DVec2::new(15., 135.), - radius: 91.92388, - start_angle: -1.18019, - end_angle: -0.39061, - }; - assert_eq!(actual_arcs.len(), 1); - assert!(compare_arcs(actual_arcs[0], expected_arc)); - } - - #[test] - fn test_arcs_cubic() { - let bezier = Bezier::from_cubic_coordinates(30., 30., 30., 80., 60., 80., 60., 140.); - let actual_arcs = bezier.arcs(ArcsOptions::default()); - let expected_arcs = [ - CircleArc { - center: DVec2::new(122.394877, 30.7777189), - radius: 92.39815, - start_angle: 2.5637146, - end_angle: -3.1331755, - }, - CircleArc { - center: DVec2::new(-47.54881, 136.169378), - radius: 107.61701, - start_angle: -0.53556, - end_angle: 0.0356025, - }, - ]; - - assert_eq!(actual_arcs.len(), 2); - assert!(compare_arcs(actual_arcs[0], expected_arcs[0])); - assert!(compare_arcs(actual_arcs[1], expected_arcs[1])); - - // Bezier that contains the erroneous case when maximizing arcs - let bezier2 = Bezier::from_cubic_coordinates(48., 176., 170., 10., 30., 90., 180., 160.); - let auto_arcs = bezier2.arcs(ArcsOptions::default()); - - let extrema_arcs = bezier2.arcs(ArcsOptions { - strategy: ArcStrategy::FavorCorrectness, - ..ArcsOptions::default() - }); - - let maximal_arcs = bezier2.arcs(ArcsOptions { - strategy: ArcStrategy::FavorLargerArcs, - ..ArcsOptions::default() - }); - - // Resulting automatic arcs match the maximal results until the bad arc (in this case, only index 0 should match) - assert_eq!(auto_arcs[0], maximal_arcs[0]); - // Check that the first result from MaximizeArcs::Automatic should not equal the first results from MaximizeArcs::Off - assert_ne!(auto_arcs[0], extrema_arcs[0]); - // The remaining results (index 2 onwards) should match the results where MaximizeArcs::Off from the next extrema point onwards (after index 2). - assert!(auto_arcs.iter().skip(2).zip(extrema_arcs.iter().skip(2)).all(|(arc1, arc2)| compare_arcs(*arc1, *arc2))); - } -} diff --git a/libraries/bezier-rs/src/compare.rs b/libraries/bezier-rs/src/compare.rs deleted file mode 100644 index 55b6b55e91..0000000000 --- a/libraries/bezier-rs/src/compare.rs +++ /dev/null @@ -1,40 +0,0 @@ -/// Comparison functions used for tests in the bezier module -#[cfg(test)] -use super::{CircleArc, Subpath}; -use crate::consts::MAX_ABSOLUTE_DIFFERENCE; -#[cfg(test)] -use crate::utils::f64_compare; -use glam::DVec2; - -// Compare two f64s with some maximum absolute difference to account for floating point errors -#[cfg(test)] -pub fn compare_f64s(f1: f64, f2: f64) -> bool { - f64_compare(f1, f2, MAX_ABSOLUTE_DIFFERENCE) -} - -/// Compare points by allowing some maximum absolute difference to account for floating point errors -pub fn compare_points(p1: DVec2, p2: DVec2) -> bool { - p1.abs_diff_eq(p2, MAX_ABSOLUTE_DIFFERENCE) -} - -/// Compare vectors of points by allowing some maximum absolute difference to account for floating point errors -#[cfg(test)] -pub fn compare_vec_of_points(a: Vec, b: Vec, max_absolute_difference: f64) -> bool { - a.len() == b.len() && a.into_iter().zip(b).all(|(p1, p2)| p1.abs_diff_eq(p2, max_absolute_difference)) -} - -/// Compare circle arcs by allowing some maximum absolute difference between values to account for floating point errors -#[cfg(test)] -pub fn compare_arcs(arc1: CircleArc, arc2: CircleArc) -> bool { - compare_points(arc1.center, arc2.center) - && f64_compare(arc1.radius, arc1.radius, MAX_ABSOLUTE_DIFFERENCE) - && f64_compare(arc1.start_angle, arc2.start_angle, MAX_ABSOLUTE_DIFFERENCE) - && f64_compare(arc1.end_angle, arc2.end_angle, MAX_ABSOLUTE_DIFFERENCE) -} - -/// Compare Subpath by verifying that their bezier segments match. -/// In this way, matching quadratic segments where the handles are on opposite manipulator groups will be considered equal. -#[cfg(test)] -pub fn compare_subpaths(subpath1: &Subpath, subpath2: &Subpath) -> bool { - subpath1.len() == subpath2.len() && subpath1.closed() == subpath2.closed() && subpath1.iter().eq(subpath2.iter()) -} diff --git a/libraries/bezier-rs/src/consts.rs b/libraries/bezier-rs/src/consts.rs deleted file mode 100644 index bef83def97..0000000000 --- a/libraries/bezier-rs/src/consts.rs +++ /dev/null @@ -1,28 +0,0 @@ -// Implementation constants - -/// Constant used to determine if `f64`s are equivalent. -pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; -/// A stricter constant used to determine if `f64`s are equivalent. -pub const STRICT_MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-6; -/// Maximum allowed angle that the normal of the `start` or `end` point can make with the normal of the corresponding handle for a curve to be considered scalable/simple. -pub const SCALABLE_CURVE_MAX_ENDPOINT_NORMAL_ANGLE: f64 = std::f64::consts::PI / 3.; -/// Minimum allowable separation between adjacent `t` values when calculating curve intersections -pub const MIN_SEPARATION_VALUE: f64 = 5. * 1e-3; -/// Default error bound for `t_value_to_parametric` function when TValue argument is Euclidean -pub const DEFAULT_EUCLIDEAN_ERROR_BOUND: f64 = 0.001; - -// Method argument defaults - -/// Default `t` value used for the `curve_through_points` functions. -pub const DEFAULT_T_VALUE: f64 = 0.5; -/// Default LUT step size in `compute_lookup_table` function. -pub const DEFAULT_LUT_STEP_SIZE: usize = 10; -/// Default step size for `reduce` function. -pub const DEFAULT_REDUCE_STEP_SIZE: f64 = 0.01; - -// SVG constants -pub const SVG_ARG_CUBIC: &str = "C"; -pub const SVG_ARG_LINEAR: &str = "L"; -pub const SVG_ARG_MOVE: &str = "M"; -pub const SVG_ARG_QUADRATIC: &str = "Q"; -pub const SVG_ARG_CLOSED: &str = "Z"; diff --git a/libraries/bezier-rs/src/lib.rs b/libraries/bezier-rs/src/lib.rs deleted file mode 100644 index 06faf15d84..0000000000 --- a/libraries/bezier-rs/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![doc = include_str!("../README.md")] -#![allow(dead_code, unused_imports, unused_import_braces)] - -pub(crate) mod compare; - -mod bezier; -mod consts; -mod poisson_disk; -mod polynomial; -mod subpath; -mod symmetrical_basis; -mod utils; - -pub use bezier::*; -pub use subpath::*; -pub use symmetrical_basis::*; -pub use utils::{Cap, Join, SubpathTValue, TValue, TValueType}; diff --git a/libraries/bezier-rs/src/poisson_disk.rs b/libraries/bezier-rs/src/poisson_disk.rs deleted file mode 100644 index 42cb904a8a..0000000000 --- a/libraries/bezier-rs/src/poisson_disk.rs +++ /dev/null @@ -1,369 +0,0 @@ -use core::f64; -use glam::DVec2; - -const DEEPEST_SUBDIVISION_LEVEL_BEFORE_DISCARDING: usize = 8; - -/// Fast (O(n) with respect to time and memory) algorithm for generating a maximal set of points using Poisson-disk sampling. -/// Based on the paper: -/// "Poisson Disk Point Sets by Hierarchical Dart Throwing" -/// -pub fn poisson_disk_sample( - width: f64, - height: f64, - diameter: f64, - point_in_shape_checker: impl Fn(DVec2) -> bool, - square_edges_intersect_shape_checker: impl Fn(DVec2, f64) -> bool, - rng: impl FnMut() -> f64, -) -> Vec { - let mut rng = rng; - let diameter_squared = diameter.powi(2); - - // Initialize a place to store the generated points within a spatial acceleration structure - let mut points_grid = AccelerationGrid::new(width, height, diameter); - - // Pick a grid size for the base-level domain that's as large as possible, while also: - // - Dividing into an integer number of cells across the dartboard domain, to avoid wastefully throwing darts beyond the width and height of the dartboard domain - // - Being fully covered by the radius around a dart thrown anywhere in its area, where the worst-case is a corner which has a distance of sqrt(2) to the opposite corner - let greater_dimension = width.max(height); - let base_level_grid_size = greater_dimension / (greater_dimension * std::f64::consts::SQRT_2 / (diameter / 2.)).ceil(); - - // Initialize the problem by including all base-level squares in the active list since they're all part of the yet-to-be-targetted dartboard domain - let base_level = ActiveListLevel::new_filled(base_level_grid_size, width, height, &point_in_shape_checker, &square_edges_intersect_shape_checker); - // In the future, if necessary, this could be turned into a fixed-length array with worst-case length `f64::MANTISSA_DIGITS` - let mut active_list_levels = vec![base_level]; - - // Loop until all active squares have been processed, meaning all of the dartboard domain has been checked - while active_list_levels.iter().any(|active_list| active_list.not_empty()) { - // Randomly pick a square in the dartboard domain, with probability proportional to its area - let (active_square_level, active_square_index_in_level) = target_active_square(&active_list_levels, &mut rng); - - // The level contains the list of all active squares at this target square's subdivision depth - let level = &mut active_list_levels[active_square_level]; - - // Take the targetted active square out of the list and get its size - let active_square = level.take_square(active_square_index_in_level); - let active_square_size = level.square_size(); - - // Skip this target square if it's within range of any current points, since more nearby points could have been added after this square was included in the active list - if !square_not_covered_by_poisson_points(active_square.top_left_corner(), active_square_size / 2., diameter_squared, &points_grid) { - continue; - } - - // Throw a dart by picking a random point within this target square - let point = { - let active_top_left_corner = active_square.top_left_corner(); - let x = active_top_left_corner.x + rng() * active_square_size; - let y = active_top_left_corner.y + rng() * active_square_size; - (x, y).into() - }; - - // If the dart hit a valid spot, save that point (we're now permanently done with this target square's region) - if point_not_covered_by_poisson_points(point, diameter_squared, &points_grid) { - // Silently reject the point if it lies outside the shape - if active_square.fully_in_shape() || point_in_shape_checker(point) { - points_grid.insert(point); - } - } - // Otherwise, subdivide this target square and add valid sub-squares back to the active list for later targetting - else { - // Discard any targetable domain smaller than this limited number of subdivision levels since it's too small to matter - let next_level_deeper_level = active_square_level + 1; - if next_level_deeper_level > DEEPEST_SUBDIVISION_LEVEL_BEFORE_DISCARDING { - continue; - } - - // If necessary for the following step, add another layer of depth to store squares at the next subdivision level - if active_list_levels.len() <= next_level_deeper_level { - active_list_levels.push(ActiveListLevel::new(active_square_size / 2.)) - } - - // Get the list of active squares at the level of depth beneath this target square's level - let next_level_deeper = &mut active_list_levels[next_level_deeper_level]; - - // Subdivide this target square into four sub-squares; running out of numerical precision will make this terminate at very small scales - let subdivided_size = active_square_size / 2.; - let active_top_left_corner = active_square.top_left_corner(); - let subdivided = [ - active_top_left_corner + DVec2::new(0., 0.), - active_top_left_corner + DVec2::new(subdivided_size, 0.), - active_top_left_corner + DVec2::new(0., subdivided_size), - active_top_left_corner + DVec2::new(subdivided_size, subdivided_size), - ]; - - // Add the sub-squares which aren't within the radius of a nearby point to the sub-level's active list - let half_subdivided_size = subdivided_size / 2.; - let new_sub_squares = subdivided.into_iter().filter_map(|sub_square| { - // Any sub-squares within the radius of a nearby point are filtered out - if !square_not_covered_by_poisson_points(sub_square, half_subdivided_size, diameter_squared, &points_grid) { - return None; - } - - // Fully inside the shape - if active_square.fully_in_shape() { - Some(ActiveSquare::new(sub_square, true)) - } - // Intersecting the shape's border - else { - // The sub-square is fully inside the shape if its top-left corner is inside and its edges don't intersect the shape border - let sub_square_fully_inside_shape = - !square_edges_intersect_shape_checker(sub_square, subdivided_size) && point_in_shape_checker(sub_square) && point_in_shape_checker(sub_square + subdivided_size); - // if !square_edges_intersect_shape_checker(sub_square, subdivided_size) { assert_eq!(point_in_shape_checker(sub_square), point_in_shape_checker(sub_square + subdivided_size)); } - // Sometimes this fails so it is necessary to also check the bottom right corner. - - Some(ActiveSquare::new(sub_square, sub_square_fully_inside_shape)) - } - }); - next_level_deeper.add_squares(new_sub_squares); - } - } - - points_grid.final_points() -} - -/// Randomly pick a square in the dartboard domain, with probability proportional to its area. -/// Returns a tuple with the subdivision level depth and the square index at that depth. -fn target_active_square(active_list_levels: &[ActiveListLevel], rng: &mut impl FnMut() -> f64) -> (usize, usize) { - let active_squares_total_area: f64 = active_list_levels.iter().map(|active_list| active_list.total_area()).sum(); - let mut index_into_area = rng() * active_squares_total_area; - - for (level, active_list_level) in active_list_levels.iter().enumerate() { - let subtracted = index_into_area - active_list_level.total_area(); - if subtracted > 0. { - index_into_area = subtracted; - continue; - } - - let active_square_index_in_level = (index_into_area / active_list_levels[level].square_area()).floor() as usize; - return (level, active_square_index_in_level); - } - - panic!("index_into_area couldn't be be mapped to a square in any level of the active lists"); -} - -fn point_not_covered_by_poisson_points(point: DVec2, diameter_squared: f64, points_grid: &AccelerationGrid) -> bool { - points_grid.nearby_points(point).all(|nearby_point| { - let x_separation = nearby_point.x - point.x; - let y_separation = nearby_point.y - point.y; - - x_separation.powi(2) + y_separation.powi(2) > diameter_squared - }) -} - -fn square_not_covered_by_poisson_points(point: DVec2, half_square_size: f64, diameter_squared: f64, points_grid: &AccelerationGrid) -> bool { - let square_center_x = point.x + half_square_size; - let square_center_y = point.y + half_square_size; - - points_grid.nearby_points(point).all(|nearby_point| { - let x_distance = (square_center_x - nearby_point.x).abs() + half_square_size; - let y_distance = (square_center_y - nearby_point.y).abs() + half_square_size; - - x_distance.powi(2) + y_distance.powi(2) > diameter_squared - }) -} - -#[inline(always)] -fn cartesian_product(a: A, b: B) -> impl Iterator -where - A: Iterator + Clone, - B: Iterator + Clone, - A::Item: Clone, - B::Item: Clone, -{ - a.flat_map(move |i| b.clone().map(move |j| (i.clone(), j))) -} - -/// A square (represented by its top left corner position and width/height of `square_size`) that is currently a candidate for targetting by the dart throwing process. -/// The positive sign bit encodes if the square is contained entirely within the masking shape, or negative if it's outside or intersects the shape path. -pub struct ActiveSquare(DVec2); - -impl ActiveSquare { - pub fn new(top_left_corner: DVec2, fully_in_shape: bool) -> Self { - Self(if fully_in_shape { top_left_corner } else { -top_left_corner }) - } - - pub fn top_left_corner(&self) -> DVec2 { - self.0.abs() - } - - pub fn fully_in_shape(&self) -> bool { - self.0.x.is_sign_positive() - } -} - -pub struct ActiveListLevel { - /// List of all subdivided squares of the same size that are currently candidates for targetting by the dart throwing process - active_squares: Vec, - /// Width and height of the squares in this level of subdivision - square_size: f64, - /// Current sum of the area in all active squares in this subdivision level - total_area: f64, -} - -impl ActiveListLevel { - #[inline(always)] - pub fn new(square_size: f64) -> Self { - Self { - active_squares: Vec::new(), - square_size, - total_area: 0., - } - } - - #[inline(always)] - pub fn new_filled(square_size: f64, width: f64, height: f64, point_in_shape_checker: impl Fn(DVec2) -> bool, square_edges_intersect_shape_checker: impl Fn(DVec2, f64) -> bool) -> Self { - // These should divide evenly but rounding is to protect against small numerical imprecision errors - let x_squares = (width / square_size).round() as usize; - let y_squares = (height / square_size).round() as usize; - - // Populate each square with its top-left corner coordinate - let active_squares: Vec<_> = cartesian_product(0..x_squares, 0..y_squares) - .filter_map(|(x, y)| { - let corner = (x as f64 * square_size, y as f64 * square_size).into(); - - let point_in_shape = point_in_shape_checker(corner); - let square_edges_intersect_shape = square_edges_intersect_shape_checker(corner, square_size); - let square_not_outside_shape = point_in_shape || square_edges_intersect_shape; - let square_in_shape = point_in_shape_checker(corner + square_size) && !square_edges_intersect_shape; - // if !square_edges_intersect_shape { assert_eq!(point_in_shape_checker(corner), point_in_shape_checker(corner + square_size)); } - // Sometimes this fails so it is necessary to also check the bottom right corner. - square_not_outside_shape.then_some(ActiveSquare::new(corner, square_in_shape)) - }) - .collect(); - - // Sum every square's area to get the total - let total_area = square_size.powi(2) * active_squares.len() as f64; - - Self { - active_squares, - square_size, - total_area, - } - } - - #[must_use] - #[inline(always)] - pub fn take_square(&mut self, active_square_index: usize) -> ActiveSquare { - let targetted_square = self.active_squares.swap_remove(active_square_index); - self.total_area = self.square_size.powi(2) * self.active_squares.len() as f64; - targetted_square - } - - #[inline(always)] - pub fn add_squares(&mut self, new_squares: impl Iterator) { - for new_square in new_squares { - self.active_squares.push(new_square); - } - self.total_area = self.square_size.powi(2) * self.active_squares.len() as f64; - } - - #[inline(always)] - pub fn square_size(&self) -> f64 { - self.square_size - } - - #[inline(always)] - pub fn square_area(&self) -> f64 { - self.square_size.powi(2) - } - - #[inline(always)] - pub fn total_area(&self) -> f64 { - self.total_area - } - - #[inline(always)] - pub fn not_empty(&self) -> bool { - !self.active_squares.is_empty() - } -} - -#[derive(Clone, Default)] -pub struct PointsList { - // The worst-case number of points in a 3x3 grid is 16 (one at each intersection of the four gridlines per axis) - storage_slots: [DVec2; 16], - length: usize, -} - -impl PointsList { - #[inline(always)] - pub fn push(&mut self, point: DVec2) { - self.storage_slots[self.length] = point; - self.length += 1; - } - - #[inline(always)] - pub fn list_cell_and_neighbors(&self) -> impl Iterator { - // The negative bit is used to store whether a point belongs to a neighboring cell - self.storage_slots.into_iter().take(self.length).map(|point| (point.x.abs(), point.y.abs()).into()) - } - - #[inline(always)] - pub fn list_cell(&self) -> impl Iterator { - // The negative bit is used to store whether a point belongs to a neighboring cell - self.storage_slots - .into_iter() - .take(self.length) - .filter(|point| point.x.is_sign_positive() && point.y.is_sign_positive()) - } -} - -pub struct AccelerationGrid { - size: f64, - dimension_x: usize, - dimension_y: usize, - cells: Vec, -} - -impl AccelerationGrid { - #[inline(always)] - pub fn new(width: f64, height: f64, size: f64) -> Self { - let dimension_x = (width / size).ceil() as usize + 1; - let dimension_y = (height / size).ceil() as usize + 1; - - Self { - size, - dimension_x, - dimension_y, - cells: vec![PointsList::default(); dimension_x * dimension_y], - } - } - - #[inline(always)] - pub fn insert(&mut self, point: DVec2) { - let x = (point.x / self.size).floor() as usize; - let y = (point.y / self.size).floor() as usize; - - // Insert this point at this cell and the surrounding cells in a 3x3 patch - for (x_offset, y_offset) in cartesian_product((-1)..=1, (-1)..=1) { - // Avoid going negative - let (x, y) = (x as isize + x_offset, y as isize + y_offset); - if x < 0 || y < 0 { - continue; - } - // Avoid going beyond the width or height - let (x, y) = (x as usize, y as usize); - if x > self.dimension_x - 1 || y > self.dimension_y - 1 { - continue; - } - - // Get the cell corresponding to the (x, y) index - let cell = &mut self.cells[y * self.dimension_x + x]; - - // Store the given point in this grid cell, and use the negative bit to indicate if this belongs to a neighboring cell - cell.push(if x_offset == 0 && y_offset == 0 { point } else { -point }); - } - } - - #[inline(always)] - pub fn nearby_points(&self, point: DVec2) -> impl Iterator { - let x = (point.x / self.size).floor() as usize; - let y = (point.y / self.size).floor() as usize; - - self.cells[y * self.dimension_x + x].list_cell_and_neighbors() - } - - #[inline(always)] - pub fn final_points(&self) -> Vec { - self.cells.iter().flat_map(|cell| cell.list_cell()).collect() - } -} diff --git a/libraries/bezier-rs/src/subpath/core.rs b/libraries/bezier-rs/src/subpath/core.rs deleted file mode 100644 index a18550db6d..0000000000 --- a/libraries/bezier-rs/src/subpath/core.rs +++ /dev/null @@ -1,602 +0,0 @@ -use super::*; -use crate::consts::*; -use crate::utils::format_point; -use glam::DVec2; -use std::fmt::Write; - -/// Functionality relating to core `Subpath` operations, such as constructors and `iter`. -impl Subpath { - /// Create a new `Subpath` using a list of [ManipulatorGroup]s. - /// A `Subpath` with less than 2 [ManipulatorGroup]s may not be closed. - #[track_caller] - pub fn new(manipulator_groups: Vec>, closed: bool) -> Self { - assert!(!closed || !manipulator_groups.is_empty(), "A closed Subpath must contain more than 0 ManipulatorGroups."); - Self { manipulator_groups, closed } - } - - /// Create a `Subpath` consisting of 2 manipulator groups from a `Bezier`. - pub fn from_bezier(bezier: &Bezier) -> Self { - Subpath::new( - vec![ - ManipulatorGroup { - anchor: bezier.start(), - in_handle: None, - out_handle: bezier.handle_start(), - id: PointId::new(), - }, - ManipulatorGroup { - anchor: bezier.end(), - in_handle: bezier.handle_end(), - out_handle: None, - id: PointId::new(), - }, - ], - false, - ) - } - - /// Creates a subpath from a slice of [Bezier]. When two consecutive Beziers do not share an end and start point, this function - /// resolves the discrepancy by simply taking the start-point of the second Bezier as the anchor of the Manipulator Group. - pub fn from_beziers(beziers: &[Bezier], closed: bool) -> Self { - assert!(!closed || beziers.len() > 1, "A closed Subpath must contain at least 1 Bezier."); - if beziers.is_empty() { - return Subpath::new(vec![], closed); - } - - let first = beziers.first().unwrap(); - let mut manipulator_groups = vec![ManipulatorGroup { - anchor: first.start(), - in_handle: None, - out_handle: first.handle_start(), - id: PointId::new(), - }]; - let mut inner_groups: Vec> = beziers - .windows(2) - .map(|bezier_pair| ManipulatorGroup { - anchor: bezier_pair[1].start(), - in_handle: bezier_pair[0].handle_end(), - out_handle: bezier_pair[1].handle_start(), - id: PointId::new(), - }) - .collect::>>(); - manipulator_groups.append(&mut inner_groups); - - let last = beziers.last().unwrap(); - if !closed { - manipulator_groups.push(ManipulatorGroup { - anchor: last.end(), - in_handle: last.handle_end(), - out_handle: None, - id: PointId::new(), - }); - return Subpath::new(manipulator_groups, false); - } - - manipulator_groups[0].in_handle = last.handle_end(); - Subpath::new(manipulator_groups, true) - } - - /// Returns true if the `Subpath` contains no [ManipulatorGroup]. - pub fn is_empty(&self) -> bool { - self.manipulator_groups.is_empty() - } - - /// Returns the number of [ManipulatorGroup]s contained within the `Subpath`. - pub fn len(&self) -> usize { - self.manipulator_groups.len() - } - - /// Returns the number of segments contained within the `Subpath`. - pub fn len_segments(&self) -> usize { - let mut number_of_curves = self.len(); - if !self.closed && number_of_curves > 0 { - number_of_curves -= 1 - } - number_of_curves - } - - /// Returns a copy of the bezier segment at the given segment index, if this segment exists. - pub fn get_segment(&self, segment_index: usize) -> Option { - if segment_index >= self.len_segments() { - return None; - } - Some(self[segment_index].to_bezier(&self[(segment_index + 1) % self.len()])) - } - - /// Returns an iterator of the [Bezier]s along the `Subpath`. - pub fn iter(&self) -> SubpathIter<'_, PointId> { - SubpathIter { - subpath: self, - index: 0, - is_always_closed: false, - } - } - - /// Returns an iterator of the [Bezier]s along the `Subpath` always considering it as a closed subpath. - pub fn iter_closed(&self) -> SubpathIter<'_, PointId> { - SubpathIter { - subpath: self, - index: 0, - is_always_closed: true, - } - } - - /// Returns a slice of the [ManipulatorGroup]s in the `Subpath`. - pub fn manipulator_groups(&self) -> &[ManipulatorGroup] { - &self.manipulator_groups - } - - /// Returns a mutable reference to the [ManipulatorGroup]s in the `Subpath`. - pub fn manipulator_groups_mut(&mut self) -> &mut Vec> { - &mut self.manipulator_groups - } - - /// Returns a vector of all the anchors (DVec2) for this `Subpath`. - pub fn anchors(&self) -> Vec { - self.manipulator_groups().iter().map(|group| group.anchor).collect() - } - - /// Returns if the Subpath is equivalent to a single point. - pub fn is_point(&self) -> bool { - if self.is_empty() { - return false; - } - let point = self.manipulator_groups[0].anchor; - self.manipulator_groups - .iter() - .all(|manipulator_group| manipulator_group.anchor.abs_diff_eq(point, MAX_ABSOLUTE_DIFFERENCE)) - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the curve. - pub fn curve_to_svg(&self, svg: &mut String, attributes: String) { - let curve_start_argument = format!("{SVG_ARG_MOVE}{} {}", self[0].anchor.x, self[0].anchor.y); - let mut curve_arguments: Vec = self.iter().map(|bezier| bezier.svg_curve_argument()).collect(); - if self.closed { - curve_arguments.push(String::from(SVG_ARG_CLOSED)); - } - - let _ = write!(svg, r#""#, curve_start_argument, curve_arguments.join(" ")); - } - - /// Write the curve argument to the string (the d="..." part) - pub fn subpath_to_svg(&self, svg: &mut String, transform: glam::DAffine2) -> std::fmt::Result { - if self.is_empty() { - return Ok(()); - } - - let start = transform.transform_point2(self[0].anchor); - format_point(svg, SVG_ARG_MOVE, start.x, start.y)?; - - for bezier in self.iter() { - bezier.apply_transformation(|pos| transform.transform_point2(pos)).write_curve_argument(svg)?; - svg.push(' '); - } - if self.closed { - svg.push_str(SVG_ARG_CLOSED); - } - Ok(()) - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the handle lines. - pub fn handle_lines_to_svg(&self, svg: &mut String, attributes: String) { - let handle_lines: Vec = self.iter().filter_map(|bezier| bezier.svg_handle_line_argument()).collect(); - let _ = write!(svg, r#""#, handle_lines.join(" ")); - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the anchors. - pub fn anchors_to_svg(&self, svg: &mut String, attributes: String) { - let anchors = self - .manipulator_groups - .iter() - .map(|point| format!(r#""#, point.anchor.x, point.anchor.y)) - .collect::>(); - let _ = write!(svg, "{}", anchors.concat()); - } - - /// Appends to the `svg` mutable string with an SVG shape representation of the handles. - pub fn handles_to_svg(&self, svg: &mut String, attributes: String) { - let handles = self - .manipulator_groups - .iter() - .flat_map(|group| [group.in_handle, group.out_handle]) - .flatten() - .map(|handle| format!(r#""#, handle.x, handle.y)) - .collect::>(); - let _ = write!(svg, "{}", handles.concat()); - } - - /// Returns an SVG representation of the `Subpath`. - /// Appends to the `svg` mutable string with an SVG shape representation that includes the curve, the handle lines, the anchors, and the handles. - pub fn to_svg(&self, svg: &mut String, curve_attributes: String, anchor_attributes: String, handle_attributes: String, handle_line_attributes: String) { - if !curve_attributes.is_empty() { - self.curve_to_svg(svg, curve_attributes); - } - if !handle_line_attributes.is_empty() { - self.handle_lines_to_svg(svg, handle_line_attributes); - } - if !anchor_attributes.is_empty() { - self.anchors_to_svg(svg, anchor_attributes); - } - if !handle_attributes.is_empty() { - self.handles_to_svg(svg, handle_attributes); - } - } - - /// Construct a [Subpath] from an iter of anchor positions. - pub fn from_anchors(anchor_positions: impl IntoIterator, closed: bool) -> Self { - Self::new(anchor_positions.into_iter().map(|anchor| ManipulatorGroup::new_anchor(anchor)).collect(), closed) - } - - pub fn from_anchors_linear(anchor_positions: impl IntoIterator, closed: bool) -> Self { - Self::new(anchor_positions.into_iter().map(|anchor| ManipulatorGroup::new_anchor_linear(anchor)).collect(), closed) - } - - /// Constructs a rectangle with `corner1` and `corner2` as the two corners. - pub fn new_rect(corner1: DVec2, corner2: DVec2) -> Self { - Self::from_anchors_linear([corner1, DVec2::new(corner2.x, corner1.y), corner2, DVec2::new(corner1.x, corner2.y)], true) - } - - /// Constructs a rounded rectangle with `corner1` and `corner2` as the two corners and `corner_radii` as the radii of the corners: `[top_left, top_right, bottom_right, bottom_left]`. - pub fn new_rounded_rect(corner1: DVec2, corner2: DVec2, corner_radii: [f64; 4]) -> Self { - if corner_radii.iter().all(|radii| radii.abs() < f64::EPSILON * 100.) { - return Self::new_rect(corner1, corner2); - } - - use std::f64::consts::{FRAC_1_SQRT_2, PI}; - - let new_arc = |center: DVec2, corner: DVec2, radius: f64| -> Vec> { - let point1 = center + DVec2::from_angle(-PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; - let point2 = center + DVec2::from_angle(PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; - if radius == 0. { - return vec![ManipulatorGroup::new_anchor(point1), ManipulatorGroup::new_anchor(point2)]; - } - - // Based on https://pomax.github.io/bezierinfo/#circles_cubic - const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; - let handle_offset = radius * HANDLE_OFFSET_FACTOR; - vec![ - ManipulatorGroup::new(point1, None, Some(point1 + handle_offset * (corner - point1).normalize())), - ManipulatorGroup::new(point2, Some(point2 + handle_offset * (corner - point2).normalize()), None), - ] - }; - Self::new( - [ - new_arc(DVec2::new(corner1.x + corner_radii[0], corner1.y + corner_radii[0]), DVec2::new(corner1.x, corner1.y), corner_radii[0]), - new_arc(DVec2::new(corner2.x - corner_radii[1], corner1.y + corner_radii[1]), DVec2::new(corner2.x, corner1.y), corner_radii[1]), - new_arc(DVec2::new(corner2.x - corner_radii[2], corner2.y - corner_radii[2]), DVec2::new(corner2.x, corner2.y), corner_radii[2]), - new_arc(DVec2::new(corner1.x + corner_radii[3], corner2.y - corner_radii[3]), DVec2::new(corner1.x, corner2.y), corner_radii[3]), - ] - .concat(), - true, - ) - } - - /// Constructs an ellipse with `corner1` and `corner2` as the two corners of the bounding box. - pub fn new_ellipse(corner1: DVec2, corner2: DVec2) -> Self { - let size = (corner1 - corner2).abs(); - let center = (corner1 + corner2) / 2.; - let top = DVec2::new(center.x, corner1.y); - let bottom = DVec2::new(center.x, corner2.y); - let left = DVec2::new(corner1.x, center.y); - let right = DVec2::new(corner2.x, center.y); - - // Based on https://pomax.github.io/bezierinfo/#circles_cubic - const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; - let handle_offset = size * HANDLE_OFFSET_FACTOR * 0.5; - - let manipulator_groups = vec![ - ManipulatorGroup::new(top, Some(top - handle_offset * DVec2::X), Some(top + handle_offset * DVec2::X)), - ManipulatorGroup::new(right, Some(right - handle_offset * DVec2::Y), Some(right + handle_offset * DVec2::Y)), - ManipulatorGroup::new(bottom, Some(bottom + handle_offset * DVec2::X), Some(bottom - handle_offset * DVec2::X)), - ManipulatorGroup::new(left, Some(left + handle_offset * DVec2::Y), Some(left - handle_offset * DVec2::Y)), - ]; - Self::new(manipulator_groups, true) - } - - /// Constructs an arc by a `radius`, `angle_start` and `angle_size`. Angles must be in radians. Slice option makes it look like pie or pacman. - pub fn new_arc(radius: f64, start_angle: f64, sweep_angle: f64, arc_type: ArcType) -> Self { - // Prevents glitches from numerical imprecision that have been observed during animation playback after about a minute - let start_angle = start_angle % (std::f64::consts::TAU * 2.); - let sweep_angle = sweep_angle % (std::f64::consts::TAU * 2.); - - let original_start_angle = start_angle; - let sweep_angle_sign = sweep_angle.signum(); - - let mut start_angle = 0.; - let mut sweep_angle = sweep_angle.abs(); - - if (sweep_angle / std::f64::consts::TAU).floor() as u32 % 2 == 0 { - sweep_angle %= std::f64::consts::TAU; - } else { - start_angle = sweep_angle % std::f64::consts::TAU; - sweep_angle = std::f64::consts::TAU - start_angle; - } - - sweep_angle *= sweep_angle_sign; - start_angle *= sweep_angle_sign; - start_angle += original_start_angle; - - let closed = arc_type == ArcType::Closed; - let slice = arc_type == ArcType::PieSlice; - - let center = DVec2::new(0., 0.); - let segments = (sweep_angle.abs() / (std::f64::consts::PI / 4.)).ceil().max(1.) as usize; - let step = sweep_angle / segments as f64; - let factor = 4. / 3. * (step / 2.).sin() / (1. + (step / 2.).cos()); - - let mut manipulator_groups = Vec::with_capacity(segments); - let mut prev_in_handle = None; - let mut prev_end = DVec2::new(0., 0.); - - for i in 0..segments { - let start_angle = start_angle + step * i as f64; - let end_angle = start_angle + step; - let start_vec = DVec2::from_angle(start_angle); - let end_vec = DVec2::from_angle(end_angle); - - let start = center + radius * start_vec; - let end = center + radius * end_vec; - - let handle_start = start + start_vec.perp() * radius * factor; - let handle_end = end - end_vec.perp() * radius * factor; - - manipulator_groups.push(ManipulatorGroup::new(start, prev_in_handle, Some(handle_start))); - prev_in_handle = Some(handle_end); - prev_end = end; - } - manipulator_groups.push(ManipulatorGroup::new(prev_end, prev_in_handle, None)); - - if slice { - manipulator_groups.push(ManipulatorGroup::new(center, None, None)); - } - - Self::new(manipulator_groups, closed || slice) - } - - /// Constructs a regular polygon (ngon). Based on `sides` and `radius`, which is the distance from the center to any vertex. - pub fn new_regular_polygon(center: DVec2, sides: u64, radius: f64) -> Self { - let sides = sides.max(3); - let angle_increment = std::f64::consts::TAU / (sides as f64); - let anchor_positions = (0..sides).map(|i| { - let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; - let center = center + DVec2::ONE * radius; - DVec2::new(center.x + radius * f64::cos(angle), center.y + radius * f64::sin(angle)) * 0.5 - }); - Self::from_anchors(anchor_positions, true) - } - - /// Constructs a star polygon (n-star). See [new_regular_polygon], but with interspersed vertices at an `inner_radius`. - pub fn new_star_polygon(center: DVec2, sides: u64, radius: f64, inner_radius: f64) -> Self { - let sides = sides.max(2); - let angle_increment = 0.5 * std::f64::consts::TAU / (sides as f64); - let anchor_positions = (0..sides * 2).map(|i| { - let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; - let center = center + DVec2::ONE * radius; - let r = if i % 2 == 0 { radius } else { inner_radius }; - DVec2::new(center.x + r * f64::cos(angle), center.y + r * f64::sin(angle)) * 0.5 - }); - Self::from_anchors(anchor_positions, true) - } - - /// Constructs a line from `p1` to `p2` - pub fn new_line(p1: DVec2, p2: DVec2) -> Self { - Self::from_anchors([p1, p2], false) - } - - /// Construct a cubic spline from a list of points. - /// Based on . - pub fn new_cubic_spline(points: Vec) -> Self { - if points.len() < 2 { - return Self::new(Vec::new(), false); - } - - // Number of points = number of points to find handles for - let len_points = points.len(); - - let out_handles = solve_spline_first_handle_open(&points); - - let mut subpath = Subpath::new(Vec::new(), false); - - // given the second point in the n'th cubic bezier, the third point is given by 2 * points[n+1] - b[n+1]. - // to find 'handle1_pos' for the n'th point we need the n-1 cubic bezier - subpath.manipulator_groups.push(ManipulatorGroup::new(points[0], None, Some(out_handles[0]))); - for i in 1..len_points - 1 { - subpath - .manipulator_groups - .push(ManipulatorGroup::new(points[i], Some(2. * points[i] - out_handles[i]), Some(out_handles[i]))); - } - subpath - .manipulator_groups - .push(ManipulatorGroup::new(points[len_points - 1], Some(2. * points[len_points - 1] - out_handles[len_points - 1]), None)); - - subpath - } - - #[cfg(feature = "kurbo")] - pub fn to_vello_path(&self, transform: glam::DAffine2, path: &mut kurbo::BezPath) { - use crate::BezierHandles; - - let to_point = |p: DVec2| { - let p = transform.transform_point2(p); - kurbo::Point::new(p.x, p.y) - }; - path.move_to(to_point(self.iter().next().unwrap().start)); - for segment in self.iter() { - match segment.handles { - BezierHandles::Linear => path.line_to(to_point(segment.end)), - BezierHandles::Quadratic { handle } => path.quad_to(to_point(handle), to_point(segment.end)), - BezierHandles::Cubic { handle_start, handle_end } => path.curve_to(to_point(handle_start), to_point(handle_end), to_point(segment.end)), - } - } - if self.closed { - path.close_path(); - } - } -} - -/// Solve for the first handle of an open spline. (The opposite handle can be found by mirroring the result about the anchor.) -pub fn solve_spline_first_handle_open(points: &[DVec2]) -> Vec { - let len_points = points.len(); - if len_points == 0 { - return Vec::new(); - } - if len_points == 1 { - return vec![points[0]]; - } - - // Matrix coefficients a, b and c (see https://mathworld.wolfram.com/CubicSpline.html). - // Because the `a` coefficients are all 1, they need not be stored. - // This algorithm does a variation of the above algorithm. - // Instead of using the traditional cubic (a + bt + ct^2 + dt^3), we use the bezier cubic. - - let mut b = vec![DVec2::new(4., 4.); len_points]; - b[0] = DVec2::new(2., 2.); - b[len_points - 1] = DVec2::new(2., 2.); - - let mut c = vec![DVec2::new(1., 1.); len_points]; - - // 'd' is the the second point in a cubic bezier, which is what we solve for - let mut d = vec![DVec2::ZERO; len_points]; - - d[0] = DVec2::new(2. * points[1].x + points[0].x, 2. * points[1].y + points[0].y); - d[len_points - 1] = DVec2::new(3. * points[len_points - 1].x, 3. * points[len_points - 1].y); - for idx in 1..(len_points - 1) { - d[idx] = DVec2::new(4. * points[idx].x + 2. * points[idx + 1].x, 4. * points[idx].y + 2. * points[idx + 1].y); - } - - // Solve with Thomas algorithm (see https://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm) - // Now we do row operations to eliminate `a` coefficients. - c[0] /= -b[0]; - d[0] /= -b[0]; - #[allow(clippy::assign_op_pattern)] - for i in 1..len_points { - b[i] += c[i - 1]; - // For some reason this `+=` version makes the borrow checker mad: - // d[i] += d[i-1] - d[i] = d[i] + d[i - 1]; - c[i] /= -b[i]; - d[i] /= -b[i]; - } - - // At this point b[i] == -a[i + 1] and a[i] == 0. - // Now we do row operations to eliminate 'c' coefficients and solve. - d[len_points - 1] *= -1.; - #[allow(clippy::assign_op_pattern)] - for i in (0..len_points - 1).rev() { - d[i] = d[i] - (c[i] * d[i + 1]); - d[i] *= -1.; // d[i] /= b[i] - } - - d -} - -/// Solve for the first handle of a closed spline. (The opposite handle can be found by mirroring the result about the anchor.) -/// If called with fewer than 3 points, this function will return an empty result. -pub fn solve_spline_first_handle_closed(points: &[DVec2]) -> Vec { - let len_points = points.len(); - if len_points < 3 { - return Vec::new(); - } - - // Matrix coefficients `a`, `b` and `c` (see https://mathworld.wolfram.com/CubicSpline.html). - // We don't really need to allocate them but it keeps the maths understandable. - let a = vec![DVec2::ONE; len_points]; - let b = vec![DVec2::splat(4.); len_points]; - let c = vec![DVec2::ONE; len_points]; - - let mut cmod = vec![DVec2::ZERO; len_points]; - let mut u = vec![DVec2::ZERO; len_points]; - - // `x` is initially the output of the matrix multiplication, but is converted to the second value. - let mut x = vec![DVec2::ZERO; len_points]; - - for (i, point) in x.iter_mut().enumerate() { - let previous_i = i.checked_sub(1).unwrap_or(len_points - 1); - let next_i = (i + 1) % len_points; - *point = 3. * (points[next_i] - points[previous_i]); - } - - // Solve using https://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm#Variants (the variant using periodic boundary conditions). - // This code below is based on the reference C language implementation provided in that section of the article. - let alpha = a[0]; - let beta = c[len_points - 1]; - - // Arbitrary, but chosen such that division by zero is avoided. - let gamma = -b[0]; - - cmod[0] = alpha / (b[0] - gamma); - u[0] = gamma / (b[0] - gamma); - x[0] /= b[0] - gamma; - - // Handle from from `1` to `len_points - 2` (inclusive). - for ix in 1..=(len_points - 2) { - let m = 1.0 / (b[ix] - a[ix] * cmod[ix - 1]); - cmod[ix] = c[ix] * m; - u[ix] = (0.0 - a[ix] * u[ix - 1]) * m; - x[ix] = (x[ix] - a[ix] * x[ix - 1]) * m; - } - - // Handle `len_points - 1`. - let m = 1.0 / (b[len_points - 1] - alpha * beta / gamma - beta * cmod[len_points - 2]); - u[len_points - 1] = (alpha - a[len_points - 1] * u[len_points - 2]) * m; - x[len_points - 1] = (x[len_points - 1] - a[len_points - 1] * x[len_points - 2]) * m; - - // Loop from `len_points - 2` to `0` (inclusive). - for ix in (0..=(len_points - 2)).rev() { - u[ix] = u[ix] - cmod[ix] * u[ix + 1]; - x[ix] = x[ix] - cmod[ix] * x[ix + 1]; - } - - let fact = (x[0] + x[len_points - 1] * beta / gamma) / (1.0 + u[0] + u[len_points - 1] * beta / gamma); - - for ix in 0..(len_points) { - x[ix] -= fact * u[ix]; - } - - let mut real = vec![DVec2::ZERO; len_points]; - for i in 0..len_points { - let previous = i.checked_sub(1).unwrap_or(len_points - 1); - let next = (i + 1) % len_points; - real[i] = x[previous] * a[next] + x[i] * b[i] + x[next] * c[i]; - } - - // The matrix is now solved. - - // Since we have computed the derivative, work back to find the start handle. - for i in 0..len_points { - x[i] = (x[i] / 3.) + points[i]; - } - - x -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn closed_spline() { - // These points are just chosen arbitrary - let points = [DVec2::new(0., 0.), DVec2::new(0., 0.), DVec2::new(6., 5.), DVec2::new(7., 9.), DVec2::new(2., 3.)]; - - let out_handles = solve_spline_first_handle_closed(&points); - - // Construct the Subpath - let mut manipulator_groups = Vec::new(); - for i in 0..out_handles.len() { - manipulator_groups.push(ManipulatorGroup::::new(points[i], Some(2. * points[i] - out_handles[i]), Some(out_handles[i]))); - } - let subpath = Subpath::new(manipulator_groups, true); - - // For each pair of bรฉzier curves, ensure that the second derivative is continuous - for (bรฉzier_a, bรฉzier_b) in subpath.iter().zip(subpath.iter().skip(1).chain(subpath.iter().take(1))) { - let derivative2_end_a = bรฉzier_a.derivative().unwrap().derivative().unwrap().evaluate(crate::TValue::Parametric(1.)); - let derivative2_start_b = bรฉzier_b.derivative().unwrap().derivative().unwrap().evaluate(crate::TValue::Parametric(0.)); - - assert!( - derivative2_end_a.abs_diff_eq(derivative2_start_b, 1e-10), - "second derivative at the end of a {derivative2_end_a} is equal to the second derivative at the start of b {derivative2_start_b}" - ); - } - } -} diff --git a/libraries/bezier-rs/src/subpath/lookup.rs b/libraries/bezier-rs/src/subpath/lookup.rs deleted file mode 100644 index a63b7a179a..0000000000 --- a/libraries/bezier-rs/src/subpath/lookup.rs +++ /dev/null @@ -1,519 +0,0 @@ -use super::*; -use crate::consts::{DEFAULT_EUCLIDEAN_ERROR_BOUND, DEFAULT_LUT_STEP_SIZE, MAX_ABSOLUTE_DIFFERENCE}; -use crate::utils::{SubpathTValue, TValue, TValueType}; -use glam::DVec2; - -/// Functionality relating to looking up properties of the `Subpath` or points along the `Subpath`. -impl Subpath { - /// Return a selection of equidistant points on the bezier curve. - /// If no value is provided for `steps`, then the function will default `steps` to be 10. - /// - pub fn compute_lookup_table(&self, steps: Option, tvalue_type: Option) -> Vec { - let steps = steps.unwrap_or(DEFAULT_LUT_STEP_SIZE); - let tvalue_type = tvalue_type.unwrap_or(TValueType::Parametric); - - (0..=steps) - .map(|t| { - let tvalue = match tvalue_type { - TValueType::Parametric => SubpathTValue::GlobalParametric(t as f64 / steps as f64), - TValueType::Euclidean => SubpathTValue::GlobalEuclidean(t as f64 / steps as f64), - }; - self.evaluate(tvalue) - }) - .collect() - } - - /// Return the sum of the approximation of the length of each `Bezier` curve along the `Subpath`. - /// - `tolerance` - Tolerance used to approximate the curve. - /// - pub fn length(&self, tolerance: Option) -> f64 { - self.iter().map(|bezier| bezier.length(tolerance)).sum() - } - - /// Return the approximation of the length centroid, together with the length, of the `Subpath`. - /// - /// The length centroid is the center of mass for the arc length of the solid shape's perimeter. - /// An infinitely thin wire forming the subpath's closed shape would balance at this point. - /// - /// It will return `None` if no manipulator is present. - /// - `tolerance` - Tolerance used to approximate the curve. - /// - `always_closed` - consider the subpath as closed always. - pub fn length_centroid_and_length(&self, tolerance: Option, always_closed: bool) -> Option<(DVec2, f64)> { - if always_closed { self.iter_closed() } else { self.iter() } - .map(|bezier| bezier.length_centroid_and_length(tolerance)) - .map(|(centroid, length)| (centroid * length, length)) - .reduce(|(centroid_part1, length1), (centroid_part2, length2)| (centroid_part1 + centroid_part2, length1 + length2)) - .map(|(centroid_part, length)| (centroid_part / length, length)) - } - - /// Return the approximation of the length centroid of the `Subpath`. - /// - /// The length centroid is the center of mass for the arc length of the solid shape's perimeter. - /// An infinitely thin wire forming the subpath's closed shape would balance at this point. - /// - /// It will return `None` if no manipulator is present. - /// - `tolerance` - Tolerance used to approximate the curve. - /// - `always_closed` - consider the subpath as closed always. - /// - pub fn length_centroid(&self, tolerance: Option, always_closed: bool) -> Option { - self.length_centroid_and_length(tolerance, always_closed).map(|(centroid, _)| centroid) - } - - /// Return the area enclosed by the `Subpath` always considering it as a closed subpath. It will always give a positive value. - /// - /// If the area is less than `error`, it will return zero. - /// Because the calculation of area for self-intersecting path requires finding the intersections, the following parameters are used: - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - pub fn area(&self, error: Option, minimum_separation: Option) -> f64 { - let all_intersections = self.all_self_intersections(error, minimum_separation); - let mut current_sign: f64 = 1.; - - let area: f64 = self - .iter_closed() - .enumerate() - .map(|(index, bezier)| { - let (f_x, f_y) = bezier.parametric_polynomial(); - let (f_x, mut f_y) = (f_x.as_size::<7>().unwrap(), f_y.as_size::<7>().unwrap()); - f_y.derivative_mut(); - f_y *= &f_x; - f_y.antiderivative_mut(); - - let mut curve_sum = -current_sign * f_y.eval(0.); - for (_, t) in all_intersections.iter().filter(|(i, _)| *i == index) { - curve_sum += 2. * current_sign * f_y.eval(*t); - current_sign *= -1.; - } - curve_sum += current_sign * f_y.eval(1.); - curve_sum - }) - .sum(); - - if area.abs() < error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE) { - return 0.; - } - - area.abs() - } - - /// Return the area centroid, together with the area, of the `Subpath` always considering it as a closed subpath. The area will always be a positive value. - /// - /// The area centroid is the center of mass for the area of a solid shape's interior. - /// An infinitely flat material forming the subpath's closed shape would balance at this point. - /// - /// It will return `None` if no manipulator is present. If the area is less than `error`, it will return `Some((DVec2::NAN, 0.))`. - /// - /// Because the calculation of area and centroid for self-intersecting path requires finding the intersections, the following parameters are used: - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two. - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - pub fn area_centroid_and_area(&self, error: Option, minimum_separation: Option) -> Option<(DVec2, f64)> { - let all_intersections = self.all_self_intersections(error, minimum_separation); - let mut current_sign: f64 = 1.; - - let (x_sum, y_sum, area) = self - .iter_closed() - .enumerate() - .map(|(index, bezier)| { - let (f_x, f_y) = bezier.parametric_polynomial(); - let (f_x, f_y) = (f_x.as_size::<10>().unwrap(), f_y.as_size::<10>().unwrap()); - let f_y_prime = f_y.derivative(); - let f_x_prime = f_x.derivative(); - let f_xy = &f_x * &f_y; - - let mut x_part = &f_xy * &f_x_prime; - let mut y_part = &f_xy * &f_y_prime; - let mut area_part = &f_x * &f_y_prime; - x_part.antiderivative_mut(); - y_part.antiderivative_mut(); - area_part.antiderivative_mut(); - - let mut curve_sum_x = -current_sign * x_part.eval(0.); - let mut curve_sum_y = -current_sign * y_part.eval(0.); - let mut curve_sum_area = -current_sign * area_part.eval(0.); - for (_, t) in all_intersections.iter().filter(|(i, _)| *i == index) { - curve_sum_x += 2. * current_sign * x_part.eval(*t); - curve_sum_y += 2. * current_sign * y_part.eval(*t); - curve_sum_area += 2. * current_sign * area_part.eval(*t); - current_sign *= -1.; - } - curve_sum_x += current_sign * x_part.eval(1.); - curve_sum_y += current_sign * y_part.eval(1.); - curve_sum_area += current_sign * area_part.eval(1.); - - (-curve_sum_x, curve_sum_y, curve_sum_area) - }) - .reduce(|(x1, y1, area1), (x2, y2, area2)| (x1 + x2, y1 + y2, area1 + area2))?; - - if area.abs() < error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE) { - return Some((DVec2::NAN, 0.)); - } - - Some((DVec2::new(x_sum / area, y_sum / area), area.abs())) - } - - /// Attempts to return the area centroid of the `Subpath` always considering it as a closed subpath. Falls back to length centroid if the area is zero. - /// - /// The area centroid is the center of mass for the area of a solid shape's interior. - /// An infinitely flat material forming the subpath's closed shape would balance at this point. - /// - /// It will return `None` if no manipulator is present. - /// Because the calculation of centroid for self-intersecting path requires finding the intersections, the following parameters are used: - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation` - the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - `tolerance` - Tolerance used to approximate the curve if it falls back to length centroid. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - /// - pub fn area_centroid(&self, error: Option, minimum_separation: Option, tolerance: Option) -> Option { - let (centroid, area) = self.area_centroid_and_area(error, minimum_separation)?; - - if area != 0. { - Some(centroid) - } else { - self.length_centroid_and_length(tolerance, true).map(|(centroid, _)| centroid) - } - } - - /// Converts from a subpath (composed of multiple segments) to a point along a certain segment represented. - /// The returned tuple represents the segment index and the `t` value along that segment. - /// Both the input global `t` value and the output `t` value are in euclidean space, meaning there is a constant rate of change along the arc length. - pub fn global_euclidean_to_local_euclidean(&self, global_t: f64, lengths: &[f64], total_length: f64) -> (usize, f64) { - let mut accumulator = 0.; - for (index, length) in lengths.iter().enumerate() { - let length_ratio = length / total_length; - if (index == 0 || accumulator <= global_t) && global_t <= accumulator + length_ratio { - return (index, ((global_t - accumulator) / length_ratio).clamp(0., 1.)); - } - accumulator += length_ratio; - } - (self.len() - 2, 1.) - } - - /// Convert a [SubpathTValue] to a parametric `(segment_index, t)` tuple. - /// - Asserts that `t` values contained within the `SubpathTValue` argument lie in the range [0, 1]. - /// - If the argument is a variant containing a `segment_index`, asserts that the index references a valid segment on the curve. - pub(crate) fn t_value_to_parametric(&self, t: SubpathTValue) -> (usize, f64) { - assert!(self.len_segments() >= 1); - - match t { - SubpathTValue::Parametric { segment_index, t } => { - assert!((0.0..=1.).contains(&t)); - assert!((0..self.len_segments()).contains(&segment_index)); - (segment_index, t) - } - SubpathTValue::GlobalParametric(global_t) => { - assert!((0.0..=1.).contains(&global_t)); - - if global_t == 1. { - return (self.len_segments() - 1, 1.); - } - - let scaled_t = global_t * self.len_segments() as f64; - let segment_index = scaled_t.floor() as usize; - let t = scaled_t - segment_index as f64; - - (segment_index, t) - } - SubpathTValue::Euclidean { segment_index, t } => { - assert!((0.0..=1.).contains(&t)); - assert!((0..self.len_segments()).contains(&segment_index)); - (segment_index, self.get_segment(segment_index).unwrap().euclidean_to_parametric(t, DEFAULT_EUCLIDEAN_ERROR_BOUND)) - } - SubpathTValue::GlobalEuclidean(t) => { - let lengths = self.iter().map(|bezier| bezier.length(None)).collect::>(); - let total_length: f64 = lengths.iter().sum(); - let (segment_index, segment_t_euclidean) = self.global_euclidean_to_local_euclidean(t, lengths.as_slice(), total_length); - let segment_t_parametric = self.get_segment(segment_index).unwrap().euclidean_to_parametric(segment_t_euclidean, DEFAULT_EUCLIDEAN_ERROR_BOUND); - (segment_index, segment_t_parametric) - } - SubpathTValue::EuclideanWithinError { segment_index, t, error } => { - assert!((0.0..=1.).contains(&t)); - assert!((0..self.len_segments()).contains(&segment_index)); - (segment_index, self.get_segment(segment_index).unwrap().euclidean_to_parametric(t, error)) - } - SubpathTValue::GlobalEuclideanWithinError { t, error } => { - let lengths = self.iter().map(|bezier| bezier.length(None)).collect::>(); - let total_length: f64 = lengths.iter().sum(); - let (segment_index, segment_t) = self.global_euclidean_to_local_euclidean(t, lengths.as_slice(), total_length); - (segment_index, self.get_segment(segment_index).unwrap().euclidean_to_parametric(segment_t, error)) - } - } - } - - /// Returns the segment index and `t` value that corresponds to the closest point on the curve to the provided point. - /// - pub fn project(&self, point: DVec2) -> Option<(usize, f64)> { - if self.is_empty() { - return None; - } - - // TODO: Optimization opportunity: Filter out segments which are *definitely* not the closest to the given point - let (index, (_, project_t)) = self - .iter() - .map(|bezier| { - let project_t = bezier.project(point); - (bezier.evaluate(TValue::Parametric(project_t)).distance(point), project_t) - }) - .enumerate() - .min_by(|(_, (distance1, _)), (_, (distance2, _))| distance1.total_cmp(distance2)) - .unwrap_or((0, (0., 0.))); // If the Subpath contains only a single manipulator group, returns (0, 0.) - - Some((index, project_t)) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::consts::MAX_ABSOLUTE_DIFFERENCE; - use crate::utils::f64_compare; - - #[test] - fn length_quadratic() { - let start = DVec2::new(20., 30.); - let middle = DVec2::new(80., 90.); - let end = DVec2::new(60., 45.); - let handle1 = DVec2::new(75., 85.); - let handle2 = DVec2::new(40., 30.); - let handle3 = DVec2::new(10., 10.); - - let bezier1 = Bezier::from_quadratic_dvec2(start, handle1, middle); - let bezier2 = Bezier::from_quadratic_dvec2(middle, handle2, end); - let bezier3 = Bezier::from_quadratic_dvec2(end, handle3, start); - - let mut subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle, - in_handle: None, - out_handle: Some(handle2), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: Some(handle3), - id: EmptyId, - }, - ], - false, - ); - assert_eq!(subpath.length(None), bezier1.length(None) + bezier2.length(None)); - - subpath.closed = true; - assert_eq!(subpath.length(None), bezier1.length(None) + bezier2.length(None) + bezier3.length(None)); - } - - #[test] - fn length_mixed() { - let start = DVec2::new(20., 30.); - let middle = DVec2::new(70., 70.); - let end = DVec2::new(60., 45.); - let handle1 = DVec2::new(75., 85.); - let handle2 = DVec2::new(40., 30.); - let handle3 = DVec2::new(10., 10.); - - let linear_bezier = Bezier::from_linear_dvec2(start, middle); - let quadratic_bezier = Bezier::from_quadratic_dvec2(middle, handle1, end); - let cubic_bezier = Bezier::from_cubic_dvec2(end, handle2, handle3, start); - - let mut subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: Some(handle3), - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle, - in_handle: None, - out_handle: Some(handle1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: Some(handle2), - id: EmptyId, - }, - ], - false, - ); - assert_eq!(subpath.length(None), linear_bezier.length(None) + quadratic_bezier.length(None)); - - subpath.closed = true; - assert_eq!(subpath.length(None), linear_bezier.length(None) + quadratic_bezier.length(None) + cubic_bezier.length(None)); - } - - #[test] - fn length_centroid() { - let start = DVec2::new(0., 0.); - let end = DVec2::new(1., 1.); - let handle = DVec2::new(0., 1.); - - let mut subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: None, - id: EmptyId, - }, - ], - false, - ); - - let expected_centroid = DVec2::new(0.4153039799983826, 0.5846960200016174); - let epsilon = 0.00001; - - assert!(subpath.length_centroid_and_length(None, true).unwrap().0.abs_diff_eq(expected_centroid, epsilon)); - - subpath.closed = true; - assert!(subpath.length_centroid_and_length(None, true).unwrap().0.abs_diff_eq(expected_centroid, epsilon)); - } - - #[test] - fn area() { - let start = DVec2::new(0., 0.); - let end = DVec2::new(1., 1.); - let handle = DVec2::new(0., 1.); - - let mut subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: None, - id: EmptyId, - }, - ], - false, - ); - - let expected_area = 1. / 3.; - let epsilon = 0.00001; - - assert!((subpath.area(Some(0.001), Some(0.001)) - expected_area).abs() < epsilon); - - subpath.closed = true; - assert!((subpath.area(Some(0.001), Some(0.001)) - expected_area).abs() < epsilon); - } - - #[test] - fn area_centroid() { - let start = DVec2::new(0., 0.); - let end = DVec2::new(1., 1.); - let handle = DVec2::new(0., 1.); - - let mut subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: None, - id: EmptyId, - }, - ], - false, - ); - - let expected_centroid = DVec2::new(0.4, 0.6); - let epsilon = 0.00001; - - assert!(subpath.area_centroid(Some(0.001), Some(0.001), None).unwrap().abs_diff_eq(expected_centroid, epsilon)); - - subpath.closed = true; - assert!(subpath.area_centroid(Some(0.001), Some(0.001), None).unwrap().abs_diff_eq(expected_centroid, epsilon)); - } - - #[test] - fn t_value_to_parametric_global_parametric_open_subpath() { - let mock_manipulator_group = ManipulatorGroup { - anchor: DVec2::new(0., 0.), - in_handle: None, - out_handle: None, - id: EmptyId, - }; - let open_subpath = Subpath { - manipulator_groups: vec![mock_manipulator_group; 5], - closed: false, - }; - - let (segment_index, t) = open_subpath.t_value_to_parametric(SubpathTValue::GlobalParametric(0.7)); - assert_eq!(segment_index, 2); - assert!(f64_compare(t, 0.8, MAX_ABSOLUTE_DIFFERENCE)); - - // The start and end points of an open subpath are NOT equivalent - assert_eq!(open_subpath.t_value_to_parametric(SubpathTValue::GlobalParametric(0.)), (0, 0.)); - assert_eq!(open_subpath.t_value_to_parametric(SubpathTValue::GlobalParametric(1.)), (3, 1.)); - } - - #[test] - fn t_value_to_parametric_global_parametric_closed_subpath() { - let mock_manipulator_group = ManipulatorGroup { - anchor: DVec2::new(0., 0.), - in_handle: None, - out_handle: None, - id: EmptyId, - }; - let closed_subpath = Subpath { - manipulator_groups: vec![mock_manipulator_group; 5], - closed: true, - }; - - let (segment_index, t) = closed_subpath.t_value_to_parametric(SubpathTValue::GlobalParametric(0.7)); - assert_eq!(segment_index, 3); - assert!(f64_compare(t, 0.5, MAX_ABSOLUTE_DIFFERENCE)); - - // The start and end points of a closed subpath are equivalent - assert_eq!(closed_subpath.t_value_to_parametric(SubpathTValue::GlobalParametric(0.)), (0, 0.)); - assert_eq!(closed_subpath.t_value_to_parametric(SubpathTValue::GlobalParametric(1.)), (4, 1.)); - } - - #[test] - fn exact_start_end() { - let start = DVec2::new(20., 30.); - let end = DVec2::new(60., 45.); - let handle = DVec2::new(75., 85.); - - let subpath: Subpath = Subpath::from_bezier(&Bezier::from_quadratic_dvec2(start, handle, end)); - - assert_eq!(subpath.evaluate(SubpathTValue::GlobalEuclidean(0.)), start); - assert_eq!(subpath.evaluate(SubpathTValue::GlobalEuclidean(1.)), end); - } -} diff --git a/libraries/bezier-rs/src/subpath/manipulators.rs b/libraries/bezier-rs/src/subpath/manipulators.rs deleted file mode 100644 index 4faf28d26a..0000000000 --- a/libraries/bezier-rs/src/subpath/manipulators.rs +++ /dev/null @@ -1,231 +0,0 @@ -use super::*; -use crate::consts::MAX_ABSOLUTE_DIFFERENCE; -use crate::utils::f64_compare; -use crate::{SubpathTValue, TValue}; - -impl Subpath { - /// Get whether the subpath is closed. - pub fn closed(&self) -> bool { - self.closed - } - - /// Set whether the subpath is closed. - pub fn set_closed(&mut self, new_closed: bool) { - self.closed = new_closed; - } - - /// Access a [ManipulatorGroup] from a PointId. - pub fn manipulator_from_id(&self, id: PointId) -> Option<&ManipulatorGroup> { - self.manipulator_groups.iter().find(|manipulator_group| manipulator_group.id == id) - } - - /// Access a mutable [ManipulatorGroup] from a PointId. - pub fn manipulator_mut_from_id(&mut self, id: PointId) -> Option<&mut ManipulatorGroup> { - self.manipulator_groups.iter_mut().find(|manipulator_group| manipulator_group.id == id) - } - - /// Access the index of a [ManipulatorGroup] from a PointId. - pub fn manipulator_index_from_id(&self, id: PointId) -> Option { - self.manipulator_groups.iter().position(|manipulator_group| manipulator_group.id == id) - } - - /// Insert a manipulator group at an index. - pub fn insert_manipulator_group(&mut self, index: usize, group: ManipulatorGroup) { - assert!(group.is_finite(), "Inserting non finite manipulator group"); - self.manipulator_groups.insert(index, group) - } - - /// Push a manipulator group to the end. - pub fn push_manipulator_group(&mut self, group: ManipulatorGroup) { - assert!(group.is_finite(), "Pushing non finite manipulator group"); - self.manipulator_groups.push(group) - } - - /// Get a mutable reference to the last manipulator - pub fn last_manipulator_group_mut(&mut self) -> Option<&mut ManipulatorGroup> { - self.manipulator_groups.last_mut() - } - - /// Remove a manipulator group at an index. - pub fn remove_manipulator_group(&mut self, index: usize) -> ManipulatorGroup { - self.manipulator_groups.remove(index) - } - - /// Inserts a `ManipulatorGroup` at a certain point along the subpath based on the parametric `t`-value provided. - /// Expects `t` to be within the inclusive range `[0, 1]`. - pub fn insert(&mut self, t: SubpathTValue) { - let (segment_index, t) = self.t_value_to_parametric(t); - - if f64_compare(t, 0., MAX_ABSOLUTE_DIFFERENCE) || f64_compare(t, 1., MAX_ABSOLUTE_DIFFERENCE) { - return; - } - - // The only case where `curve` would be `None` is if the provided argument was 1 - // But the above if case would catch that, since `target_curve_t` would be 0. - let curve = self.iter().nth(segment_index).unwrap(); - - let [first, second] = curve.split(TValue::Parametric(t)); - let new_group = ManipulatorGroup { - anchor: first.end(), - in_handle: first.handle_end(), - out_handle: second.handle_start(), - id: PointId::new(), - }; - let number_of_groups = self.manipulator_groups.len() + 1; - self.manipulator_groups.insert((segment_index) + 1, new_group); - self.manipulator_groups[segment_index % number_of_groups].out_handle = first.handle_start(); - self.manipulator_groups[(segment_index + 2) % number_of_groups].in_handle = second.handle_end(); - } - - /// Append a [Bezier] to the end of a subpath from a vector of [Bezier]. - /// The `append_type` parameter determines how the function behaves when the subpath's last anchor is not equal to the Bezier's start point. - /// - `IgnoreStart`: drops the bezier's start point in favor of the subpath's last anchor - /// - `SmoothJoin(f64)`: joins the subpath's endpoint with the bezier's start with a another Bezier segment that is continuous up to the second derivative - /// if the difference between the subpath's end point and Bezier's start point exceeds the wrapped integer value. - /// - /// This function assumes that the position of the [Bezier]'s starting point is equal to that of the Subpath's last manipulator group. - pub fn append_bezier(&mut self, bezier: &Bezier, append_type: AppendType) { - if self.manipulator_groups.is_empty() { - self.manipulator_groups = vec![ManipulatorGroup { - anchor: bezier.start(), - in_handle: None, - out_handle: None, - id: PointId::new(), - }]; - } - let mut last_index = self.manipulator_groups.len() - 1; - let last_anchor = self.manipulator_groups[last_index].anchor; - - if let AppendType::SmoothJoin(max_absolute_difference) = append_type { - // If the provided Bezier does not start at a location similar to the end of the Subpath, - // add an additional manipulator group to represent a smooth join with a new bezier in between - if !last_anchor.abs_diff_eq(bezier.start(), max_absolute_difference) { - let last_bezier = if self.manipulator_groups.len() > 1 { - self.manipulator_groups[last_index - 1].to_bezier(&self.manipulator_groups[last_index]) - } else { - Bezier::from_linear_dvec2(last_anchor, last_anchor) - }; - let join_bezier = last_bezier.join(bezier); - self.append_bezier(&join_bezier, AppendType::IgnoreStart); - last_index = self.manipulator_groups.len() - 1; - } - } - self.manipulator_groups[last_index].out_handle = bezier.handle_start(); - self.manipulator_groups.push(ManipulatorGroup { - anchor: bezier.end(), - in_handle: bezier.handle_end(), - out_handle: None, - id: PointId::new(), - }); - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::utils::SubpathTValue; - use glam::DVec2; - - fn set_up_open_subpath() -> Subpath { - let start = DVec2::new(20., 30.); - let middle1 = DVec2::new(80., 90.); - let middle2 = DVec2::new(100., 100.); - let end = DVec2::new(60., 45.); - - let handle1 = DVec2::new(75., 85.); - let handle2 = DVec2::new(40., 30.); - let handle3 = DVec2::new(10., 10.); - - Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle1, - in_handle: None, - out_handle: Some(handle2), - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle2, - in_handle: None, - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: Some(handle3), - id: EmptyId, - }, - ], - false, - ) - } - - fn set_up_closed_subpath() -> Subpath { - let mut subpath = set_up_open_subpath(); - subpath.closed = true; - subpath - } - - #[test] - fn insert_in_first_segment_of_open_subpath() { - let mut subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let split_pair = subpath.iter().next().unwrap().split(TValue::Parametric((0.2 * 3.) % 1.)); - subpath.insert(SubpathTValue::GlobalParametric(0.2)); - assert_eq!(subpath.manipulator_groups[1].anchor, location); - assert_eq!(split_pair[0], subpath.iter().next().unwrap()); - assert_eq!(split_pair[1], subpath.iter().nth(1).unwrap()); - } - - #[test] - fn insert_in_last_segment_of_open_subpath() { - let mut subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.9)); - let split_pair = subpath.iter().nth(2).unwrap().split(TValue::Parametric((0.9 * 3.) % 1.)); - subpath.insert(SubpathTValue::GlobalParametric(0.9)); - assert_eq!(subpath.manipulator_groups[3].anchor, location); - assert_eq!(split_pair[0], subpath.iter().nth(2).unwrap()); - assert_eq!(split_pair[1], subpath.iter().nth(3).unwrap()); - } - - #[test] - fn insert_at_existing_manipulator_group_of_open_subpath() { - // This will do nothing to the subpath - let mut subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.75)); - subpath.insert(SubpathTValue::GlobalParametric(0.75)); - assert_eq!(subpath.manipulator_groups[3].anchor, location); - assert_eq!(subpath.manipulator_groups.len(), 5); - assert_eq!(subpath.len_segments(), 4); - } - - #[test] - fn insert_at_last_segment_of_closed_subpath() { - let mut subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.9)); - let split_pair = subpath.iter().nth(3).unwrap().split(TValue::Parametric((0.9 * 4.) % 1.)); - subpath.insert(SubpathTValue::GlobalParametric(0.9)); - assert_eq!(subpath.manipulator_groups[4].anchor, location); - assert_eq!(split_pair[0], subpath.iter().nth(3).unwrap()); - assert_eq!(split_pair[1], subpath.iter().nth(4).unwrap()); - assert!(subpath.closed); - } - - #[test] - fn insert_at_last_manipulator_group_of_closed_subpath() { - // This will do nothing to the subpath - let mut subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - subpath.insert(SubpathTValue::GlobalParametric(1.)); - assert_eq!(subpath.manipulator_groups[0].anchor, location); - assert_eq!(subpath.manipulator_groups.len(), 4); - assert!(subpath.closed); - } -} diff --git a/libraries/bezier-rs/src/subpath/solvers.rs b/libraries/bezier-rs/src/subpath/solvers.rs deleted file mode 100644 index d3558fc22d..0000000000 --- a/libraries/bezier-rs/src/subpath/solvers.rs +++ /dev/null @@ -1,1067 +0,0 @@ -use super::*; -use crate::TValue; -use crate::consts::MAX_ABSOLUTE_DIFFERENCE; -use crate::utils::{SubpathTValue, compute_circular_subpath_details, is_rectangle_inside_other, line_intersection}; -use glam::{DAffine2, DMat2, DVec2}; -use std::f64::consts::PI; - -impl Subpath { - /// Calculate the point on the subpath based on the parametric `t`-value provided. - /// Expects `t` to be within the inclusive range `[0, 1]`. - /// - pub fn evaluate(&self, t: SubpathTValue) -> DVec2 { - let (segment_index, t) = self.t_value_to_parametric(t); - self.get_segment(segment_index).unwrap().evaluate(TValue::Parametric(t)) - } - - /// Calculates the intersection points the subpath has with a given curve and returns a list of `(usize, f64)` tuples, - /// where the `usize` represents the index of the curve in the subpath, and the `f64` represents the `t`-value local to - /// that curve where the intersection occurred. - /// Expects the following: - /// - `other`: a [Bezier] curve to check intersections against - /// - `error`: an optional f64 value to provide an error bound - /// - `minimum_separation`: the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two. - /// - /// - /// - /// - /// - pub fn intersections(&self, other: &Bezier, error: Option, minimum_separation: Option) -> Vec<(usize, f64)> { - self.iter() - .enumerate() - .flat_map(|(index, bezier)| bezier.intersections(other, error, minimum_separation).into_iter().map(|t| (index, t)).collect::>()) - .collect() - } - - /// Calculates the intersection points the subpath has with another given subpath and returns a list of global parametric `t`-values. - /// This function expects the following: - /// - other: a [Bezier] curve to check intersections against - /// - error: an optional f64 value to provide an error bound - pub fn subpath_intersections(&self, other: &Subpath, error: Option, minimum_separation: Option) -> Vec<(usize, f64)> { - let mut intersection_t_values: Vec<(usize, f64)> = other.iter().flat_map(|bezier| self.intersections(&bezier, error, minimum_separation)).collect(); - intersection_t_values.sort_by(|a, b| a.partial_cmp(b).unwrap()); - intersection_t_values - } - - /// Returns how many times a given ray intersects with this subpath. (`ray_direction` does not need to be normalized.) - /// If this needs to be called frequently with a ray of the same rotation angle, consider instead using [`ray_test_crossings_count_prerotated`]. - pub fn ray_test_crossings_count(&self, ray_start: DVec2, ray_direction: DVec2) -> usize { - self.iter().map(|bezier| bezier.ray_test_crossings(ray_start, ray_direction).count()).sum() - } - - /// Returns how many times a given ray intersects with this subpath. (`ray_direction` does not need to be normalized.) - /// This version of the function is for better performance when calling it frequently without needing to change the rotation between each call. - /// If that isn't important, use [`ray_test_crossings_count`] which provides an easier interface by taking a ray direction vector. - /// Instead, this version requires a rotation matrix for the ray's rotation and a prerotated version of this subpath that has had its rotation applied. - pub fn ray_test_crossings_count_prerotated(&self, ray_start: DVec2, rotation_matrix: DMat2, rotated_subpath: &Self) -> usize { - self.iter() - .zip(rotated_subpath.iter()) - .map(|(bezier, rotated_bezier)| bezier.ray_test_crossings_prerotated(ray_start, rotation_matrix, rotated_bezier).count()) - .sum() - } - - /// Returns true if the given point is inside this subpath. Open paths are NOT automatically closed so you'll need to call `set_closed(true)` before calling this. - /// Self-intersecting subpaths use the `evenodd` fill rule for checking in/outside-ness: . - /// If this needs to be called frequently, consider instead using [`point_inside_prerotated`] and moving this function's setup code into your own logic before the repeated call. - pub fn point_inside(&self, point: DVec2) -> bool { - // The directions use prime numbers to reduce the likelihood of running across two anchor points simultaneously - const SIN_13DEG: f64 = 0.22495105434; - const COS_13DEG: f64 = 0.97437006478; - const DIRECTION1: DVec2 = DVec2::new(SIN_13DEG, COS_13DEG); - const DIRECTION2: DVec2 = DVec2::new(-COS_13DEG, -SIN_13DEG); - - // We (inefficiently) check for odd crossings in two directions and make sure they agree to reduce how often anchor points cause a double-increment - let test1 = self.ray_test_crossings_count(point, DIRECTION1) % 2 == 1; - let test2 = self.ray_test_crossings_count(point, DIRECTION2) % 2 == 1; - - test1 && test2 - } - - /// Returns true if the given point is inside this subpath. Open paths are NOT automatically closed so you'll need to call `set_closed(true)` before calling this. - /// Self-intersecting subpaths use the `evenodd` fill rule for checking in/outside-ness: . - /// This version of the function is for better performance when calling it frequently because it lets the caller precompute the rotations once instead of every call. - /// If that isn't important, use [`point_inside`] which provides an easier interface. - /// Instead, this version requires a pair of rotation matrices for the ray's rotation and a pair of prerotated versions of this subpath. - /// They should face in different directions that are unlikely to align in the real world. Consider using the following rotations: - /// ```rs - /// const SIN_13DEG: f64 = 0.22495105434; - /// const COS_13DEG: f64 = 0.97437006478; - /// const DIRECTION1: DVec2 = DVec2::new(SIN_13DEG, COS_13DEG); - /// const DIRECTION2: DVec2 = DVec2::new(-COS_13DEG, -SIN_13DEG); - /// ``` - pub fn point_inside_prerotated(&self, point: DVec2, rotation_matrix1: DMat2, rotation_matrix2: DMat2, rotated_subpath1: &Self, rotated_subpath2: &Self) -> bool { - // We (inefficiently) check for odd crossings in two directions and make sure they agree to reduce how often anchor points cause a double-increment - let test1 = self.ray_test_crossings_count_prerotated(point, rotation_matrix1, rotated_subpath1) % 2 == 1; - let test2 = self.ray_test_crossings_count_prerotated(point, rotation_matrix2, rotated_subpath2) % 2 == 1; - - test1 && test2 - } - - /// Computes the winding number contribution of the subpath. - pub fn winding_order(&self, point: DVec2) -> i32 { - self.iter().map(|segment| segment.winding(point)).sum() - } - - /// Returns a list of `t` values that correspond to the self intersection points of the subpath. For each intersection point, the returned `t` value is the smaller of the two that correspond to the point. - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation`: the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - /// - pub fn self_intersections(&self, error: Option, minimum_separation: Option) -> Vec<(usize, f64)> { - let mut intersections_vec = Vec::new(); - let err = error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE); - // TODO: optimization opportunity - this for-loop currently compares all intersections with all curve-segments in the subpath collection - self.iter().enumerate().for_each(|(i, other)| { - intersections_vec.extend(other.self_intersections(error, minimum_separation).iter().map(|value| (i, value[0]))); - self.iter().enumerate().skip(i + 1).for_each(|(j, curve)| { - intersections_vec.extend( - curve - .intersections(&other, error, minimum_separation) - .iter() - .filter(|&value| value > &err && (1. - value) > err) - .map(|value| (j, *value)), - ); - }); - }); - intersections_vec - } - - /// Returns a list of `t` values that correspond to all the self intersection points of the subpath always considering it as a closed subpath. The index and `t` value of both will be returned that corresponds to a point. - /// The points will be sorted based on their index and `t` repsectively. - /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. - /// - `minimum_separation`: the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two - /// - /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. - pub fn all_self_intersections(&self, error: Option, minimum_separation: Option) -> Vec<(usize, f64)> { - let mut intersections_vec = Vec::new(); - let err = error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE); - let num_curves = self.len(); - // TODO: optimization opportunity - this for-loop currently compares all intersections with all curve-segments in the subpath collection - self.iter_closed().enumerate().for_each(|(i, other)| { - intersections_vec.extend(other.self_intersections(error, minimum_separation).iter().flat_map(|value| [(i, value[0]), (i, value[1])])); - self.iter_closed().enumerate().skip(i + 1).for_each(|(j, curve)| { - intersections_vec.extend( - curve - .all_intersections(&other, error, minimum_separation) - .iter() - .filter(|&value| (j != i + 1 || value[0] > err || (1. - value[1]) > err) && (j != num_curves - 1 || i != 0 || value[1] > err || (1. - value[0]) > err)) - .flat_map(|value| [(j, value[0]), (i, value[1])]), - ); - }); - }); - - intersections_vec.sort_by(|a, b| a.partial_cmp(b).unwrap()); - - intersections_vec - } - - /// Calculates the intersection points the subpath has with a given rectangle and returns a list of `(usize, f64)` tuples, - /// where the `usize` represents the index of the curve in the subpath, and the `f64` represents the `t`-value local to - /// that curve where the intersection occurred. - /// Expects the following: - /// - `corner1`: any corner of the axis-aligned box to intersect with - /// - `corner2`: the corner opposite to `corner1` - /// - `error`: an optional f64 value to provide an error bound - /// - `minimum_separation`: the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. - /// - /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two. - /// - pub fn rectangle_intersections(&self, corner1: DVec2, corner2: DVec2, error: Option, minimum_separation: Option) -> Vec<(usize, f64)> { - [ - Bezier::from_linear_coordinates(corner1.x, corner1.y, corner2.x, corner1.y), - Bezier::from_linear_coordinates(corner2.x, corner1.y, corner2.x, corner2.y), - Bezier::from_linear_coordinates(corner2.x, corner2.y, corner1.x, corner2.y), - Bezier::from_linear_coordinates(corner1.x, corner2.y, corner1.x, corner1.y), - ] - .iter() - .flat_map(|bezier| self.intersections(bezier, error, minimum_separation)) - .collect() - } - - /// Checks if any intersections exist between this subpath and the four edges of the rectangle defined by the top-left `corner1` and bottom-right `corner2`. - /// This is faster than calling [`rectangle_intersections`]`.len()` because it short-circuits as soon as an intersection is found. - pub fn rectangle_intersections_exist(&self, corner1: DVec2, corner2: DVec2) -> bool { - let rotate_by_90deg = |point| DMat2::from_angle(std::f64::consts::FRAC_PI_2) * point; - - for bezier in self.iter() { - // Check that the two bounding boxes don't intersect, since we can avoid doing intersection's cubic root finding in that case - let [bezier_corner1, bezier_corner2] = bezier.bounding_box_of_anchors_and_handles(); - if !(((corner1.x < bezier_corner1.x) && (bezier_corner1.x < corner2.x) || (corner1.x < bezier_corner2.x) && (bezier_corner2.x < corner2.x)) - && corner1.y < bezier_corner2.y - && corner2.y > bezier_corner1.y - || ((corner1.y < bezier_corner1.y) && (bezier_corner1.y < corner2.y) || (corner1.y < bezier_corner2.y) && (bezier_corner2.y < corner2.y)) - && corner1.x < bezier_corner2.x - && corner2.x > bezier_corner1.x) - { - continue; - } - - // Original rotation axis - if bezier.line_test_crossings_prerotated(corner1, DMat2::IDENTITY, bezier).any(|intersection_point| { - let (_, y) = bezier.unrestricted_parametric_evaluate(intersection_point).into(); - y >= corner1.y && y <= corner2.y - }) { - return true; - } - if bezier.line_test_crossings_prerotated(corner2, DMat2::IDENTITY, bezier).any(|intersection_point| { - let (_, y) = bezier.unrestricted_parametric_evaluate(intersection_point).into(); - y >= corner1.y && y <= corner2.y - }) { - return true; - } - - // Perpendicular to original rotation axis - let rotated_bezier = bezier.apply_transformation(rotate_by_90deg); - if bezier.line_test_crossings_prerotated(corner1, DMat2::IDENTITY, rotated_bezier).any(|intersection_point| { - let (x, _) = bezier.unrestricted_parametric_evaluate(intersection_point).into(); - x >= corner1.x && x <= corner2.x - }) { - return true; - } - if bezier.line_test_crossings_prerotated(corner2, DMat2::IDENTITY, rotated_bezier).any(|intersection_point| { - let (x, _) = bezier.unrestricted_parametric_evaluate(intersection_point).into(); - x >= corner1.x && x <= corner2.x - }) { - return true; - } - } - - false - } - - /// Returns `true` if this subpath is completely inside the `other` subpath. - /// - pub fn is_inside_subpath(&self, other: &Subpath, error: Option, minimum_separation: Option) -> bool { - // Eliminate any possibility of one being inside the other, if either of them is empty - if self.is_empty() || other.is_empty() { - return false; - } - - // Safe to unwrap because the subpath is not empty - let inner_bbox = self.bounding_box().unwrap(); - let outer_bbox = other.bounding_box().unwrap(); - - // Eliminate this subpath if its bounding box is not completely inside the other subpath's bounding box. - // Reasoning: - // If the (min x, min y) of the inner subpath is less than or equal to the (min x, min y) of the outer subpath, - // or if the (min x, min y) of the inner subpath is greater than or equal to the (max x, max y) of the outer subpath, - // then the inner subpath is intersecting with or outside the outer subpath. The same logic applies for (max x, max y). - if !is_rectangle_inside_other(inner_bbox, outer_bbox) { - return false; - } - - // Eliminate this subpath if any of its anchors are outside the other subpath. - for anchors in self.anchors() { - if !other.contains_point(anchors) { - return false; - } - } - - // Eliminate this subpath if it intersects with the other subpath. - if !self.subpath_intersections(other, error, minimum_separation).is_empty() { - return false; - } - - // At this point: - // (1) This subpath's bounding box is inside the other subpath's bounding box, - // (2) Its anchors are inside the other subpath, and - // (3) It is not intersecting with the other subpath. - // Hence, this subpath is completely inside the given other subpath. - true - } - - /// Returns a normalized unit vector representing the tangent on the subpath based on the parametric `t`-value provided. - /// - pub fn tangent(&self, t: SubpathTValue) -> DVec2 { - let (segment_index, t) = self.t_value_to_parametric(t); - self.get_segment(segment_index).unwrap().tangent(TValue::Parametric(t)) - } - - /// Returns a normalized unit vector representing the direction of the normal on the subpath based on the parametric `t`-value provided. - /// - pub fn normal(&self, t: SubpathTValue) -> DVec2 { - let (segment_index, t) = self.t_value_to_parametric(t); - self.get_segment(segment_index).unwrap().normal(TValue::Parametric(t)) - } - - /// Returns two lists of `t`-values representing the local extrema of the `x` and `y` parametric subpaths respectively. - /// The list of `t`-values returned are filtered such that they fall within the range `[0, 1]`. - /// - pub fn local_extrema(&self) -> [Vec; 2] { - let number_of_curves = self.len_segments() as f64; - - // TODO: Consider the shared point between adjacent beziers. - self.iter().enumerate().fold([Vec::new(), Vec::new()], |mut acc, elem| { - let [x, y] = elem.1.local_extrema(); - // Convert t-values of bezier curve to t-values of subpath - acc[0].extend(x.map(|t| ((elem.0 as f64) + t) / number_of_curves).collect::>()); - acc[1].extend(y.map(|t| ((elem.0 as f64) + t) / number_of_curves).collect::>()); - acc - }) - } - - /// Return the min and max corners that represent the bounding box of the subpath. Return `None` if the subpath is empty. - /// - pub fn bounding_box(&self) -> Option<[DVec2; 2]> { - self.iter().map(|bezier| bezier.bounding_box()).reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Return the min and max corners that represent the bounding box of the subpath, after a given affine transform. - pub fn bounding_box_with_transform(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> { - self.iter() - .map(|bezier| bezier.apply_transformation(|v| transform.transform_point2(v)).bounding_box()) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Return the min and max corners that represent the loose bounding box of the subpath (bounding box of all handles and anchors). - pub fn loose_bounding_box(&self) -> Option<[DVec2; 2]> { - self.manipulator_groups - .iter() - .flat_map(|group| [group.in_handle, group.out_handle, Some(group.anchor)]) - .flatten() - .map(|pos| [pos, pos]) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Return the min and max corners that represent the loose bounding box of the subpath, after a given affine transform. - pub fn loose_bounding_box_with_transform(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> { - self.manipulator_groups - .iter() - .flat_map(|group| [group.in_handle, group.out_handle, Some(group.anchor)]) - .flatten() - .map(|pos| transform.transform_point2(pos)) - .map(|pos| [pos, pos]) - .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) - } - - /// Returns list of `t`-values representing the inflection points of the subpath. - /// The list of `t`-values returned are filtered such that they fall within the range `[0, 1]`. - /// - pub fn inflections(&self) -> Vec { - let number_of_curves = self.len_segments() as f64; - let inflection_t_values: Vec = self - .iter() - .enumerate() - .flat_map(|(index, bezier)| { - bezier - .inflections() - .into_iter() - // Convert t-values of bezier curve to t-values of subpath - .map(move |t| ((index as f64) + t) / number_of_curves) - }) - .collect(); - - // TODO: Consider the shared point between adjacent beziers. - inflection_t_values - } - - /// Does a path contain a point? Based on the non zero winding - pub fn contains_point(&self, target_point: DVec2) -> bool { - self.iter().map(|bezier| bezier.winding(target_point)).sum::() != 0 - } - - /// Does a path contain a point? Based on the non zero winding. Automatically adds a linear segment if the subpath is not closed. - pub fn contains_point_autoclose(&self, target_point: DVec2) -> bool { - let mut winding = self.iter().map(|bezier| bezier.winding(target_point)).sum::(); - if !self.closed { - if let [Some(first), Some(last)] = [self.manipulator_groups.first(), self.manipulator_groups.last()] { - winding += Bezier::from_linear_dvec2(first.anchor, last.anchor).winding(target_point); - } - } - - winding != 0 - } - - /// Randomly places points across the filled surface of this subpath (which is assumed to be closed). - /// The `separation_disk_diameter` determines the minimum distance between all points from one another. - /// Conceptually, this works by "throwing a dart" at the subpath's bounding box and keeping the dart only if: - /// - It's inside the shape - /// - It's not closer than `separation_disk_diameter` to any other point from a previous accepted dart throw - /// - /// This repeats until accepted darts fill all possible areas between one another. - /// - /// While the conceptual process described above asymptotically slows down and is never guaranteed to produce a maximal set in finite time, - /// this is implemented with an algorithm that produces a maximal set in O(n) time. The slowest part is actually checking if points are inside the subpath shape. - pub fn poisson_disk_points(&self, separation_disk_diameter: f64, rng: impl FnMut() -> f64, subpaths: &[(Self, [DVec2; 2])], subpath_index: usize) -> Vec { - let Some(bounding_box) = self.bounding_box() else { return Vec::new() }; - let (offset_x, offset_y) = bounding_box[0].into(); - let (width, height) = (bounding_box[1] - bounding_box[0]).into(); - - // TODO: Optimize the following code and make it more robust - - let mut shape = self.clone(); - shape.set_closed(true); - shape.apply_transform(DAffine2::from_translation((-offset_x, -offset_y).into())); - - let point_in_shape_checker = |point: DVec2| { - // Check against all paths the point is contained in to compute the correct winding number - let mut number = 0; - for (i, (shape, bb)) in subpaths.iter().enumerate() { - let point = point + bounding_box[0]; - if bb[0].x > point.x || bb[0].y > point.y || bb[1].x < point.x || bb[1].y < point.y { - continue; - } - let winding = shape.winding_order(point); - - if i == subpath_index && winding == 0 { - return false; - } - number += winding; - } - number != 0 - }; - - let square_edges_intersect_shape_checker = |corner1: DVec2, size: f64| { - let corner2 = corner1 + DVec2::splat(size); - self.rectangle_intersections_exist(corner1, corner2) - }; - - let mut points = crate::poisson_disk::poisson_disk_sample(width, height, separation_disk_diameter, point_in_shape_checker, square_edges_intersect_shape_checker, rng); - for point in &mut points { - point.x += offset_x; - point.y += offset_y; - } - points - } - - /// Returns the manipulator point that is needed for a miter join if it is possible. - /// - `miter_limit`: Defines a limit for the ratio between the miter length and the stroke width. - /// - /// Alternatively, this can be interpreted as limiting the angle that the miter can form. - /// When the limit is exceeded, no manipulator group will be returned. - /// This value should be greater than 0. If not, the default of 4 will be used. - pub fn miter_line_join(&self, other: &Subpath, miter_limit: Option) -> Option> { - let miter_limit = match miter_limit { - Some(miter_limit) if miter_limit > f64::EPSILON => miter_limit, - _ => 4., - }; - // TODO: Besides returning None using the `?` operator, is there a more appropriate way to handle a `None` result from `get_segment`? - let in_segment = self.get_segment(self.len_segments().checked_sub(1)?)?; - let out_segment = other.get_segment(0)?; - - let in_tangent = in_segment.tangent(TValue::Parametric(1.)); - let out_tangent = out_segment.tangent(TValue::Parametric(0.)); - - if in_tangent == DVec2::ZERO || out_tangent == DVec2::ZERO { - // Avoid panic from normalizing zero vectors - // TODO: Besides returning None, is there a more appropriate way to handle this? - return None; - } - let normalized_in_tangent = in_tangent.normalize(); - let normalized_out_tangent = out_tangent.normalize(); - - // The tangents must not be parallel for the miter join - if !normalized_in_tangent.abs_diff_eq(normalized_out_tangent, MAX_ABSOLUTE_DIFFERENCE) && !normalized_in_tangent.abs_diff_eq(-normalized_out_tangent, MAX_ABSOLUTE_DIFFERENCE) { - let intersection = line_intersection(in_segment.end(), in_tangent, out_segment.start(), out_tangent); - - let start_to_intersection = intersection - in_segment.end(); - let intersection_to_end = out_segment.start() - intersection; - if start_to_intersection == DVec2::ZERO || intersection_to_end == DVec2::ZERO { - // Avoid panic from normalizing zero vectors - // TODO: Besides returning None, is there a more appropriate way to handle this? - return None; - } - - // Draw the miter join if the intersection occurs in the correct direction with respect to the path - if start_to_intersection.normalize().abs_diff_eq(in_tangent, MAX_ABSOLUTE_DIFFERENCE) - && intersection_to_end.normalize().abs_diff_eq(out_tangent, MAX_ABSOLUTE_DIFFERENCE) - && miter_limit > f64::EPSILON / (start_to_intersection.angle_to(-intersection_to_end).abs() / 2.).sin() - { - return Some(ManipulatorGroup { - anchor: intersection, - in_handle: None, - out_handle: None, - id: PointId::new(), - }); - } - } - // If we can't draw the miter join, default to a bevel join - None - } - - /// Returns the necessary information to create a round join with the provided center. - /// The returned items correspond to: - /// - The `out_handle` for the last manipulator group of `self` - /// - The new manipulator group to be added - /// - The `in_handle` for the first manipulator group of `other` - pub fn round_line_join(&self, other: &Subpath, center: DVec2) -> (DVec2, ManipulatorGroup, DVec2) { - let left = self.manipulator_groups[self.len() - 1].anchor; - let right = other.manipulator_groups[0].anchor; - - let center_to_right = right - center; - let center_to_left = left - center; - - let in_segment = self.len_segments().checked_sub(1).and_then(|segment| self.get_segment(segment)); - let in_tangent = in_segment.map(|in_segment| in_segment.tangent(TValue::Parametric(1.))); - - let mut angle = center_to_right.angle_to(center_to_left) / 2.; - let mut arc_point = center + DMat2::from_angle(angle).mul_vec2(center_to_right); - - if in_tangent.map(|in_tangent| (arc_point - left).angle_to(in_tangent).abs()).unwrap_or_default() > PI / 2. { - angle = angle - PI * (if angle < 0. { -1. } else { 1. }); - arc_point = center + DMat2::from_angle(angle).mul_vec2(center_to_right); - } - - compute_circular_subpath_details(left, arc_point, right, center, Some(angle)) - } - - /// Returns the necessary information to create a round cap between the end of `self` and the beginning of `other`. - /// The returned items correspond to: - /// - The `out_handle` for the last manipulator group of `self` - /// - The new manipulator group to be added - /// - The `in_handle` for the first manipulator group of `other` - pub(crate) fn round_cap(&self, other: &Subpath) -> (DVec2, ManipulatorGroup, DVec2) { - let left = self.manipulator_groups[self.len() - 1].anchor; - let right = other.manipulator_groups[0].anchor; - - let center = (right + left) / 2.; - let center_to_right = right - center; - - let arc_point = center + center_to_right.perp(); - - compute_circular_subpath_details(left, arc_point, right, center, None) - } - - /// Returns the two manipulator groups that create a square cap between the end of `self` and the beginning of `other`. - pub(crate) fn square_cap(&self, other: &Subpath) -> [ManipulatorGroup; 2] { - let left = self.manipulator_groups[self.len() - 1].anchor; - let right = other.manipulator_groups[0].anchor; - - let center = (right + left) / 2.; - let center_to_right = right - center; - - let translation = center_to_right.perp(); - - [ManipulatorGroup::new_anchor(left + translation), ManipulatorGroup::new_anchor(right + translation)] - } - - /// Returns the curvature, a scalar value for the derivative at the point `t` along the subpath. - /// Curvature is 1 over the radius of a circle with an equivalent derivative. - /// - pub fn curvature(&self, t: SubpathTValue) -> f64 { - let (segment_index, t) = self.t_value_to_parametric(t); - self.get_segment(segment_index).unwrap().curvature(TValue::Parametric(t)) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::Bezier; - use crate::consts::MAX_ABSOLUTE_DIFFERENCE; - use crate::utils; - use glam::DVec2; - - fn normalize_t(n: i64, t: f64) -> f64 { - t * (n as f64) % 1. - } - - #[test] - fn evaluate_one_subpath_curve() { - let start = DVec2::new(20., 30.); - let end = DVec2::new(60., 45.); - let handle = DVec2::new(75., 85.); - - let bezier = Bezier::from_quadratic_dvec2(start, handle, end); - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: Some(handle), - id: EmptyId, - }, - ], - false, - ); - - let t0 = 0.; - assert_eq!(subpath.evaluate(SubpathTValue::GlobalParametric(t0)), bezier.evaluate(TValue::Parametric(t0))); - - let t1 = 0.25; - assert_eq!(subpath.evaluate(SubpathTValue::GlobalParametric(t1)), bezier.evaluate(TValue::Parametric(t1))); - - let t2 = 0.50; - assert_eq!(subpath.evaluate(SubpathTValue::GlobalParametric(t2)), bezier.evaluate(TValue::Parametric(t2))); - - let t3 = 1.; - assert_eq!(subpath.evaluate(SubpathTValue::GlobalParametric(t3)), bezier.evaluate(TValue::Parametric(t3))); - } - - #[test] - fn evaluate_multiple_subpath_curves() { - let start = DVec2::new(20., 30.); - let middle = DVec2::new(70., 70.); - let end = DVec2::new(60., 45.); - let handle1 = DVec2::new(75., 85.); - let handle2 = DVec2::new(40., 30.); - let handle3 = DVec2::new(10., 10.); - - let linear_bezier = Bezier::from_linear_dvec2(start, middle); - let quadratic_bezier = Bezier::from_quadratic_dvec2(middle, handle1, end); - let cubic_bezier = Bezier::from_cubic_dvec2(end, handle2, handle3, start); - - let mut subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: Some(handle3), - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle, - in_handle: None, - out_handle: Some(handle1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: Some(handle2), - id: EmptyId, - }, - ], - false, - ); - - // Test open subpath - - let mut n = (subpath.len() as i64) - 1; - - let t0 = 0.; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t0)), - linear_bezier.evaluate(TValue::Parametric(normalize_t(n, t0))), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - let t1 = 0.25; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t1)), - linear_bezier.evaluate(TValue::Parametric(normalize_t(n, t1))), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - let t2 = 0.50; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t2)), - quadratic_bezier.evaluate(TValue::Parametric(normalize_t(n, t2))), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - let t3 = 0.75; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t3)), - quadratic_bezier.evaluate(TValue::Parametric(normalize_t(n, t3))), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - let t4 = 1.; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t4)), - quadratic_bezier.evaluate(TValue::Parametric(1.)), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - // Test closed subpath - - subpath.closed = true; - n = subpath.len() as i64; - - let t5 = 2. / 3.; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t5)), - cubic_bezier.evaluate(TValue::Parametric(normalize_t(n, t5))), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - let t6 = 1.; - assert!( - utils::dvec2_compare( - subpath.evaluate(SubpathTValue::GlobalParametric(t6)), - cubic_bezier.evaluate(TValue::Parametric(1.)), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - } - - #[test] - fn intersection_linear_multiple_subpath_curves_test_one() { - // M 35 125 C 40 40 120 120 43 43 Q 175 90 145 150 Q 70 185 35 125 Z - - let cubic_start = DVec2::new(35., 125.); - let cubic_handle_1 = DVec2::new(40., 40.); - let cubic_handle_2 = DVec2::new(120., 120.); - let cubic_end = DVec2::new(43., 43.); - - let quadratic_1_handle = DVec2::new(175., 90.); - let quadratic_end = DVec2::new(145., 150.); - - let quadratic_2_handle = DVec2::new(70., 185.); - - let cubic_bezier = Bezier::from_cubic_dvec2(cubic_start, cubic_handle_1, cubic_handle_2, cubic_end); - let quadratic_bezier_1 = Bezier::from_quadratic_dvec2(cubic_end, quadratic_1_handle, quadratic_end); - - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: cubic_start, - in_handle: None, - out_handle: Some(cubic_handle_1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: cubic_end, - in_handle: Some(cubic_handle_2), - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: quadratic_end, - in_handle: Some(quadratic_1_handle), - out_handle: Some(quadratic_2_handle), - id: EmptyId, - }, - ], - true, - ); - - let line = Bezier::from_linear_coordinates(150., 150., 20., 20.); - - let cubic_intersections = cubic_bezier.intersections(&line, None, None); - let quadratic_1_intersections = quadratic_bezier_1.intersections(&line, None, None); - let subpath_intersections = subpath.intersections(&line, None, None); - - assert!( - utils::dvec2_compare( - cubic_bezier.evaluate(TValue::Parametric(cubic_intersections[0])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[0].0, - t: subpath_intersections[0].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - assert!( - utils::dvec2_compare( - quadratic_bezier_1.evaluate(TValue::Parametric(quadratic_1_intersections[0])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[1].0, - t: subpath_intersections[1].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - assert!( - utils::dvec2_compare( - quadratic_bezier_1.evaluate(TValue::Parametric(quadratic_1_intersections[1])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[2].0, - t: subpath_intersections[2].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - } - - #[test] - fn intersection_linear_multiple_subpath_curves_test_two() { - // M34 107 C40 40 120 120 102 29 Q175 90 129 171 Q70 185 34 107 Z - // M150 150 L 20 20 - - let cubic_start = DVec2::new(34., 107.); - let cubic_handle_1 = DVec2::new(40., 40.); - let cubic_handle_2 = DVec2::new(120., 120.); - let cubic_end = DVec2::new(102., 29.); - - let quadratic_1_handle = DVec2::new(175., 90.); - let quadratic_end = DVec2::new(129., 171.); - - let quadratic_2_handle = DVec2::new(70., 185.); - - let cubic_bezier = Bezier::from_cubic_dvec2(cubic_start, cubic_handle_1, cubic_handle_2, cubic_end); - let quadratic_bezier_1 = Bezier::from_quadratic_dvec2(cubic_end, quadratic_1_handle, quadratic_end); - - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: cubic_start, - in_handle: None, - out_handle: Some(cubic_handle_1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: cubic_end, - in_handle: Some(cubic_handle_2), - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: quadratic_end, - in_handle: Some(quadratic_1_handle), - out_handle: Some(quadratic_2_handle), - id: EmptyId, - }, - ], - true, - ); - - let line = Bezier::from_linear_coordinates(150., 150., 20., 20.); - - let cubic_intersections = cubic_bezier.intersections(&line, None, None); - let quadratic_1_intersections = quadratic_bezier_1.intersections(&line, None, None); - let subpath_intersections = subpath.intersections(&line, None, None); - - assert!( - utils::dvec2_compare( - cubic_bezier.evaluate(TValue::Parametric(cubic_intersections[0])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[0].0, - t: subpath_intersections[0].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - assert!( - utils::dvec2_compare( - quadratic_bezier_1.evaluate(TValue::Parametric(quadratic_1_intersections[0])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[1].0, - t: subpath_intersections[1].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - } - - #[test] - fn intersection_linear_multiple_subpath_curves_test_three() { - // M35 125 C40 40 120 120 44 44 Q175 90 145 150 Q70 185 35 125 Z - - let cubic_start = DVec2::new(35., 125.); - let cubic_handle_1 = DVec2::new(40., 40.); - let cubic_handle_2 = DVec2::new(120., 120.); - let cubic_end = DVec2::new(44., 44.); - - let quadratic_1_handle = DVec2::new(175., 90.); - let quadratic_end = DVec2::new(145., 150.); - - let quadratic_2_handle = DVec2::new(70., 185.); - - let cubic_bezier = Bezier::from_cubic_dvec2(cubic_start, cubic_handle_1, cubic_handle_2, cubic_end); - let quadratic_bezier_1 = Bezier::from_quadratic_dvec2(cubic_end, quadratic_1_handle, quadratic_end); - - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: cubic_start, - in_handle: None, - out_handle: Some(cubic_handle_1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: cubic_end, - in_handle: Some(cubic_handle_2), - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: quadratic_end, - in_handle: Some(quadratic_1_handle), - out_handle: Some(quadratic_2_handle), - id: EmptyId, - }, - ], - true, - ); - - let line = Bezier::from_linear_coordinates(150., 150., 20., 20.); - - let cubic_intersections = cubic_bezier.intersections(&line, None, None); - let quadratic_1_intersections = quadratic_bezier_1.intersections(&line, None, None); - let subpath_intersections = subpath.intersections(&line, None, None); - - assert!( - utils::dvec2_compare( - cubic_bezier.evaluate(TValue::Parametric(cubic_intersections[0])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[0].0, - t: subpath_intersections[0].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - assert!( - utils::dvec2_compare( - quadratic_bezier_1.evaluate(TValue::Parametric(quadratic_1_intersections[0])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[1].0, - t: subpath_intersections[1].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - - assert!( - utils::dvec2_compare( - quadratic_bezier_1.evaluate(TValue::Parametric(quadratic_1_intersections[1])), - subpath.evaluate(SubpathTValue::Parametric { - segment_index: subpath_intersections[2].0, - t: subpath_intersections[2].1 - }), - MAX_ABSOLUTE_DIFFERENCE - ) - .all() - ); - } - - // TODO: add more intersection tests - - #[test] - fn is_inside_subpath() { - let boundary_polygon = [DVec2::new(100., 100.), DVec2::new(500., 100.), DVec2::new(500., 500.), DVec2::new(100., 500.)].to_vec(); - let boundary_polygon = Subpath::from_anchors_linear(boundary_polygon, true); - - let curve = Bezier::from_quadratic_dvec2(DVec2::new(189., 289.), DVec2::new(9., 286.), DVec2::new(45., 410.)); - let curve_intersecting = Subpath::::from_bezier(&curve); - assert!(!curve_intersecting.is_inside_subpath(&boundary_polygon, None, None)); - - let curve = Bezier::from_quadratic_dvec2(DVec2::new(115., 37.), DVec2::new(51.4, 91.8), DVec2::new(76.5, 242.)); - let curve_outside = Subpath::::from_bezier(&curve); - assert!(!curve_outside.is_inside_subpath(&boundary_polygon, None, None)); - - let curve = Bezier::from_cubic_dvec2(DVec2::new(210.1, 133.5), DVec2::new(150.2, 436.9), DVec2::new(436., 285.), DVec2::new(247.6, 240.7)); - let curve_inside = Subpath::::from_bezier(&curve); - assert!(curve_inside.is_inside_subpath(&boundary_polygon, None, None)); - - let line = Bezier::from_linear_dvec2(DVec2::new(101., 101.5), DVec2::new(150.2, 499.)); - let line_inside = Subpath::::from_bezier(&line); - assert!(line_inside.is_inside_subpath(&boundary_polygon, None, None)); - } - - #[test] - fn round_join_counter_clockwise_rotation() { - // Test case where the round join is drawn in the counter clockwise direction between two consecutive offsets - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: DVec2::new(20., 20.), - out_handle: Some(DVec2::new(10., 90.)), - in_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(114., 159.), - out_handle: None, - in_handle: Some(DVec2::new(60., 40.)), - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(148., 155.), - out_handle: None, - in_handle: None, - id: EmptyId, - }, - ], - false, - ); - - let offset = subpath.offset(10., utils::Join::Round); - let offset_len = offset.len(); - - let manipulator_groups = offset.manipulator_groups(); - let round_start = manipulator_groups[offset_len - 4].anchor; - let round_point = manipulator_groups[offset_len - 3].anchor; - let round_end = manipulator_groups[offset_len - 2].anchor; - - let middle = (round_start + round_end) / 2.; - - assert!((round_point - middle).angle_to(round_start - middle) > 0.); - assert!((round_end - middle).angle_to(round_point - middle) > 0.); - } - - #[test] - fn round_join_clockwise_rotation() { - // Test case where the round join is drawn in the clockwise direction between two consecutive offsets - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: DVec2::new(20., 20.), - out_handle: Some(DVec2::new(10., 90.)), - in_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(150., 40.), - out_handle: None, - in_handle: Some(DVec2::new(60., 40.)), - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(78., 36.), - out_handle: None, - in_handle: None, - id: EmptyId, - }, - ], - false, - ); - - let offset = subpath.offset(-15., utils::Join::Round); - let offset_len = offset.len(); - - let manipulator_groups = offset.manipulator_groups(); - let round_start = manipulator_groups[offset_len - 4].anchor; - let round_point = manipulator_groups[offset_len - 3].anchor; - let round_end = manipulator_groups[offset_len - 2].anchor; - - let middle = (round_start + round_end) / 2.; - - assert!((round_point - middle).angle_to(round_start - middle) < 0.); - assert!((round_end - middle).angle_to(round_point - middle) < 0.); - } -} diff --git a/libraries/bezier-rs/src/subpath/structs.rs b/libraries/bezier-rs/src/subpath/structs.rs deleted file mode 100644 index f0ef24dd7d..0000000000 --- a/libraries/bezier-rs/src/subpath/structs.rs +++ /dev/null @@ -1,146 +0,0 @@ -use super::Bezier; -use glam::{DAffine2, DVec2}; -use std::fmt::{Debug, Formatter, Result}; -use std::hash::Hash; - -/// An id type used for each [ManipulatorGroup]. -pub trait Identifier: Sized + Clone + PartialEq + Hash + 'static { - fn new() -> Self; -} - -/// An empty id type for use in tests -#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] -#[cfg(test)] -pub(crate) struct EmptyId; - -#[cfg(test)] -impl Identifier for EmptyId { - fn new() -> Self { - Self - } -} - -/// Structure used to represent a single anchor with up to two optional associated handles along a `Subpath` -#[derive(Copy, Clone, PartialEq)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct ManipulatorGroup { - pub anchor: DVec2, - pub in_handle: Option, - pub out_handle: Option, - pub id: PointId, -} - -// TODO: Remove once we no longer need to hash floats in Graphite -impl Hash for ManipulatorGroup { - fn hash(&self, state: &mut H) { - self.anchor.to_array().iter().for_each(|x| x.to_bits().hash(state)); - self.in_handle.is_some().hash(state); - if let Some(in_handle) = self.in_handle { - in_handle.to_array().iter().for_each(|x| x.to_bits().hash(state)); - } - self.out_handle.is_some().hash(state); - if let Some(out_handle) = self.out_handle { - out_handle.to_array().iter().for_each(|x| x.to_bits().hash(state)); - } - self.id.hash(state); - } -} - -#[cfg(feature = "dyn-any")] -unsafe impl dyn_any::StaticType for ManipulatorGroup { - type Static = ManipulatorGroup; -} - -impl Debug for ManipulatorGroup { - fn fmt(&self, f: &mut Formatter<'_>) -> Result { - f.debug_struct("ManipulatorGroup") - .field("anchor", &self.anchor) - .field("in_handle", &self.in_handle) - .field("out_handle", &self.out_handle) - .finish() - } -} - -impl ManipulatorGroup { - /// Construct a new manipulator group from an anchor, in handle and out handle - pub fn new(anchor: DVec2, in_handle: Option, out_handle: Option) -> Self { - let id = PointId::new(); - Self { anchor, in_handle, out_handle, id } - } - - /// Construct a new manipulator point with just an anchor position - pub fn new_anchor(anchor: DVec2) -> Self { - Self::new(anchor, Some(anchor), Some(anchor)) - } - - pub fn new_anchor_linear(anchor: DVec2) -> Self { - Self::new(anchor, None, None) - } - - /// Construct a new manipulator group from an anchor, in handle, out handle and an id - pub fn new_with_id(anchor: DVec2, in_handle: Option, out_handle: Option, id: PointId) -> Self { - Self { anchor, in_handle, out_handle, id } - } - - /// Construct a new manipulator point with just an anchor position and an id - pub fn new_anchor_with_id(anchor: DVec2, id: PointId) -> Self { - Self::new_with_id(anchor, Some(anchor), Some(anchor), id) - } - - /// Create a bezier curve that starts at the current manipulator group and finishes in the `end_group` manipulator group. - pub fn to_bezier(&self, end_group: &ManipulatorGroup) -> Bezier { - let start = self.anchor; - let end = end_group.anchor; - let out_handle = self.out_handle; - let in_handle = end_group.in_handle; - - match (out_handle, in_handle) { - (Some(handle1), Some(handle2)) => Bezier::from_cubic_dvec2(start, handle1, handle2, end), - (Some(handle), None) | (None, Some(handle)) => Bezier::from_quadratic_dvec2(start, handle, end), - (None, None) => Bezier::from_linear_dvec2(start, end), - } - } - - /// Apply a transformation to all of the [ManipulatorGroup] points - pub fn apply_transform(&mut self, affine_transform: DAffine2) { - self.anchor = affine_transform.transform_point2(self.anchor); - self.in_handle = self.in_handle.map(|in_handle| affine_transform.transform_point2(in_handle)); - self.out_handle = self.out_handle.map(|out_handle| affine_transform.transform_point2(out_handle)); - } - - /// Are all handles at finite positions - pub fn is_finite(&self) -> bool { - self.anchor.is_finite() && self.in_handle.is_none_or(|handle| handle.is_finite()) && self.out_handle.is_none_or(|handle| handle.is_finite()) - } - - /// Reverse directions of handles - pub fn flip(mut self) -> Self { - std::mem::swap(&mut self.in_handle, &mut self.out_handle); - self - } - - pub fn has_in_handle(&self) -> bool { - self.in_handle.map(|handle| Self::has_handle(self.anchor, handle)).unwrap_or(false) - } - - pub fn has_out_handle(&self) -> bool { - self.out_handle.map(|handle| Self::has_handle(self.anchor, handle)).unwrap_or(false) - } - - fn has_handle(anchor: DVec2, handle: DVec2) -> bool { - !((handle.x - anchor.x).abs() < f64::EPSILON && (handle.y - anchor.y).abs() < f64::EPSILON) - } -} - -#[derive(Copy, Clone)] -pub enum AppendType { - IgnoreStart, - SmoothJoin(f64), -} - -#[derive(Copy, Clone, Eq, PartialEq, Hash)] -pub enum ArcType { - Open, - Closed, - PieSlice, -} diff --git a/libraries/bezier-rs/src/subpath/transform.rs b/libraries/bezier-rs/src/subpath/transform.rs deleted file mode 100644 index 88fc4612f3..0000000000 --- a/libraries/bezier-rs/src/subpath/transform.rs +++ /dev/null @@ -1,1115 +0,0 @@ -use super::*; -use crate::BezierHandles; -use crate::consts::MAX_ABSOLUTE_DIFFERENCE; -use crate::utils::{Cap, Join, SubpathTValue, TValue}; -use glam::{DAffine2, DVec2}; -use std::vec; - -/// Helper function to ensure the index and t value pair is mapped within a maximum index value. -/// Allows for the point to be fetched without needing to handle an additional edge case. -/// - Ex. Via `subpath.iter().nth(index).evaluate(t);` -fn map_index_within_range(index: usize, t: f64, max_size: usize) -> (usize, f64) { - if max_size > 0 && index == max_size && t == 0. { (index - 1, 1.) } else { (index, t) } -} - -/// Functionality that transforms Subpaths, such as split, reduce, offset, etc. -impl Subpath { - /// Returns either one or two Subpaths that result from splitting the original Subpath at the point corresponding to `t`. - /// If the original Subpath was closed, a single open Subpath will be returned. - /// If the original Subpath was open, two open Subpaths will be returned. - /// - pub fn split(&self, t: SubpathTValue) -> (Subpath, Option>) { - let (segment_index, t) = self.t_value_to_parametric(t); - let curve = self.get_segment(segment_index).unwrap(); - - let [first_bezier, second_bezier] = curve.split(TValue::Parametric(t)); - - let mut clone = self.manipulator_groups.clone(); - // Split the manipulator group list such that the split location is between the last and first elements of the two split halves - // If the split is on an anchor point, include this anchor point in the first half of the split, except for the first manipulator group which we want in the second group - let (mut first_split, mut second_split) = if !(t == 0. && segment_index == 0) { - let clone2 = clone.split_off(self.len().min(segment_index + 1 + (t == 1.) as usize)); - (clone, clone2) - } else { - (vec![], clone) - }; - - // If the subpath is closed and the split point is the start or end of the Subpath - if self.closed && ((t == 0. && segment_index == 0) || (t == 1. && segment_index == self.len_segments() - 1)) { - // The entire vector of manipulator groups will be in the second_split - // Add a new manipulator group with the same anchor as the first node to represent the end of the now opened subpath - let last_curve = self.iter().last().unwrap(); - first_split.push(ManipulatorGroup { - anchor: first_bezier.end(), - in_handle: last_curve.handle_end(), - out_handle: None, - id: PointId::new(), - }); - } else { - if !first_split.is_empty() { - let num_elements = first_split.len(); - first_split[num_elements - 1].out_handle = first_bezier.handle_start(); - } - - if !second_split.is_empty() { - second_split[0].in_handle = second_bezier.handle_end(); - } - - // Push new manipulator groups to represent the location of the split at the end of the first group and at the start of the second - // If the split was at a manipulator group's anchor, add only one manipulator group - // Add it to the first list when the split location is on the first manipulator group, otherwise add to the second list - if (t % 1. != 0.) || segment_index == 0 { - first_split.push(ManipulatorGroup { - anchor: first_bezier.end(), - in_handle: first_bezier.handle_end(), - out_handle: None, - id: PointId::new(), - }); - } - - if !(t == 0. && segment_index == 0) { - second_split.insert( - 0, - ManipulatorGroup { - anchor: second_bezier.start(), - in_handle: None, - out_handle: second_bezier.handle_start(), - id: PointId::new(), - }, - ); - } - } - - if self.closed { - // "Rotate" the manipulator groups list so that the split point becomes the start and end of the open subpath - second_split.append(&mut first_split); - (Subpath::new(second_split, false), None) - } else { - (Subpath::new(first_split, false), Some(Subpath::new(second_split, false))) - } - } - - /// Returns [ManipulatorGroup]s with a reversed winding order. - fn reverse_manipulator_groups(manipulator_groups: &[ManipulatorGroup]) -> Vec> { - manipulator_groups - .iter() - .rev() - .map(|group| ManipulatorGroup { - anchor: group.anchor, - in_handle: group.out_handle, - out_handle: group.in_handle, - id: PointId::new(), - }) - .collect::>>() - } - - /// Returns a [Subpath] with a reversed winding order. - /// Note that a reversed closed subpath will start on the same manipulator group and simply wind the other direction - pub fn reverse(&self) -> Subpath { - let mut reversed = Subpath::reverse_manipulator_groups(self.manipulator_groups()); - if self.closed { - reversed.rotate_right(1); - }; - Subpath { - manipulator_groups: reversed, - closed: self.closed, - } - } - - /// Returns an open [Subpath] that results from trimming the original Subpath between the points corresponding to `t1` and `t2`, maintaining the winding order of the original. - /// If the original Subpath is closed, the order of arguments does matter. - /// The resulting Subpath will wind from the given `t1` to `t2`. - /// That means, if the value of `t1` > `t2`, it will cross the break between endpoints from `t1` to `t = 1 = 0` to `t2`. - /// If a path winding in the reverse direction is desired, call `trim` on the `Subpath` returned from `Subpath::reverse`. - /// - pub fn trim(&self, t1: SubpathTValue, t2: SubpathTValue) -> Subpath { - // Return a clone of the Subpath if it is not long enough to be a valid Bezier - if self.manipulator_groups.is_empty() { - return Subpath { - manipulator_groups: vec![], - closed: self.closed, - }; - } - - let (mut t1_curve_index, mut t1_curve_t) = self.t_value_to_parametric(t1); - let (mut t2_curve_index, mut t2_curve_t) = self.t_value_to_parametric(t2); - - // The only case where t would be 1 is when the input parameter refers to the the very last point on the subpath. - // We want these index and t pairs to always represent that point as the next curve index with t == 0. - if t1_curve_t == 1. { - t1_curve_index += 1; - t1_curve_t = 0.; - } - if t2_curve_t == 1. { - t2_curve_index += 1; - t2_curve_t = 0.; - } - - // Check if the trimmed result is in the reverse direction - let are_arguments_reversed = t1_curve_index > t2_curve_index || (t1_curve_index == t2_curve_index && t1_curve_t > t2_curve_t); - if !self.closed && are_arguments_reversed { - (t1_curve_index, t2_curve_index) = (t2_curve_index, t1_curve_index); - (t1_curve_t, t2_curve_t) = (t2_curve_t, t1_curve_t); - } - - // Get a new list from the manipulator groups that will be trimmed at the ends to form the resulting subpath. - // The list will contain enough manipulator groups such that the later code simply needs to trim the first and last bezier segments - // and then update the values of the corresponding first and last manipulator groups accordingly. - let mut cloned_manipulator_groups = self.manipulator_groups.clone(); - let mut new_manipulator_groups = if self.closed && are_arguments_reversed { - // Need to rotate the cloned manipulator groups vector - // Remove the elements starting from t1_curve_index to become the new beginning of the list - let mut front = cloned_manipulator_groups.split_off(t1_curve_index); - // Truncate middle elements that are not needed - cloned_manipulator_groups.truncate(t2_curve_index + ((t2_curve_t != 0.) as usize) + 1); - // Reconnect the two ends in the new order - front.extend(cloned_manipulator_groups); - if t1_curve_index == t2_curve_index % self.len_segments() { - // If the start and end of the trim are in the same bezier segment, we want to add a duplicate of the first two manipulator groups. - // This is to make sure the the closed loop is correctly represented and because this segment needs to be trimmed on both ends of the resulting subpath. - front.push(front[0].clone()); - front.push(front[1].clone()); - } - if t1_curve_index == t2_curve_index % self.len_segments() + 1 { - // If the start and end of the trim are in adjacent bezier segments, we want to add a duplicate of the first manipulator group. - // This is to make sure the the closed loop is correctly represented. - front.push(front[0].clone()); - } - front - } else { - // Determine the subsection of the subpath's manipulator groups that are needed - if self.closed { - // Add a duplicate of the first manipulator group to ensure the final closing segment is considered - cloned_manipulator_groups.push(cloned_manipulator_groups[0].clone()); - } - - // Find the start and end of the new range and consider whether the indices are reversed - let range_start = t1_curve_index.min(t2_curve_index); - // Add 1 since the drain range is not inclusive - // Add 1 again if the corresponding t is not 0 because we want to include the next manipulator group which forms the bezier that this t value is on - let range_end = 1 + t2_curve_index + ((t2_curve_t != 0.) as usize); - - cloned_manipulator_groups - .drain(range_start..range_end.min(cloned_manipulator_groups.len())) - .collect::>>() - }; - - // Adjust curve indices to match the cloned list - if self.closed && are_arguments_reversed { - // If trimmed subpath required rotating the manipulator group, adjust the indices to match - t2_curve_index = (t2_curve_index + self.len_segments() - t1_curve_index) % self.len_segments(); - if t2_curve_index == 0 { - // If the case is where the start and end are in the same bezier, - // change the index to point to the duplicate of this bezier that was pushed to the vector - t2_curve_index += self.len_segments(); - } - t1_curve_index = 0; - } else { - let min_index = t1_curve_index.min(t2_curve_index); - t1_curve_index -= min_index; - t2_curve_index -= min_index; - } - - // Change the representation of the point corresponding to the end point of the subpath - // So that we do not need an additional edges case in the later code to handle this point - (t1_curve_index, t1_curve_t) = map_index_within_range(t1_curve_index, t1_curve_t, new_manipulator_groups.len() - 1); - (t2_curve_index, t2_curve_t) = map_index_within_range(t2_curve_index, t2_curve_t, new_manipulator_groups.len() - 1); - - if new_manipulator_groups.len() == 1 { - // This case will occur when `t1` and `t2` both represent one of the manipulator group anchors - // Add a duplicate manipulator group so that the returned Subpath is still a valid Bezier - let mut point = new_manipulator_groups[0].clone(); - point.in_handle = None; - point.out_handle = None; - return Subpath { - manipulator_groups: vec![point], - closed: false, - }; - } - - let len_new_manip_groups = new_manipulator_groups.len(); - - // Create Beziers from the first and last pairs of manipulator groups - // These will be trimmed to form the start and end of the new subpath - let curve1 = new_manipulator_groups[0].to_bezier(&new_manipulator_groups[1]); - let curve2 = new_manipulator_groups[len_new_manip_groups - 2].to_bezier(&new_manipulator_groups[len_new_manip_groups - 1]); - - // If the target curve_indices are the same, then the trim must be happening within one bezier - // This means curve1 == curve2 must be true, and we can simply call the Bezier trim. - if t1_curve_index == t2_curve_index { - return Subpath::from_bezier(&curve1.trim(TValue::Parametric(t1_curve_t), TValue::Parametric(t2_curve_t))); - } - - // Split the bezier's with the according t value and keep the correct half - let [_, front_split] = curve1.split(TValue::Parametric(t1_curve_t)); - let [back_split, _] = curve2.split(TValue::Parametric(t2_curve_t)); - - // Update the first two manipulator groups to match the front_split - new_manipulator_groups[1].in_handle = front_split.handle_end(); - new_manipulator_groups[0] = ManipulatorGroup { - anchor: front_split.start(), - in_handle: None, - out_handle: front_split.handle_start(), - id: PointId::new(), - }; - - // Update the last two manipulator groups to match the back_split - new_manipulator_groups[len_new_manip_groups - 2].out_handle = back_split.handle_start(); - new_manipulator_groups[len_new_manip_groups - 1] = ManipulatorGroup { - anchor: back_split.end(), - in_handle: back_split.handle_end(), - out_handle: None, - id: PointId::new(), - }; - - Subpath { - manipulator_groups: new_manipulator_groups, - closed: false, - } - } - - /// Apply a transformation to all of the [ManipulatorGroup]s in the [Subpath]. - pub fn apply_transform(&mut self, affine_transform: DAffine2) { - for manipulator_group in &mut self.manipulator_groups { - manipulator_group.apply_transform(affine_transform); - } - } - - /// Smooths a Subpath up to the first derivative, using a weighted averaged based on segment length. - /// The Subpath must be open, and contain no quadratic segments. - pub(crate) fn smooth_open_subpath(&mut self) { - if self.len() < 2 { - return; - } - for i in 1..self.len() - 1 { - let first_bezier = self.manipulator_groups[i - 1].to_bezier(&self.manipulator_groups[i]); - let second_bezier = self.manipulator_groups[i].to_bezier(&self.manipulator_groups[i + 1]); - if first_bezier.handle_end().is_none() || second_bezier.handle_end().is_none() { - continue; - } - let end_tangent = first_bezier.non_normalized_tangent(1.); - let start_tangent = second_bezier.non_normalized_tangent(0.); - - // Compute an average unit vector, weighing the segments by a rough estimation of their relative size. - let segment1_len = first_bezier.length(None); - let segment2_len = second_bezier.length(None); - let average_unit_tangent = (end_tangent.normalize() * segment1_len + start_tangent.normalize() * segment2_len) / (segment1_len + segment2_len); - - // Adjust start and end handles to fit the average tangent - let end_point = first_bezier.end(); - self.manipulator_groups[i].in_handle = Some((average_unit_tangent / 3. * -1.) * end_tangent.length() + end_point); - - let start_point = second_bezier.start(); - self.manipulator_groups[i].out_handle = Some((average_unit_tangent / 3.) * start_tangent.length() + start_point); - } - } - - // TODO: If a segment curls back on itself tightly enough it could intersect again at the portion that should be trimmed. This could cause the Subpaths to be clipped - // at the incorrect location. This can be avoided by first trimming the two Subpaths at any extrema, effectively ignoring loopbacks. - /// Helper function to clip overlap of two intersecting open Subpaths. Returns an optional, as intersections may not exist for certain arrangements and distances. - /// Assumes that the Subpaths represents simple Bezier segments, and clips the Subpaths at the last intersection of the first Subpath, and first intersection of the last Subpath. - pub fn clip_simple_subpaths(subpath1: &Subpath, subpath2: &Subpath) -> Option<(Subpath, Subpath)> { - // Split the first subpath at its last intersection - let intersections1 = subpath1.subpath_intersections(subpath2, None, None); - if intersections1.is_empty() { - return None; - } - let (segment_index, t) = *intersections1.last().unwrap(); - let (clipped_subpath1, _) = subpath1.split(SubpathTValue::Parametric { segment_index, t }); - - // Split the second subpath at its first intersection - let intersections2 = subpath2.subpath_intersections(subpath1, None, None); - if intersections2.is_empty() { - return None; - } - let (segment_index, t) = intersections2[0]; - let (_, clipped_subpath2) = subpath2.split(SubpathTValue::Parametric { segment_index, t }); - - Some((clipped_subpath1, clipped_subpath2.unwrap())) - } - - /// Returns a subpath that results from rotating this subpath around the origin by the given angle (in radians). - /// - pub fn rotate(&self, angle: f64) -> Subpath { - let mut rotated_subpath = self.clone(); - - let affine_transform: DAffine2 = DAffine2::from_angle(angle); - rotated_subpath.apply_transform(affine_transform); - - rotated_subpath - } - - /// Returns a subpath that results from rotating this subpath around the provided point by the given angle (in radians). - pub fn rotate_about_point(&self, angle: f64, pivot: DVec2) -> Subpath { - // Translate before and after the rotation to account for the pivot - let translate: DAffine2 = DAffine2::from_translation(pivot); - let rotate: DAffine2 = DAffine2::from_angle(angle); - let translate_inverse = translate.inverse(); - - let mut rotated_subpath = self.clone(); - rotated_subpath.apply_transform(translate * rotate * translate_inverse); - rotated_subpath - } - - /// Reduces the segments of the subpath into simple subcurves, then scales each subcurve a set `distance` away. - /// The intersections of segments of the subpath are joined using the method specified by the `join` argument. - /// - pub fn offset(&self, distance: f64, join: Join) -> Subpath { - // An offset at a distance 0 from the curve is simply the same curve - // An offset of a single point is not defined - if distance == 0. || self.len() <= 1 || self.len_segments() < 1 { - return self.clone(); - } - - let mut subpaths = self - .iter() - .filter(|bezier| !bezier.is_point()) - .map(|bezier| bezier.offset(distance)) - .filter(|subpath| subpath.len() >= 2) // In some cases the reduced and scaled bรฉzier is marked by is_point (so the subpath is empty). - .collect::>>(); - - let mut drop_common_point = vec![true; self.len()]; - - // Clip or join consecutive Subpaths - for i in 0..subpaths.len() - 1 { - let j = i + 1; - let subpath1 = &subpaths[i]; - let subpath2 = &subpaths[j]; - - let last_segment = subpath1.get_segment(subpath1.len_segments() - 1).unwrap(); - let first_segment = subpath2.get_segment(0).unwrap(); - - // If the anchors are approximately equal, there is no need to clip / join the segments - if last_segment.end().abs_diff_eq(first_segment.start(), MAX_ABSOLUTE_DIFFERENCE) { - continue; - } - - // Calculate the angle formed between two consecutive Subpaths - let out_tangent = self.get_segment(i).unwrap().tangent(TValue::Parametric(1.)); - let in_tangent = self.get_segment(j).unwrap().tangent(TValue::Parametric(0.)); - let angle = out_tangent.angle_to(in_tangent); - - // The angle is concave. The Subpath overlap and must be clipped - let mut apply_join = true; - if (angle > 0. && distance > 0.) || (angle < 0. && distance < 0.) { - // If the distance is large enough, there may still be no intersections. Also, if the angle is close enough to zero, - // subpath intersections may find no intersections. In this case, the points are likely close enough that we can approximate - // the points as being on top of one another. - if let Some((clipped_subpath1, clipped_subpath2)) = Subpath::clip_simple_subpaths(subpath1, subpath2) { - subpaths[i] = clipped_subpath1; - subpaths[j] = clipped_subpath2; - apply_join = false; - } - } - // The angle is convex. The Subpath must be joined using the specified join type - if apply_join { - drop_common_point[j] = false; - match join { - Join::Bevel => {} - Join::Miter(miter_limit) => { - let miter_manipulator_group = subpaths[i].miter_line_join(&subpaths[j], miter_limit); - if let Some(miter_manipulator_group) = miter_manipulator_group { - subpaths[i].manipulator_groups.push(miter_manipulator_group); - } - } - Join::Round => { - let (out_handle, round_point, in_handle) = subpaths[i].round_line_join(&subpaths[j], self.manipulator_groups[j].anchor); - let last_index = subpaths[i].manipulator_groups.len() - 1; - subpaths[i].manipulator_groups[last_index].out_handle = Some(out_handle); - subpaths[i].manipulator_groups.push(round_point.clone()); - subpaths[j].manipulator_groups[0].in_handle = Some(in_handle); - } - } - } - } - - // Clip any overlap in the last segment - if self.closed { - let out_tangent = self.get_segment(self.len_segments() - 1).unwrap().tangent(TValue::Parametric(1.)); - let in_tangent = self.get_segment(0).unwrap().tangent(TValue::Parametric(0.)); - let angle = out_tangent.angle_to(in_tangent); - - let mut apply_join = true; - if (angle > 0. && distance > 0.) || (angle < 0. && distance < 0.) { - if let Some((clipped_subpath1, clipped_subpath2)) = Subpath::clip_simple_subpaths(&subpaths[subpaths.len() - 1], &subpaths[0]) { - // Merge the clipped subpaths - let last_index = subpaths.len() - 1; - subpaths[last_index] = clipped_subpath1; - subpaths[0] = clipped_subpath2; - apply_join = false; - } - } - if apply_join { - drop_common_point[0] = false; - match join { - Join::Bevel => {} - Join::Miter(miter_limit) => { - let last_subpath_index = subpaths.len() - 1; - let miter_manipulator_group = subpaths[last_subpath_index].miter_line_join(&subpaths[0], miter_limit); - if let Some(miter_manipulator_group) = miter_manipulator_group { - subpaths[last_subpath_index].manipulator_groups.push(miter_manipulator_group); - } - } - Join::Round => { - let last_subpath_index = subpaths.len() - 1; - let (out_handle, round_point, in_handle) = subpaths[last_subpath_index].round_line_join(&subpaths[0], self.manipulator_groups[0].anchor); - let last_index = subpaths[last_subpath_index].manipulator_groups.len() - 1; - subpaths[last_subpath_index].manipulator_groups[last_index].out_handle = Some(out_handle); - subpaths[last_subpath_index].manipulator_groups.push(round_point); - subpaths[0].manipulator_groups[0].in_handle = Some(in_handle); - } - } - } - } - - // Merge the subpaths. Drop points which overlap with one another. - let mut manipulator_groups = subpaths[0].manipulator_groups.clone(); - for i in 1..subpaths.len() { - if drop_common_point[i] { - let last_group = manipulator_groups.pop().unwrap(); - let mut manipulators_copy = subpaths[i].manipulator_groups.clone(); - manipulators_copy[0].in_handle = last_group.in_handle; - - manipulator_groups.append(&mut manipulators_copy); - } else { - manipulator_groups.append(&mut subpaths[i].manipulator_groups.clone()); - } - } - if self.closed && drop_common_point[0] { - let last_group = manipulator_groups.pop().unwrap(); - manipulator_groups[0].in_handle = last_group.in_handle; - } - - Subpath::new(manipulator_groups, self.closed) - } - - /// Helper function to combine the two offsets that make up an outline. - pub(crate) fn combine_outline(&self, other: &Subpath, cap: Cap) -> Subpath { - let mut result_manipulator_groups: Vec> = vec![]; - result_manipulator_groups.extend_from_slice(self.manipulator_groups()); - match cap { - Cap::Butt => { - result_manipulator_groups.extend_from_slice(other.manipulator_groups()); - } - Cap::Round => { - let last_index = result_manipulator_groups.len() - 1; - let (out_handle, round_point, in_handle) = self.round_cap(other); - result_manipulator_groups[last_index].out_handle = Some(out_handle); - result_manipulator_groups.push(round_point); - result_manipulator_groups.extend_from_slice(&other.manipulator_groups); - result_manipulator_groups[last_index + 2].in_handle = Some(in_handle); - - let last_index = result_manipulator_groups.len() - 1; - let (out_handle, round_point, in_handle) = other.round_cap(self); - result_manipulator_groups[last_index].out_handle = Some(out_handle); - result_manipulator_groups.push(round_point); - result_manipulator_groups[0].in_handle = Some(in_handle); - } - Cap::Square => { - let square_points = self.square_cap(other); - result_manipulator_groups.extend_from_slice(&square_points); - result_manipulator_groups.extend_from_slice(other.manipulator_groups()); - let square_points = other.square_cap(self); - result_manipulator_groups.extend_from_slice(&square_points); - } - } - Subpath::new(result_manipulator_groups, true) - } - - // TODO: Replace this return type with `Path`, once the `Path` data type has been created. - /// Outline returns a single closed subpath (if the original subpath was open) or two closed subpaths (if the original subpath was closed) that forms - /// an approximate outline around the subpath at a specified distance from the curve. Outline takes the following parameters: - /// - `distance` - The outline's distance from the curve. - /// - `join` - The join type used to cap the endpoints of open bezier curves, and join successive subpath segments. - /// - pub fn outline(&self, distance: f64, join: Join, cap: Cap) -> (Subpath, Option>) { - let is_point = self.is_point(); - let (pos_offset, neg_offset) = if is_point { - let point = self.manipulator_groups[0].anchor; - ( - Subpath::new(vec![ManipulatorGroup::new_anchor(point + DVec2::NEG_Y * distance)], false), - Subpath::new(vec![ManipulatorGroup::new_anchor(point + DVec2::Y * distance)], false), - ) - } else { - (self.offset(distance, join), self.reverse().offset(distance, join)) - }; - - if self.closed && !is_point { - return (pos_offset, Some(neg_offset)); - } - - (pos_offset.combine_outline(&neg_offset, cap), None) - } -} - -#[cfg(test)] -mod tests { - use super::{Cap, Join, ManipulatorGroup, Subpath}; - use crate::EmptyId; - use crate::compare::{compare_points, compare_subpaths, compare_vec_of_points}; - use crate::consts::MAX_ABSOLUTE_DIFFERENCE; - use crate::utils::{SubpathTValue, TValue}; - use glam::DVec2; - - fn set_up_open_subpath() -> Subpath { - let start = DVec2::new(20., 30.); - let middle1 = DVec2::new(80., 90.); - let middle2 = DVec2::new(100., 100.); - let end = DVec2::new(60., 45.); - - let handle1 = DVec2::new(75., 85.); - let handle2 = DVec2::new(40., 30.); - let handle3 = DVec2::new(10., 10.); - - Subpath::new( - vec![ - ManipulatorGroup { - anchor: start, - in_handle: None, - out_handle: Some(handle1), - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle1, - in_handle: None, - out_handle: Some(handle2), - id: EmptyId, - }, - ManipulatorGroup { - anchor: middle2, - in_handle: None, - out_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: end, - in_handle: None, - out_handle: Some(handle3), - id: EmptyId, - }, - ], - false, - ) - } - - fn set_up_closed_subpath() -> Subpath { - let mut subpath = set_up_open_subpath(); - subpath.closed = true; - subpath - } - - #[test] - fn outline_with_single_point_segment() { - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: DVec2::new(20., 20.), - out_handle: Some(DVec2::new(10., 90.)), - in_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(150., 40.), - out_handle: None, - in_handle: Some(DVec2::new(60., 40.)), - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(150., 40.), - out_handle: Some(DVec2::new(40., 120.)), - in_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(100., 100.), - out_handle: None, - in_handle: None, - id: EmptyId, - }, - ], - false, - ); - - let outline = subpath.outline(10., crate::Join::Round, crate::Cap::Round).0; - assert!(outline.manipulator_groups.windows(2).all(|pair| !pair[0].anchor.abs_diff_eq(pair[1].anchor, MAX_ABSOLUTE_DIFFERENCE))); - assert!(outline.closed()); - } - - #[test] - /// Even though the bรฉzier here is not marked as a point, the offset and scaled version is. - fn outline_with_point_offset() { - let subpath = Subpath::new( - vec![ - ManipulatorGroup { - anchor: DVec2::new(1122.6253015182049, 610.9441551227939), - out_handle: Some(DVec2::new(1122.6253015182049, 610.9445412168651)), - in_handle: None, - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(1122.6258671405062, 610.9453107605276), - out_handle: None, - in_handle: Some(DVec2::new(1122.6254904904154, 610.9449255479497)), - id: EmptyId, - }, - ManipulatorGroup { - anchor: DVec2::new(0., 0.), - out_handle: None, - in_handle: None, - id: EmptyId, - }, - ], - false, - ); - let outline = subpath.outline(4.4, crate::Join::Round, crate::Cap::Round).0; - assert!(outline.manipulator_groups.windows(2).all(|pair| !pair[0].anchor.abs_diff_eq(pair[1].anchor, MAX_ABSOLUTE_DIFFERENCE))); - assert!(outline.closed()); - } - - #[test] - fn split_an_open_subpath() { - let subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let split_pair = subpath.iter().next().unwrap().split(TValue::Parametric((0.2 * 3.) % 1.)); - let (first, second) = subpath.split(SubpathTValue::GlobalParametric(0.2)); - assert!(second.is_some()); - let second = second.unwrap(); - assert_eq!(first.manipulator_groups[1].anchor, location); - assert_eq!(second.manipulator_groups[0].anchor, location); - assert_eq!(split_pair[0], first.iter().last().unwrap()); - assert_eq!(split_pair[1], second.iter().next().unwrap()); - } - - #[test] - fn split_at_start_of_an_open_subpath() { - let subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let split_pair = subpath.iter().next().unwrap().split(TValue::Parametric(0.)); - let (first, second) = subpath.split(SubpathTValue::GlobalParametric(0.)); - assert!(second.is_some()); - let second = second.unwrap(); - assert_eq!( - first.manipulator_groups[0], - ManipulatorGroup { - anchor: location, - in_handle: None, - out_handle: None, - id: EmptyId, - } - ); - assert_eq!(first.manipulator_groups.len(), 1); - assert_eq!(second.manipulator_groups[0].anchor, location); - assert_eq!(split_pair[1], second.iter().next().unwrap()); - } - - #[test] - fn split_at_end_of_an_open_subpath() { - let subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let split_pair = subpath.iter().last().unwrap().split(TValue::Parametric(1.)); - let (first, second) = subpath.split(SubpathTValue::GlobalParametric(1.)); - assert!(second.is_some()); - let second = second.unwrap(); - assert_eq!(first.manipulator_groups[3].anchor, location); - assert_eq!(split_pair[0], first.iter().last().unwrap()); - assert_eq!( - second.manipulator_groups[0], - ManipulatorGroup { - anchor: location, - in_handle: None, - out_handle: None, - id: EmptyId, - } - ); - assert_eq!(second.manipulator_groups.len(), 1); - } - - #[test] - fn split_a_closed_subpath() { - let subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let split_pair = subpath.iter().next().unwrap().split(TValue::Parametric((0.2 * 4.) % 1.)); - let (first, second) = subpath.split(SubpathTValue::GlobalParametric(0.2)); - assert!(second.is_none()); - assert_eq!(first.manipulator_groups[0].anchor, location); - assert_eq!(first.manipulator_groups[5].anchor, location); - assert_eq!(first.manipulator_groups.len(), 6); - assert_eq!(split_pair[0], first.iter().last().unwrap()); - assert_eq!(split_pair[1], first.iter().next().unwrap()); - } - - #[test] - fn split_at_start_of_a_closed_subpath() { - let subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let (first, second) = subpath.split(SubpathTValue::GlobalParametric(0.)); - assert!(second.is_none()); - assert_eq!(first.manipulator_groups[0].anchor, location); - assert_eq!(first.manipulator_groups[4].anchor, location); - assert_eq!(subpath.manipulator_groups[0..], first.manipulator_groups[..4]); - assert!(!first.closed); - assert_eq!(first.iter().last().unwrap(), subpath.iter().last().unwrap()); - assert_eq!(first.iter().next().unwrap(), subpath.iter().next().unwrap()); - } - - #[test] - fn split_at_end_of_a_closed_subpath() { - let subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let (first, second) = subpath.split(SubpathTValue::GlobalParametric(1.)); - assert!(second.is_none()); - assert_eq!(first.manipulator_groups[0].anchor, location); - assert_eq!(first.manipulator_groups[4].anchor, location); - assert_eq!(subpath.manipulator_groups[0..], first.manipulator_groups[..4]); - assert!(!first.closed); - assert_eq!(first.iter().last().unwrap(), subpath.iter().last().unwrap()); - assert_eq!(first.iter().next().unwrap(), subpath.iter().next().unwrap()); - } - - #[test] - fn reverse_an_open_subpath() { - let subpath = set_up_open_subpath(); - let temporary = subpath.reverse(); - let result = temporary.reverse(); - let end = result.len(); - - assert_eq!(temporary.manipulator_groups[0].anchor, result.manipulator_groups[end - 1].anchor); - assert_eq!(temporary.manipulator_groups[0].out_handle, result.manipulator_groups[end - 1].in_handle); - assert_eq!(subpath, result); - } - - #[test] - fn reverse_a_closed_subpath() { - let subpath = set_up_closed_subpath(); - let temporary = subpath.reverse(); - let result = temporary.reverse(); - let end = result.len(); - - // Second manipulator group on the temporary subpath should be the reflected version of the last in the result - assert_eq!(temporary.manipulator_groups[1].anchor, result.manipulator_groups[end - 1].anchor); - assert_eq!(temporary.manipulator_groups[1].in_handle, result.manipulator_groups[end - 1].out_handle); - assert_eq!(temporary.manipulator_groups[1].out_handle, result.manipulator_groups[end - 1].in_handle); - - // The first manipulator group in both should be the reflected versions of each other - assert_eq!(temporary.manipulator_groups[0].anchor, result.manipulator_groups[0].anchor); - assert_eq!(temporary.manipulator_groups[0].in_handle, result.manipulator_groups[0].out_handle); - assert_eq!(temporary.manipulator_groups[0].out_handle, result.manipulator_groups[0].in_handle); - assert_eq!(subpath, result); - } - - #[test] - fn trim_an_open_subpath() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.8)); - let [_, trim_front] = subpath.iter().next().unwrap().split(TValue::Parametric((0.2 * 3.) % 1.)); - let [trim_back, _] = subpath.iter().last().unwrap().split(TValue::Parametric((0.8 * 3.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.2), SubpathTValue::GlobalParametric(0.8)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[3].anchor, location_back); - assert_eq!(trim_front, result.iter().next().unwrap()); - assert_eq!(trim_back, result.iter().last().unwrap()); - } - - #[test] - fn trim_within_a_bezier() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.1)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let trimmed = subpath.iter().next().unwrap().trim(TValue::Parametric((0.1 * 3.) % 1.), TValue::Parametric((0.2 * 3.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.1), SubpathTValue::GlobalParametric(0.2)); - assert!(compare_points(result.manipulator_groups[0].anchor, location_front)); - assert!(compare_points(result.manipulator_groups[1].anchor, location_back)); - assert_eq!(trimmed, result.iter().next().unwrap()); - assert_eq!(result.len(), 2); - } - - #[test] - fn trim_first_segment_of_an_open_subpath() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.25)); - let trimmed = subpath.iter().next().unwrap().trim(TValue::Parametric(0.), TValue::Parametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.), SubpathTValue::GlobalParametric(0.25)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[1].anchor, location_back); - assert_eq!(trimmed, result.iter().next().unwrap()); - } - - #[test] - fn trim_second_segment_of_an_open_subpath() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.25)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.5)); - let trimmed = subpath.iter().nth(1).unwrap().trim(TValue::Parametric(0.), TValue::Parametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.25), SubpathTValue::GlobalParametric(0.5)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[1].anchor, location_back); - assert_eq!(trimmed, result.iter().next().unwrap()); - } - - #[test] - fn trim_reverse_in_open_subpath() { - let subpath = set_up_open_subpath(); - let result1 = subpath.trim(SubpathTValue::GlobalParametric(0.8), SubpathTValue::GlobalParametric(0.2)); - let result2 = subpath.trim(SubpathTValue::GlobalParametric(0.2), SubpathTValue::GlobalParametric(0.8)); - - assert!(compare_subpaths::(&result1, &result2)); - } - - #[test] - fn trim_reverse_within_a_bezier() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.1)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let trimmed = subpath.iter().next().unwrap().trim(TValue::Parametric((0.2 * 3.) % 1.), TValue::Parametric((0.1 * 3.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.2), SubpathTValue::GlobalParametric(0.1)); - - assert!(compare_points(result.manipulator_groups[0].anchor, location_front)); - assert!(compare_points(result.manipulator_groups[1].anchor, location_back)); - assert!(compare_vec_of_points( - trimmed.get_points().collect(), - result.iter().next().unwrap().get_points().collect(), - MAX_ABSOLUTE_DIFFERENCE - )); - assert_eq!(result.len(), 2); - } - - #[test] - fn trim_a_duplicate_subpath() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.), SubpathTValue::GlobalParametric(1.)); - - // Assume that resulting subpath would no longer have the any meaningless handles - let mut expected_subpath = subpath; - expected_subpath[3].out_handle = None; - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert!(compare_points(result.manipulator_groups[3].anchor, location_back)); - assert_eq!(expected_subpath, result); - } - - #[test] - fn trim_a_reversed_duplicate_subpath() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(1.), SubpathTValue::GlobalParametric(0.)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[3].anchor, location_back); - assert!(compare_subpaths::(&subpath, &result)); - } - - #[test] - fn trim_to_end_of_subpath() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.8)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let trimmed = subpath.iter().last().unwrap().trim(TValue::Parametric((0.8 * 3.) % 1.), TValue::Parametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.8), SubpathTValue::GlobalParametric(1.)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert!(compare_points(result.manipulator_groups[1].anchor, location_back)); - assert_eq!(trimmed, result.iter().next().unwrap()); - } - - #[test] - fn trim_reversed_to_end_of_subpath() { - let subpath = set_up_open_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let trimmed = subpath.iter().next().unwrap().trim(TValue::Parametric((0.2 * 3.) % 1.), TValue::Parametric(0.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.2), SubpathTValue::GlobalParametric(0.)); - - assert!(compare_points(result.manipulator_groups[0].anchor, location_front)); - assert!(compare_points(result.manipulator_groups[1].anchor, location_back)); - assert!(compare_vec_of_points( - trimmed.get_points().collect(), - result.iter().next().unwrap().get_points().collect(), - MAX_ABSOLUTE_DIFFERENCE - )); - } - - #[test] - fn trim_start_point() { - let subpath = set_up_open_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.), SubpathTValue::GlobalParametric(0.)); - - assert!(compare_points(result.manipulator_groups[0].anchor, location)); - assert!(result.manipulator_groups[0].in_handle.is_none()); - assert!(result.manipulator_groups[0].out_handle.is_none()); - assert_eq!(result.len(), 1); - } - - #[test] - fn trim_middle_point() { - let subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.25)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.25), SubpathTValue::GlobalParametric(0.25)); - - assert!(compare_points(result.manipulator_groups[0].anchor, location)); - assert!(result.manipulator_groups[0].in_handle.is_none()); - assert!(result.manipulator_groups[0].out_handle.is_none()); - assert_eq!(result.len(), 1); - } - - #[test] - fn trim_a_closed_subpath() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.8)); - let [_, trim_front] = subpath.iter().next().unwrap().split(TValue::Parametric((0.2 * 4.) % 1.)); - let [trim_back, _] = subpath.iter().last().unwrap().split(TValue::Parametric((0.8 * 4.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.2), SubpathTValue::GlobalParametric(0.8)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[4].anchor, location_back); - assert_eq!(trim_front, result.iter().next().unwrap()); - assert_eq!(trim_back, result.iter().last().unwrap()); - } - - #[test] - fn trim_to_end_of_closed_subpath() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.8)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let trimmed = subpath.iter().last().unwrap().trim(TValue::Parametric((0.8 * 4.) % 1.), TValue::Parametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.8), SubpathTValue::GlobalParametric(1.)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert!(compare_points(result.manipulator_groups[1].anchor, location_back)); - assert_eq!(trimmed, result.iter().next().unwrap()); - } - - #[test] - fn trim_across_break_in_a_closed_subpath() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.8)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let [_, trim_front] = subpath.iter().last().unwrap().split(TValue::Parametric((0.8 * 4.) % 1.)); - let [trim_back, _] = subpath.iter().next().unwrap().split(TValue::Parametric((0.2 * 4.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.8), SubpathTValue::GlobalParametric(0.2)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[2].anchor, location_back); - assert_eq!(trim_front, result.iter().next().unwrap()); - assert_eq!(trim_back, result.iter().last().unwrap()); - } - - #[test] - fn trim_across_break_in_a_closed_subpath_where_result_is_multiple_segments() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.6)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.4)); - let [_, trim_front] = subpath.iter().nth(2).unwrap().split(TValue::Parametric((0.6 * 4.) % 1.)); - let [trim_back, _] = subpath.iter().nth(1).unwrap().split(TValue::Parametric((0.4 * 4.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.6), SubpathTValue::GlobalParametric(0.4)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[4].anchor, location_back); - assert_eq!(trim_front, result.iter().next().unwrap()); - assert_eq!(trim_back, result.iter().last().unwrap()); - } - - #[test] - fn trim_across_break_in_a_closed_subpath_where_ends_are_in_same_segment() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.45)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.4)); - let [_, trim_front] = subpath.iter().nth(1).unwrap().split(TValue::Parametric((0.45 * 4.) % 1.)); - let [trim_back, _] = subpath.iter().nth(1).unwrap().split(TValue::Parametric((0.4 * 4.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.45), SubpathTValue::GlobalParametric(0.4)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[5].anchor, location_back); - assert_eq!(trim_front, result.iter().next().unwrap()); - assert_eq!(trim_back, result.iter().last().unwrap()); - } - - #[test] - fn trim_at_break_in_closed_subpath_where_end_is_0() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(0.8)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let trimmed = subpath.iter().last().unwrap().trim(TValue::Parametric((0.8 * 4.) % 1.), TValue::Parametric(1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(0.8), SubpathTValue::GlobalParametric(0.)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[1].anchor, location_back); - assert_eq!(trimmed, result.iter().next().unwrap()); - } - - #[test] - fn trim_at_break_in_closed_subpath_where_start_is_1() { - let subpath = set_up_closed_subpath(); - let location_front = subpath.evaluate(SubpathTValue::GlobalParametric(1.)); - let location_back = subpath.evaluate(SubpathTValue::GlobalParametric(0.2)); - let trimmed = subpath.iter().next().unwrap().trim(TValue::Parametric(0.), TValue::Parametric((0.2 * 4.) % 1.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(1.), SubpathTValue::GlobalParametric(0.2)); - - assert_eq!(result.manipulator_groups[0].anchor, location_front); - assert_eq!(result.manipulator_groups[1].anchor, location_back); - assert_eq!(trimmed, result.iter().next().unwrap()); - } - - #[test] - fn trim_at_break_in_closed_subpath_from_1_to_0() { - let subpath = set_up_closed_subpath(); - let location = subpath.evaluate(SubpathTValue::GlobalParametric(0.)); - let result = subpath.trim(SubpathTValue::GlobalParametric(1.), SubpathTValue::GlobalParametric(0.)); - - assert_eq!(result.manipulator_groups[0].anchor, location); - assert!(result.manipulator_groups[0].in_handle.is_none()); - assert!(result.manipulator_groups[0].out_handle.is_none()); - assert_eq!(result.manipulator_groups.len(), 1); - } - - #[test] - fn outline_single_point_circle() { - let ellipse: Subpath = Subpath::new_ellipse(DVec2::new(0., 0.), DVec2::new(50., 50.)).reverse(); - let p = DVec2::new(25., 25.); - - let subpath: Subpath = Subpath::from_anchors([p, p, p], false); - let outline_open = subpath.outline(25., Join::Bevel, Cap::Round); - assert_eq!(outline_open.0, ellipse); - assert_eq!(outline_open.1, None); - - let subpath_closed: Subpath = Subpath::from_anchors([p, p, p], true); - let outline_closed = subpath_closed.outline(25., Join::Bevel, Cap::Round); - assert_eq!(outline_closed.0, ellipse); - assert_eq!(outline_closed.1, None); - } - - #[test] - fn outline_single_point_square() { - let square: Subpath = Subpath::from_anchors( - [ - DVec2::new(25., 0.), - DVec2::new(0., 0.), - DVec2::new(0., 50.), - DVec2::new(25., 50.), - DVec2::new(50., 50.), - DVec2::new(50., 0.), - ], - true, - ); - let p = DVec2::new(25., 25.); - - let subpath: Subpath = Subpath::from_anchors([p, p, p], false); - let outline_open = subpath.outline(25., Join::Bevel, Cap::Square); - assert_eq!(outline_open.0, square); - assert_eq!(outline_open.1, None); - - let subpath_closed: Subpath = Subpath::from_anchors([p, p, p], true); - let outline_closed = subpath_closed.outline(25., Join::Bevel, Cap::Square); - assert_eq!(outline_closed.0, square); - assert_eq!(outline_closed.1, None); - } -} diff --git a/libraries/bezier-rs/src/symmetrical_basis.rs b/libraries/bezier-rs/src/symmetrical_basis.rs deleted file mode 100644 index 800de69d9d..0000000000 --- a/libraries/bezier-rs/src/symmetrical_basis.rs +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Modifications and Rust port copyright (C) 2024 by 0Hypercube. - * - * Original version by lib2geom: - * - * The entirety of this file is specially licensed under MPL 1.1 terms: - * - * Original Authors: - * Nathan Hurst - * Michael Sloan - * Marco Cecchetti - * MenTaLguY - * Michael Sloan - * Nathan Hurst - * Krzysztof Kosiล„ski - * And additional authors listed in the version control history of the following files: - * - https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/sbasis.h - * - https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis.cpp - * - https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis-to-bezier.cpp - * - https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/bezier.cpp - * - https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/solve-bezier.cpp - * - https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/solve-bezier-one-d.cpp - * - * Copyright (C) 2006-2015 Original Authors - * - * This file is free software; you can redistribute it and/or modify it - * either under the terms of the Mozilla Public License Version 1.1 (the - * "MPL"). - * - * The contents of this file are subject to the Mozilla Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * https://www.mozilla.org/MPL/1.1/ - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY - * OF ANY KIND, either express or implied. See the MPL for the specific - * language governing rights and limitations. - */ - -use crate::{Bezier, BezierHandles}; -use glam::DVec2; - -impl std::ops::Index for Bezier { - type Output = DVec2; - fn index(&self, index: usize) -> &Self::Output { - match &self.handles { - BezierHandles::Linear => [&self.start, &self.end][index], - BezierHandles::Quadratic { handle } => [&self.start, handle, &self.end][index], - BezierHandles::Cubic { handle_start, handle_end } => [&self.start, handle_start, handle_end, &self.end][index], - } - } -} - -// Note that the built in signum cannot be used as it does not handle 0 the same way as in the C code. -fn sign(x: f64) -> i8 { - if x > 0. { - 1 - } else if x < 0. { - -1 - } else { - 0 - } -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/sbasis.h#L70 -#[derive(Debug, Clone)] -pub(crate) struct SymmetricalBasis(pub Vec); - -impl SymmetricalBasis { - // https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis.cpp#L323 - #[must_use] - fn derivative(&self) -> SymmetricalBasis { - let mut c = SymmetricalBasis(vec![DVec2::ZERO; self.len()]); - if self.iter().all(|x| x.abs_diff_eq(DVec2::ZERO, 1e-5)) { - return c; - } - for k in 0..(self.len() - 1) { - let d = (2. * k as f64 + 1.) * (self[k][1] - self[k][0]); - - c[k][0] = d + (k as f64 + 1.) * self[k + 1][0]; - c[k][1] = d - (k as f64 + 1.) * self[k + 1][1]; - } - let k = self.len() - 1; - let d = (2. * k as f64 + 1.) * (self[k][1] - self[k][0]); - if d == 0. && k > 0 { - c.pop(); - } else { - c[k][0] = d; - c[k][1] = d; - } - c - } - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis-to-bezier.cpp#L86 - #[must_use] - pub fn to_bezier1d(&self) -> Bezier1d { - let sb = self; - assert!(!sb.is_empty()); - - let n; - let even; - - let mut q = sb.len(); - if sb[q - 1][0] == sb[q - 1][1] { - even = true; - q -= 1; - n = 2 * q; - } else { - even = false; - n = 2 * q - 1; - } - - let mut bz = Bezier1d(vec![0.; n + 1]); - for k in 0..q { - let mut tjk = 1.; - for j in k..(n - k) { - // j <= n-k-1 - bz[j] += tjk * sb[k][0]; - bz[n - j] += tjk * sb[k][1]; // n-k <-> [k][1] - tjk = binomial_increment_k(tjk, n - 2 * k - 1, j - k); - } - } - if even { - bz[q] += sb[q][0]; - } - // the resulting coefficients are with respect to the scaled Bernstein - // basis so we need to divide them by (n, j) binomial coefficient - let mut bcj = n as f64; - for j in 1..n { - bz[j] /= bcj; - bcj = binomial_increment_k(bcj, n, j); - } - bz[0] = sb[0][0]; - bz[n] = sb[0][1]; - bz - } - - fn normalize(&mut self) { - while self.len() > 1 && self.last().is_some_and(|x| x.abs_diff_eq(DVec2::ZERO, 1e-5)) { - self.pop(); - } - } - - #[must_use] - pub(crate) fn roots(&self) -> Vec { - match self.len() { - 0 => Vec::new(), - 1 => { - let mut res = Vec::new(); - let d = self[0].x - self[0].y; - if d != 0. { - let r = self[0].x / d; - if (0. ..=1.).contains(&r) { - res.push(r); - } - } - res - } - _ => { - let mut bz = self.to_bezier1d(); - let mut solutions = Vec::new(); - if bz.len() == 0 || bz.iter().all(|&x| (x - bz[0]).abs() < 1e-5) { - return solutions; - } - while bz[0] == 0. { - bz = bz.deflate(); - solutions.push(0.); - } - // Linear - if bz.len() - 1 == 1 { - if sign(bz[0]) != sign(bz[1]) { - let d = bz[0] - bz[1]; - if d != 0. { - let r = bz[0] / d; - if (0. ..=1.).contains(&r) { - solutions.push(r); - } - } - } - return solutions; - } - bz.find_bernstein_roots(&mut solutions, 0, 0., 1.); - - solutions.sort_by(f64::total_cmp); - - solutions - } - } - } -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis.cpp#L228 -impl std::ops::Mul for &SymmetricalBasis { - type Output = SymmetricalBasis; - fn mul(self, b: Self) -> Self::Output { - let a = self; - if a.iter().all(|x| x.abs_diff_eq(DVec2::ZERO, 1e-5)) || b.iter().all(|x| x.abs_diff_eq(DVec2::ZERO, 1e-5)) { - return SymmetricalBasis(vec![DVec2::ZERO]); - } - let mut c = SymmetricalBasis(vec![DVec2::ZERO; a.len() + b.len()]); - - for j in 0..b.len() { - for i in j..(a.len() + j) { - let tri = (b[j][1] - b[j][0]) * (a[i - j][1] - a[i - j][0]); - c[i + 1] += DVec2::splat(-tri); - } - } - for j in 0..b.len() { - for i in j..(a.len() + j) { - for dim in 0..2 { - c[i][dim] += b[j][dim] * a[i - j][dim]; - } - } - } - c.normalize(); - c - } -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis.cpp#L88 -impl std::ops::Add for SymmetricalBasis { - type Output = SymmetricalBasis; - fn add(self, b: Self) -> Self::Output { - let a = self; - let out_size = a.len().max(b.len()); - let min_size = a.len().min(b.len()); - let mut result = SymmetricalBasis(vec![DVec2::ZERO; out_size]); - for i in 0..min_size { - result[i] = a[i] + b[i]; - } - for i in min_size..a.len() { - result[i] = a[i]; - } - for i in min_size..b.len() { - result[i] = b[i]; - } - result - } -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis.cpp#L110 -impl std::ops::Sub for SymmetricalBasis { - type Output = SymmetricalBasis; - fn sub(self, b: Self) -> Self::Output { - let a = self; - let out_size = a.len().max(b.len()); - let min_size = a.len().min(b.len()); - let mut result = SymmetricalBasis(vec![DVec2::ZERO; out_size]); - for i in 0..min_size { - result[i] = a[i] - b[i]; - } - for i in min_size..a.len() { - result[i] = a[i]; - } - for i in min_size..b.len() { - result[i] = -b[i]; - } - result - } -} - -impl std::ops::Deref for SymmetricalBasis { - type Target = Vec; - fn deref(&self) -> &Self::Target { - &self.0 - } -} -impl std::ops::DerefMut for SymmetricalBasis { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - -#[derive(Debug, Clone)] -pub(crate) struct SymmetricalBasisPair { - pub x: SymmetricalBasis, - pub y: SymmetricalBasis, -} - -impl SymmetricalBasisPair { - #[must_use] - pub fn derivative(&self) -> Self { - Self { - x: self.x.derivative(), - y: self.y.derivative(), - } - } - - #[must_use] - pub fn dot(&self, other: &Self) -> SymmetricalBasis { - (&self.x * &other.x) + (&self.y * &other.y) - } - - #[must_use] - pub fn cross(&self, rhs: &Self) -> SymmetricalBasis { - (&self.x * &rhs.y) - (&self.y * &rhs.x) - } -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/sbasis.h#L337 -impl std::ops::Sub for SymmetricalBasisPair { - type Output = SymmetricalBasisPair; - fn sub(self, rhs: DVec2) -> Self::Output { - let sub = |a: &SymmetricalBasis, b: f64| { - if a.iter().all(|x| x.abs_diff_eq(DVec2::ZERO, 1e-5)) { - return SymmetricalBasis(vec![DVec2::splat(-b)]); - } - let mut result = a.clone(); - result[0] -= DVec2::splat(b); - result - }; - - Self { - x: sub(&self.x, rhs.x), - y: sub(&self.y, rhs.y), - } - } -} - -#[derive(Debug, Clone)] -pub struct Bezier1d(pub Vec); - -impl std::ops::Deref for Bezier1d { - type Target = Vec; - fn deref(&self) -> &Self::Target { - &self.0 - } -} -impl std::ops::DerefMut for Bezier1d { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - -impl Bezier1d { - const MAX_DEPTH: u32 = 53; - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/bezier.cpp#L176 - #[must_use] - fn deflate(&self) -> Self { - let bz = self; - if bz.is_empty() { - return Bezier1d(Vec::new()); - } - let n = bz.len() - 1; - let mut b = Bezier1d(vec![0.; n]); - for i in 0..n { - b[i] = (n as f64 * bz[i + 1]) / (i as f64 + 1.) - } - b - } - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/bezier.h#L55 - /// Compute the value of a Bernstein-Bezier polynomial using a Horner-like fast evaluation scheme. - #[must_use] - fn value_at(&self, t: f64) -> f64 { - let bz = self; - let order = bz.len() - 1; - let u = 1. - t; - let mut bc = 1.; - let mut tn = 1.; - let mut tmp = bz[0] * u; - for i in 1..order { - tn *= t; - bc = bc * (order as f64 - i as f64 + 1.) / i as f64; - tmp = (tmp + tn * bc * bz[i]) * u; - } - tmp + tn * t * bz[bz.len() - 1] - } - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/solve-bezier.cpp#L258 - #[must_use] - fn secant(&self) -> f64 { - let bz = self; - let mut s = 0.; - let mut t = 1.; - let e = 1e-14; - let mut side = 0; - let mut r = 0.; - let mut fs = bz[0]; - let mut ft = bz[bz.len() - 1]; - - for _n in 0..100 { - r = (fs * t - ft * s) / (fs - ft); - if (t - s).abs() < e * (t + s).abs() { - return r; - } - - let fr = self.value_at(r); - - if fr * ft > 0. { - t = r; - ft = fr; - if side == -1 { - fs /= 2.; - } - side = -1; - } else if fs * fr > 0. { - s = r; - fs = fr; - if side == 1 { - ft /= 2.; - } - side = 1; - } else { - break; - } - } - r - } - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/bezier.h#L78 - fn casteljau_subdivision(&self, t: f64) -> [Self; 2] { - let v = self; - let order = v.len() - 1; - let mut left = v.clone(); - let mut right = v.clone(); - - // The Horner-like scheme gives very slightly different results, but we need - // the result of subdivision to match exactly with Bezier's valueAt function. - let val = v.value_at(t); - for i in (1..=order).rev() { - left[i - 1] = right[0]; - for j in i..v.len() { - right[j - 1] = right[j - 1] + ((right[j] - right[j - 1]) * t); - } - } - right[0] = val; - left[order] = right[0]; - [left, right] - } - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/bezier.cpp#L282 - fn derivative(&self) -> Self { - let bz = self; - if bz.len() - 1 == 1 { - return Bezier1d(vec![bz[1] - bz[0]]); - } - let mut der = Bezier1d(vec![0.; bz.len() - 1]); - - for i in 0..(bz.len() - 1) { - der[i] = (bz.len() - 1) as f64 * (bz[i + 1] - bz[i]); - } - der - } - - // https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/solve-bezier-one-d.cpp#L76 - /// given an equation in Bernstein-Bernstein form, find all roots between left_t and right_t - fn find_bernstein_roots(&self, solutions: &mut Vec, depth: u32, left_t: f64, right_t: f64) { - let bz = self; - let mut n_crossings = 0; - - let mut old_sign = sign(bz[0]); - for i in 1..bz.len() { - let sign = sign(bz[i]); - if sign != 0 { - if sign != old_sign && old_sign != 0 { - n_crossings += 1; - } - old_sign = sign; - } - } - // if last control point is zero, that counts as crossing too - if sign(bz[bz.len() - 1]) == 0 { - n_crossings += 1; - } - // no solutions - if n_crossings == 0 { - return; - } - // Unique solution - if n_crossings == 1 { - // Stop recursion when the tree is deep enough - return 1 solution at midpoint - if depth > Self::MAX_DEPTH { - let ax = right_t - left_t; - let ay = bz.last().unwrap() - bz[0]; - - solutions.push(left_t - ax * bz[0] / ay); - return; - } - - let r = bz.secant(); - solutions.push(r * right_t + (1. - r) * left_t); - return; - } - // solve recursively after subdividing control polygon - let o = bz.len() - 1; - let mut left = Bezier1d(vec![0.; o + 1]); - let mut right = bz.clone(); - let mut split_t = (left_t + right_t) * 0.5; - - // If subdivision is working poorly, split around the leftmost root of the derivative - if depth > 2 { - let dbz = bz.derivative(); - - let mut d_solutions = Vec::new(); - dbz.find_bernstein_roots(&mut d_solutions, 0, left_t, right_t); - d_solutions.sort_by(f64::total_cmp); - - let mut d_split_t = 0.5; - if !d_solutions.is_empty() { - d_split_t = d_solutions[0]; - split_t = left_t + (right_t - left_t) * d_split_t; - } - - [left, right] = bz.casteljau_subdivision(d_split_t); - } else { - // split at midpoint, because it is cheap - left[0] = right[0]; - for i in 1..bz.len() { - for j in 0..(bz.len() - i) { - right[j] = (right[j] + right[j + 1]) * 0.5; - } - left[i] = right[0]; - } - } - // Solution is exactly on the subdivision point - left.reverse(); - while right.len() - 1 > 0 && (right[0]).abs() <= 1e-10 { - // Deflate - right = right.deflate(); - left = left.deflate(); - solutions.push(split_t); - } - left.reverse(); - if right.len() - 1 > 0 { - left.find_bernstein_roots(solutions, depth + 1, left_t, split_t); - right.find_bernstein_roots(solutions, depth + 1, split_t, right_t); - } - } -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/choose.h#L61 -/// Given a multiple of binomial(n, k), modify it to the same multiple of binomial(n, k + 1). -#[must_use] -fn binomial_increment_k(b: f64, n: usize, k: usize) -> f64 { - b * (n as f64 - k as f64) / (k + 1) as f64 -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/include/2geom/choose.h#L52 -/// Given a multiple of binomial(n, k), modify it to the same multiple of binomial(n - 1, k). -#[must_use] -fn binomial_decrement_n(b: f64, n: usize, k: usize) -> f64 { - b * (n as f64 - k as f64) / n as f64 -} - -// https://gitlab.com/inkscape/lib2geom/-/blob/master/src/2geom/sbasis-to-bezier.cpp#L86 -#[must_use] -pub(crate) fn to_symmetrical_basis_pair(bezier: Bezier) -> SymmetricalBasisPair { - let n = match bezier.handles { - BezierHandles::Linear => 1, - BezierHandles::Quadratic { .. } => 2, - BezierHandles::Cubic { .. } => 3, - }; - let q = (n + 1) / 2; - let even = n % 2 == 0; - let mut sb = SymmetricalBasisPair { - x: SymmetricalBasis(vec![DVec2::ZERO; q + even as usize]), - y: SymmetricalBasis(vec![DVec2::ZERO; q + even as usize]), - }; - - let mut nck = 1.; - for k in 0..q { - let mut tjk = nck; - for j in k..q { - sb.x[j][0] += tjk * bezier[k].x; - sb.x[j][1] += tjk * bezier[n - k].x; - sb.y[j][0] += tjk * bezier[k].y; - sb.y[j][1] += tjk * bezier[n - k].y; - tjk = binomial_increment_k(tjk, n - j - k, j - k); - tjk = binomial_decrement_n(tjk, n - j - k, j - k + 1); - tjk = -tjk; - } - tjk = -nck; - for j in (k + 1)..q { - sb.x[j][0] += tjk * bezier[n - k].x; - sb.x[j][1] += tjk * bezier[k].x; - sb.y[j][0] += tjk * bezier[n - k].y; - sb.y[j][1] += tjk * bezier[k].y; - tjk = binomial_increment_k(tjk, n - j - k - 1, j - k - 1); - tjk = binomial_decrement_n(tjk, n - j - k - 1, j - k); - tjk = -tjk; - } - nck = binomial_increment_k(nck, n, k); - } - if even { - let mut tjk = if q % 2 == 1 { -1. } else { 1. }; - for k in 0..q { - sb.x[q][0] += tjk * (bezier[k].x + bezier[n - k].x); - sb.y[q][0] += tjk * (bezier[k].y + bezier[n - k].y); - tjk = binomial_increment_k(tjk, n, k); - tjk = -tjk; - } - sb.x[q][0] += tjk * bezier[q].x; - sb.x[q][1] = sb.x[q][0]; - sb.y[q][0] += tjk * bezier[q].y; - sb.y[q][1] = sb.y[q][0]; - } - sb.x[0][0] = bezier[0].x; - sb.x[0][1] = bezier[n].x; - sb.y[0][0] = bezier[0].y; - sb.y[0][1] = bezier[n].y; - - sb -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn find_bernstein_roots() { - let bz = Bezier1d(vec![50., -100., 170.]); - let mut solutions = Vec::new(); - bz.find_bernstein_roots(&mut solutions, 0, 0., 1.); - - solutions.sort_by(f64::total_cmp); - for &t in &solutions { - assert!(bz.value_at(t,).abs() < 1e-5, "roots should be roots {} {}", t, bz.value_at(t,)); - } - } -} diff --git a/libraries/bezier-rs/src/utils.rs b/libraries/bezier-rs/src/utils.rs deleted file mode 100644 index 2e80b80e8e..0000000000 --- a/libraries/bezier-rs/src/utils.rs +++ /dev/null @@ -1,423 +0,0 @@ -use crate::consts::{MAX_ABSOLUTE_DIFFERENCE, STRICT_MAX_ABSOLUTE_DIFFERENCE}; -use crate::{ManipulatorGroup, Subpath}; -use glam::{BVec2, DMat2, DVec2}; -use std::fmt::Write; - -#[derive(Copy, Clone, PartialEq)] -/// A structure which can be used to reference a particular point along a `Bezier`. -/// Assuming a 2-dimensional Bezier is represented as a parametric curve defined by components `(x(f(t), y(f(t))))`, this structure defines variants for `f(t)`. -/// - The `Parametric` variant represents the point calculated using the parametric equation of the curve at argument `t`. That is, `f(t) = t`. Speed along the curve's parametric form is not constant. `t` must lie in the range `[0, 1]`. -/// - The `Euclidean` variant represents the point calculated at a distance ratio `t` along the arc length of the curve in the range `[0, 1]`. Speed is constant along the curve's arc length. -/// - E.g. If `d` is the distance from the start point of a `Bezier` to a certain point along the curve, and `l` is the total arc length of the curve, that certain point lies at a distance ratio `t = d / l`. -/// - All `Bezier` functions will implicitly convert a Euclidean [TValue] argument to a parametric `t`-value using binary search, computed within a particular error. That is, a point at distance ratio `t*`, -/// satisfying `|t* - t| <= error`. The default error is `0.001`. Given this requires a lengthier calculation, it is not recommended to use the `Euclidean` or `EuclideanWithinError` variants frequently in computationally intensive tasks. -/// - The `EuclideanWithinError` variant functions exactly as the `Euclidean` variant, but allows the `error` to be customized when computing `t` internally. -pub enum TValue { - Parametric(f64), - Euclidean(f64), - EuclideanWithinError { t: f64, error: f64 }, -} - -#[derive(Copy, Clone, PartialEq)] -pub enum TValueType { - Parametric, - Euclidean, -} - -#[derive(Copy, Clone, PartialEq)] -pub enum SubpathTValue { - Parametric { segment_index: usize, t: f64 }, - GlobalParametric(f64), - Euclidean { segment_index: usize, t: f64 }, - GlobalEuclidean(f64), - EuclideanWithinError { segment_index: usize, t: f64, error: f64 }, - GlobalEuclideanWithinError { t: f64, error: f64 }, -} - -#[derive(Copy, Clone)] -/// Represents the shape of the join between two segments of a path which meet at an angle. -/// Bevel provides a flat connection, Miter provides a sharp connection, and Round provides a rounded connection. -/// As defined in SVG: . -pub enum Join { - /// The join is a straight line between the end points of the offset path sides from the two connecting segments. - Bevel, - /// Optional f64 is the miter limit, which defaults to 4 if `None` or a value less than 1 is provided. - /// The miter limit is used to prevent highly sharp angles from resulting in excessively long miter joins. - /// If the miter limit is exceeded, the join will be converted to a bevel join. - /// The value is the ratio of the miter length to the stroke width. - /// When that ratio is greater than the miter limit, a bevel join is used instead. - Miter(Option), - /// The join is a circular arc between the end points of the offset path sides from the two connecting segments. - Round, -} - -#[derive(Copy, Clone)] -/// Enum to represent the cap type at the ends of an outline -/// As defined in SVG: . -pub enum Cap { - Butt, - Round, - Square, -} - -/// Helper to perform the computation of a and c, where b is the provided point on the curve. -/// Given the correct power of `t` and `(1-t)`, the computation is the same for quadratic and cubic cases. -/// Relevant derivation and the definitions of a, b, and c can be found in [the projection identity section](https://pomax.github.io/bezierinfo/#abc) of Pomax's bezier curve primer. -fn compute_abc_through_points(start_point: DVec2, point_on_curve: DVec2, end_point: DVec2, t_to_nth_power: f64, nth_power_of_one_minus_t: f64) -> [DVec2; 3] { - let point_c_ratio = nth_power_of_one_minus_t / (t_to_nth_power + nth_power_of_one_minus_t); - let c = point_c_ratio * start_point + (1. - point_c_ratio) * end_point; - let ab_bc_ratio = (t_to_nth_power + nth_power_of_one_minus_t - 1.).abs() / (t_to_nth_power + nth_power_of_one_minus_t); - let a = point_on_curve + (point_on_curve - c) / ab_bc_ratio; - [a, point_on_curve, c] -} - -/// Compute `a`, `b`, and `c` for a quadratic curve that fits the start, end and point on curve at `t`. -/// The definition for the `a`, `b`, `c` points are defined in [the projection identity section](https://pomax.github.io/bezierinfo/#abc) of Pomax's bezier curve primer. -pub fn compute_abc_for_quadratic_through_points(start_point: DVec2, point_on_curve: DVec2, end_point: DVec2, t: f64) -> [DVec2; 3] { - let t_squared = t * t; - let one_minus_t = 1. - t; - let squared_one_minus_t = one_minus_t * one_minus_t; - compute_abc_through_points(start_point, point_on_curve, end_point, t_squared, squared_one_minus_t) -} - -/// Compute `a`, `b`, and `c` for a cubic curve that fits the start, end and point on curve at `t`. -/// The definition for the `a`, `b`, `c` points are defined in [the projection identity section](https://pomax.github.io/bezierinfo/#abc) of Pomax's bezier curve primer. -pub fn compute_abc_for_cubic_through_points(start_point: DVec2, point_on_curve: DVec2, end_point: DVec2, t: f64) -> [DVec2; 3] { - let t_cubed = t * t * t; - let one_minus_t = 1. - t; - let cubed_one_minus_t = one_minus_t * one_minus_t * one_minus_t; - - compute_abc_through_points(start_point, point_on_curve, end_point, t_cubed, cubed_one_minus_t) -} - -/// Find the roots of the linear equation `ax + b`. -pub fn solve_linear(a: f64, b: f64) -> [Option; 3] { - // There exist roots when `a` is not 0 - if a.abs() > MAX_ABSOLUTE_DIFFERENCE { [Some(-b / a), None, None] } else { [None; 3] } -} - -/// Find the roots of the linear equation `ax^2 + bx + c`. -/// Precompute the `discriminant` (`b^2 - 4ac`) and `two_times_a` arguments prior to calling this function for efficiency purposes. -pub fn solve_quadratic(discriminant: f64, two_times_a: f64, b: f64, c: f64) -> [Option; 3] { - let mut roots = [None; 3]; - if two_times_a.abs() <= STRICT_MAX_ABSOLUTE_DIFFERENCE { - roots = solve_linear(b, c); - } else if discriminant.abs() <= STRICT_MAX_ABSOLUTE_DIFFERENCE { - roots[0] = Some(-b / (two_times_a)); - } else if discriminant > 0. { - let root_discriminant = discriminant.sqrt(); - roots[0] = Some((-b + root_discriminant) / (two_times_a)); - roots[1] = Some((-b - root_discriminant) / (two_times_a)); - } - roots -} - -// TODO: Use an `impl Iterator` return type instead of a `Vec` -/// Solve a cubic of the form `ax^3 + bx^2 + ct + d`. -pub fn solve_cubic(a: f64, b: f64, c: f64, d: f64) -> [Option; 3] { - if a.abs() <= STRICT_MAX_ABSOLUTE_DIFFERENCE { - if b.abs() <= STRICT_MAX_ABSOLUTE_DIFFERENCE { - // If both a and b are approximately 0, treat as a linear problem - solve_linear(c, d) - } else { - // If a is approximately 0, treat as a quadratic problem - let discriminant = c * c - 4. * b * d; - solve_quadratic(discriminant, 2. * b, c, d) - } - } else { - // https://momentsingraphics.de/CubicRoots.html - let d_recip = a.recip(); - const ONETHIRD: f64 = 1. / 3.; - let scaled_c2 = b * (ONETHIRD * d_recip); - let scaled_c1 = c * (ONETHIRD * d_recip); - let scaled_c0 = d * d_recip; - if !(scaled_c0.is_finite() && scaled_c1.is_finite() && scaled_c2.is_finite()) { - // cubic coefficient is zero or nearly so. - return solve_quadratic(c * c - 4. * b * d, 2. * b, c, d); - } - let (c0, c1, c2) = (scaled_c0, scaled_c1, scaled_c2); - // (d0, d1, d2) is called "Delta" in article - let d0 = (-c2).mul_add(c2, c1); - let d1 = (-c1).mul_add(c2, c0); - let d2 = c2 * c0 - c1 * c1; - // d is called "Discriminant" - let d = 4. * d0 * d2 - d1 * d1; - // de is called "Depressed.x", Depressed.y = d0 - let de = (-2. * c2).mul_add(d0, d1); - if d < 0. { - let sq = (-0.25 * d).sqrt(); - let r = -0.5 * de; - let t1 = (r + sq).cbrt() + (r - sq).cbrt(); - [Some(t1 - c2), None, None] - } else if d == 0. { - let t1 = (-d0).sqrt().copysign(de); - [Some(t1 - c2), Some(-2. * t1 - c2).filter(|&a| a != t1 - c2), None] - } else { - let th = d.sqrt().atan2(-de) * ONETHIRD; - // (th_cos, th_sin) is called "CubicRoot" - let (th_sin, th_cos) = th.sin_cos(); - // (r0, r1, r2) is called "Root" - let r0 = th_cos; - let ss3 = th_sin * 3_f64.sqrt(); - let r1 = 0.5 * (-th_cos + ss3); - let r2 = 0.5 * (-th_cos - ss3); - let t = 2. * (-d0).sqrt(); - [Some(t.mul_add(r0, -c2)), Some(t.mul_add(r1, -c2)), Some(t.mul_add(r2, -c2))] - } - } -} - -/// Determines if two rectangles have any overlap. The rectangles are represented by a pair of coordinates that designate the top left and bottom right corners (in a graphical coordinate system). -pub fn do_rectangles_overlap(rectangle1: [DVec2; 2], rectangle2: [DVec2; 2]) -> bool { - let [bottom_left1, top_right1] = rectangle1; - let [bottom_left2, top_right2] = rectangle2; - - top_right1.x >= bottom_left2.x && top_right2.x >= bottom_left1.x && top_right2.y >= bottom_left1.y && top_right1.y >= bottom_left2.y -} - -/// Determines if a point is completely inside a rectangle, which is represented as a pair of coordinates [top-left, bottom-right]. -pub fn is_point_inside_rectangle(rect: [DVec2; 2], point: DVec2) -> bool { - let [top_left, bottom_right] = rect; - point.x > top_left.x && point.x < bottom_right.x && point.y > top_left.y && point.y < bottom_right.y -} - -/// Determines if the inner rectangle is completely inside the outer rectangle. The rectangles are represented as pairs of coordinates [top-left, bottom-right]. -pub fn is_rectangle_inside_other(inner: [DVec2; 2], outer: [DVec2; 2]) -> bool { - is_point_inside_rectangle(outer, inner[0]) && is_point_inside_rectangle(outer, inner[1]) -} - -/// Returns the intersection of two lines. The lines are given by a point on the line and its slope (represented by a vector). -pub fn line_intersection(point1: DVec2, point1_slope_vector: DVec2, point2: DVec2, point2_slope_vector: DVec2) -> DVec2 { - assert!(point1_slope_vector.normalize() != point2_slope_vector.normalize()); - - // Find the intersection when the first line is vertical - if f64_compare(point1_slope_vector.x, 0., MAX_ABSOLUTE_DIFFERENCE) { - let m2 = point2_slope_vector.y / point2_slope_vector.x; - let b2 = point2.y - m2 * point2.x; - DVec2::new(point1.x, point1.x * m2 + b2) - } - // Find the intersection when the second line is vertical - else if f64_compare(point2_slope_vector.x, 0., MAX_ABSOLUTE_DIFFERENCE) { - let m1 = point1_slope_vector.y / point1_slope_vector.x; - let b1 = point1.y - m1 * point1.x; - DVec2::new(point2.x, point2.x * m1 + b1) - } - // Find the intersection where neither line is vertical - else { - let m1 = point1_slope_vector.y / point1_slope_vector.x; - let b1 = point1.y - m1 * point1.x; - let m2 = point2_slope_vector.y / point2_slope_vector.x; - let b2 = point2.y - m2 * point2.x; - let intersection_x = (b2 - b1) / (m1 - m2); - DVec2::new(intersection_x, intersection_x * m1 + b1) - } -} - -/// Check if 3 points are collinear. -pub fn are_points_collinear(p1: DVec2, p2: DVec2, p3: DVec2) -> bool { - let matrix = DMat2::from_cols(p1 - p2, p2 - p3); - f64_compare(matrix.determinant() / 2., 0., MAX_ABSOLUTE_DIFFERENCE) -} - -/// Compute the center of the circle that passes through all three provided points. The provided points cannot be collinear. -pub fn compute_circle_center_from_points(p1: DVec2, p2: DVec2, p3: DVec2) -> Option { - if are_points_collinear(p1, p2, p3) { - return None; - } - - let midpoint_a = p1.lerp(p2, 0.5); - let midpoint_b = p2.lerp(p3, 0.5); - let midpoint_c = p3.lerp(p1, 0.5); - - let tangent_a = (p1 - p2).perp(); - let tangent_b = (p2 - p3).perp(); - let tangent_c = (p3 - p1).perp(); - - let intersect_a_b = line_intersection(midpoint_a, tangent_a, midpoint_b, tangent_b); - let intersect_b_c = line_intersection(midpoint_b, tangent_b, midpoint_c, tangent_c); - let intersect_c_a = line_intersection(midpoint_c, tangent_c, midpoint_a, tangent_a); - - Some((intersect_a_b + intersect_b_c + intersect_c_a) / 3.) -} - -/// Compare two `f64` numbers with a provided max absolute value difference. -pub fn f64_compare(a: f64, b: f64, max_abs_diff: f64) -> bool { - (a - b).abs() < max_abs_diff -} - -/// Determine if an `f64` number is within a given range by using a max absolute value difference comparison. -pub fn f64_approximately_in_range(value: f64, min: f64, max: f64, max_abs_diff: f64) -> bool { - (min..=max).contains(&value) || f64_compare(value, min, max_abs_diff) || f64_compare(value, max, max_abs_diff) -} - -/// Compare the two values in a `DVec2` independently with a provided max absolute value difference. -pub fn dvec2_compare(a: DVec2, b: DVec2, max_abs_diff: f64) -> BVec2 { - BVec2::new((a.x - b.x).abs() < max_abs_diff, (a.y - b.y).abs() < max_abs_diff) -} - -/// Determine if the values in a `DVec2` are within a given range independently by using a max absolute value difference comparison. -pub fn dvec2_approximately_in_range(point: DVec2, min_corner: DVec2, max_corner: DVec2, max_abs_diff: f64) -> BVec2 { - (point.cmpge(min_corner) & point.cmple(max_corner)) | dvec2_compare(point, min_corner, max_abs_diff) | dvec2_compare(point, max_corner, max_abs_diff) -} - -/// Calculate a new position for a point given its original position, a unit vector in the desired direction, and a distance to move it by. -pub fn scale_point_from_direction_vector(point: DVec2, direction_unit_vector: DVec2, should_flip_direction: bool, distance: f64) -> DVec2 { - let should_reverse_factor = if should_flip_direction { -1. } else { 1. }; - point + distance * direction_unit_vector * should_reverse_factor -} - -/// Scale a point by a given distance with respect to the provided origin. -pub fn scale_point_from_origin(point: DVec2, origin: DVec2, should_flip_direction: bool, distance: f64) -> DVec2 { - scale_point_from_direction_vector(point, (origin - point).normalize(), should_flip_direction, distance) -} - -/// Computes the necessary details to form a circular join from `left` to `right`, along a circle around `center`. -/// By default, the angle is assumed to be 180 degrees. -pub fn compute_circular_subpath_details(left: DVec2, arc_point: DVec2, right: DVec2, center: DVec2, angle: Option) -> (DVec2, ManipulatorGroup, DVec2) { - let center_to_arc_point = arc_point - center; - - // Based on https://pomax.github.io/bezierinfo/#circles_cubic - let handle_offset_factor = if let Some(angle) = angle { 4. / 3. * (angle / 4.).tan() } else { 0.551784777779014 }; - - ( - left - (left - center).perp() * handle_offset_factor, - ManipulatorGroup::new( - arc_point, - Some(arc_point + center_to_arc_point.perp() * handle_offset_factor), - Some(arc_point - center_to_arc_point.perp() * handle_offset_factor), - ), - right + (right - center).perp() * handle_offset_factor, - ) -} - -pub fn format_point(svg: &mut String, prefix: &str, x: f64, y: f64) -> std::fmt::Result { - write!(svg, "{prefix}{:.6}", x)?; - let trimmed_length = svg.trim_end_matches('0').trim_end_matches('.').len(); - svg.truncate(trimmed_length); - - write!(svg, ",{:.6}", y)?; - let trimmed_length = svg.trim_end_matches('0').trim_end_matches('.').len(); - svg.truncate(trimmed_length); - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::consts::MAX_ABSOLUTE_DIFFERENCE; - use crate::{Bezier, EmptyId}; - - /// Compare vectors of `f64`s with a provided max absolute value difference. - fn f64_compare_vector(a: Vec, b: Vec, max_abs_diff: f64) -> bool { - a.len() == b.len() && a.into_iter().zip(b).all(|(a, b)| f64_compare(a, b, max_abs_diff)) - } - - fn collect_roots(mut roots: [Option; 3]) -> Vec { - roots.sort_unstable_by(|a, b| a.partial_cmp(b).unwrap()); - roots.into_iter().flatten().collect() - } - - #[test] - fn test_solve_linear() { - // Line that is on the x-axis - assert!(collect_roots(solve_linear(0., 0.)).is_empty()); - // Line that is parallel to but not on the x-axis - assert!(collect_roots(solve_linear(0., 1.)).is_empty()); - // Line with a non-zero slope - assert!(collect_roots(solve_linear(2., -8.)) == vec![4.]); - } - - #[test] - fn test_solve_cubic() { - // discriminant == 0 - let roots1 = collect_roots(solve_cubic(1., 0., 0., 0.)); - assert!(roots1 == vec![0.]); - - let roots2 = collect_roots(solve_cubic(1., 3., 0., -4.)); - assert!(roots2 == vec![-2., 1.]); - - // p == 0 - let roots3 = collect_roots(solve_cubic(1., 0., 0., -1.)); - assert!(roots3 == vec![1.]); - - // discriminant > 0 - let roots4 = collect_roots(solve_cubic(1., 3., 0., 2.)); - assert!(f64_compare_vector(roots4, vec![-3.196], MAX_ABSOLUTE_DIFFERENCE)); - - // discriminant < 0 - let roots5 = collect_roots(solve_cubic(1., 3., 0., -1.)); - assert!(f64_compare_vector(roots5, vec![-2.879, -0.653, 0.532], MAX_ABSOLUTE_DIFFERENCE)); - - // quadratic - let roots6 = collect_roots(solve_cubic(0., 3., 0., -3.)); - assert!(roots6 == vec![-1., 1.]); - - // linear - let roots7 = collect_roots(solve_cubic(0., 0., 1., -1.)); - assert!(roots7 == vec![1.]); - } - - #[test] - fn test_do_rectangles_overlap() { - // Rectangles overlap - assert!(do_rectangles_overlap([DVec2::new(0., 0.), DVec2::new(20., 20.)], [DVec2::new(10., 10.), DVec2::new(30., 20.)])); - // Rectangles share a side - assert!(do_rectangles_overlap([DVec2::new(0., 0.), DVec2::new(10., 10.)], [DVec2::new(10., 10.), DVec2::new(30., 30.)])); - // Rectangle inside the other - assert!(do_rectangles_overlap([DVec2::new(0., 0.), DVec2::new(10., 10.)], [DVec2::new(2., 2.), DVec2::new(6., 4.)])); - // No overlap, rectangles are beside each other - assert!(!do_rectangles_overlap([DVec2::new(0., 0.), DVec2::new(10., 10.)], [DVec2::new(20., 0.), DVec2::new(30., 10.)])); - // No overlap, rectangles are above and below each other - assert!(!do_rectangles_overlap([DVec2::new(0., 0.), DVec2::new(10., 10.)], [DVec2::new(0., 20.), DVec2::new(20., 30.)])); - } - - #[test] - fn test_is_rectangle_inside_other() { - assert!(!is_rectangle_inside_other([DVec2::new(10., 10.), DVec2::new(50., 50.)], [DVec2::new(10., 10.), DVec2::new(50., 50.)])); - assert!(is_rectangle_inside_other( - [DVec2::new(10.01, 10.01), DVec2::new(49., 49.)], - [DVec2::new(10., 10.), DVec2::new(50., 50.)] - )); - assert!(!is_rectangle_inside_other([DVec2::new(5., 5.), DVec2::new(50., 9.99)], [DVec2::new(10., 10.), DVec2::new(50., 50.)])); - } - - #[test] - fn test_find_intersection() { - // y = 2x + 10 - // y = 5x + 4 - // intersect at (2, 14) - - let start1 = DVec2::new(0., 10.); - let end1 = DVec2::new(0., 4.); - let start_direction1 = DVec2::new(1., 2.); - let end_direction1 = DVec2::new(1., 5.); - assert!(line_intersection(start1, start_direction1, end1, end_direction1) == DVec2::new(2., 14.)); - - // y = x - // y = -x + 8 - // intersect at (4, 4) - - let start2 = DVec2::new(0., 0.); - let end2 = DVec2::new(8., 0.); - let start_direction2 = DVec2::new(1., 1.); - let end_direction2 = DVec2::new(1., -1.); - assert!(line_intersection(start2, start_direction2, end2, end_direction2) == DVec2::new(4., 4.)); - } - - #[test] - fn test_are_points_collinear() { - assert!(are_points_collinear(DVec2::new(2., 4.), DVec2::new(6., 8.), DVec2::new(4., 6.))); - assert!(!are_points_collinear(DVec2::new(1., 4.), DVec2::new(6., 8.), DVec2::new(4., 6.))); - } - - #[test] - fn test_compute_circle_center_from_points() { - // 3/4 of unit circle - let center1 = compute_circle_center_from_points(DVec2::new(0., 1.), DVec2::new(-1., 0.), DVec2::new(1., 0.)); - assert_eq!(center1.unwrap(), DVec2::new(0., 0.)); - // 1/4 of unit circle - let center2 = compute_circle_center_from_points(DVec2::new(-1., 0.), DVec2::new(0., 1.), DVec2::new(1., 0.)); - assert_eq!(center2.unwrap(), DVec2::new(0., 0.)); - } -} diff --git a/libraries/dyn-any/derive/src/lib.rs b/libraries/dyn-any/derive/src/lib.rs index 0bfe526def..23fa506fb4 100644 --- a/libraries/dyn-any/derive/src/lib.rs +++ b/libraries/dyn-any/derive/src/lib.rs @@ -53,7 +53,7 @@ pub fn system_desc_derive(input: TokenStream) -> TokenStream { } fn replace_lifetimes(generics: &syn::Generics, replacement: &str) -> Vec { - let params = generics + generics .params .iter() .map(|param| { @@ -72,6 +72,5 @@ fn replace_lifetimes(generics: &syn::Generics, replacement: &str) -> Vec>(); - params + .collect::>() } diff --git a/libraries/dyn-any/src/lib.rs b/libraries/dyn-any/src/lib.rs index 57bb10a796..047557a4b4 100644 --- a/libraries/dyn-any/src/lib.rs +++ b/libraries/dyn-any/src/lib.rs @@ -363,31 +363,31 @@ fn simple_downcast_panic() { assert_eq!(*downcast::(x).expect("attempted to perform invalid downcast"), 3_u32); } -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub trait WasmNotSend: Send {} -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub trait WasmNotSend {} -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] impl WasmNotSend for T {} -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] impl WasmNotSend for T {} -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub trait WasmNotSync: Sync {} -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub trait WasmNotSync {} -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] impl WasmNotSync for T {} -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] impl WasmNotSync for T {} -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] #[cfg(feature = "alloc")] pub type DynFuture<'n, T> = Pin + 'n + Send>>; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] #[cfg(feature = "alloc")] pub type DynFuture<'n, T> = Pin + 'n>>; diff --git a/libraries/math-parser/Cargo.toml b/libraries/math-parser/Cargo.toml index 999631ff3e..419d0acb8b 100644 --- a/libraries/math-parser/Cargo.toml +++ b/libraries/math-parser/Cargo.toml @@ -9,7 +9,7 @@ license = "MIT OR Apache-2.0" [dependencies] pest = "2.7" -pest_derive = "2.7.11" +pest_derive = "2.7" thiserror = "2.0" lazy_static = "1.5" num-complex = "0.4" diff --git a/libraries/math-parser/src/parser.rs b/libraries/math-parser/src/parser.rs index 101995d87b..e707b500f4 100644 --- a/libraries/math-parser/src/parser.rs +++ b/libraries/math-parser/src/parser.rs @@ -135,7 +135,7 @@ fn parse_lit(mut pairs: Pairs) -> Result<(Literal, Unit), ParseError> { let unit_pairs = unit_pair.into_inner(); // Get the inner pairs for the unit let (unit, scale) = parse_unit(unit_pairs)?; - println!("found unit: {:?}", unit); + println!("found unit: {unit:?}"); Ok(( match literal { diff --git a/libraries/path-bool/Cargo.toml b/libraries/path-bool/Cargo.toml index d85de28d26..dc4937bf52 100644 --- a/libraries/path-bool/Cargo.toml +++ b/libraries/path-bool/Cargo.toml @@ -27,6 +27,10 @@ default = ["parsing"] glam = "0.29.0" regex = "1.10.6" slotmap = "1.0.7" +lyon_geom = "1.0" +roots = "0.0.8" +rustc-hash = "2.0.0" +smallvec = "1.13.2" [dev-dependencies] glob = "0.3" diff --git a/libraries/path-bool/shell.nix b/libraries/path-bool/shell.nix index cf7070fd37..08980c1f09 100644 --- a/libraries/path-bool/shell.nix +++ b/libraries/path-bool/shell.nix @@ -59,13 +59,6 @@ in samply cargo-flamegraph - # For Tauri - openssl - glib - gtk3 - libsoup - webkitgtk - # For Rawkit tests libraw diff --git a/libraries/path-bool/src/lib.rs b/libraries/path-bool/src/lib.rs index 6aad889658..e80a57fa49 100644 --- a/libraries/path-bool/src/lib.rs +++ b/libraries/path-bool/src/lib.rs @@ -9,8 +9,8 @@ mod parsing { mod util { pub(crate) mod aabb; pub(crate) mod epsilons; + pub(crate) mod grid; pub(crate) mod math; - pub(crate) mod quad_tree; } mod path; #[cfg(test)] @@ -311,4 +311,23 @@ mod test { assert_eq!(result.len(), 1); assert!(!result[0].is_empty()); } + #[test] + fn real_01() { + let a = path_from_path_data( + "M 212.67152,105 A 64.171516,64.171516 0 0 1 148.5,169.17152 64.171516,64.171516 0 0 1 84.328484,105 64.171516,64.171516 0 0 1 148.5,40.828484 64.171516,64.171516 0 0 1 212.67152,105 Z", + ) + .unwrap(); + let b = path_from_path_data( + "m 83.755387,112.6962 h -7.62 v 37.0332 h 7.62 z m 22.097973,9.144 c -3.4544,0 -5.892801,1.4732 -7.620001,4.5212 v -4.064 H 91.12136 v 38.5064 h 7.111999 v -14.3256 c 1.7272,3.048 4.165601,4.4704 7.620001,4.4704 6.604,0 11.4808,-6.1976 11.4808,-14.5288 0,-8.0772 -4.3688,-14.5796 -11.4808,-14.5796 z m -1.6256,5.9436 c 3.6068,0 5.9944,3.5052 5.9944,8.7376 0,4.9784 -2.4892,8.4836 -5.9944,8.4836 -3.556,0 -5.994401,-3.4544 -5.994401,-8.5852 0,-5.1308 2.438401,-8.636 5.994401,-8.636 z m 23.62201,13.97 h -6.9596 c 0.2032,5.9944 4.6228,9.144 12.954,9.144 9.6012,0 11.9888,-5.4864 11.9888,-9.2964 0,-3.556 -1.778,-5.842 -5.3848,-6.9088 l -8.9916,-2.5908 c -1.9812,-0.6096 -2.4892,-1.016 -2.4892,-2.1336 0,-1.524 1.6256,-2.54 4.1148,-2.54 3.4036,0 5.08,1.2192 5.1308,3.7084 h 6.858 c -0.1016,-5.7912 -4.572,-9.2964 -11.938,-9.2964 -6.9596,0 -11.2776,3.5052 -11.2776,9.144 0,5.3848 4.4196,6.2484 5.9944,6.7564 l 8.4836,2.6416 c 1.778,0.5588 2.3876,1.1176 2.3876,2.2352 0,1.6764 -1.9812,2.6924 -5.2832,2.6924 -4.4704,0 -5.1816,-1.6764 -5.588,-3.556 z m 47.59959,7.9756 v -27.432 h -7.112 v 17.1704 c 0,3.2512 -2.286,5.3848 -5.7404,5.3848 -3.048,0 -4.572,-1.6256 -4.572,-4.9276 v -17.6276 h -7.112 v 19.1008 c 0,6.0452 3.3528,9.4996 9.1948,9.4996 3.7084,0 6.1976,-1.3716 8.2296,-4.4196 v 3.2512 z m 6.60404,-27.432 v 27.432 h 7.112 v -16.4592 c 0,-3.3528 1.8288,-5.3848 4.8768,-5.3848 2.3876,0 3.8608,1.3716 3.8608,3.556 v 18.288 h 7.112 v -16.4592 c 0,-3.3528 1.8288,-5.3848 4.8768,-5.3848 2.3876,0 3.8608,1.3716 3.8608,3.556 v 18.288 h 7.112 v -19.4056 c 0,-5.334 -3.2512,-8.4836 -8.7376,-8.4836 -3.4544,0 -5.8928,1.2192 -8.0264,4.064 -1.3208,-2.5908 -4.064,-4.064 -7.4676,-4.064 -3.1496,0 -5.1816,1.0668 -7.5184,3.8608 v -3.4036 z M 81.012192,49.196201 h -7.62 v 37.0332 h 25.3492 v -6.35 h -17.7292 z m 35.305978,9.144 c -8.382,0 -13.5128,5.5372 -13.5128,14.5288 0,9.0424 5.1308,14.5288 13.5636,14.5288 8.3312,0 13.5636,-5.5372 13.5636,-14.3256 0,-9.2964 -5.0292,-14.732 -13.6144,-14.732 z m 0.0508,5.7404 c 3.9116,0 6.4516,3.5052 6.4516,8.89 0,5.1308 -2.6416,8.6868 -6.4516,8.6868 -3.8608,0 -6.4516,-3.556 -6.4516,-8.7884 0,-5.2324 2.5908,-8.7884 6.4516,-8.7884 z m 18.89761,-5.2832 v 27.432 h 7.112 v -14.5796 c 0,-4.1656 2.0828,-6.2484 6.2484,-6.2484 0.762,0 1.27,0.0508 2.2352,0.2032 v -7.2136 c -0.4064,-0.0508 -0.6604,-0.0508 -0.8636,-0.0508 -3.2512,0 -6.096,2.1336 -7.62,5.842 v -5.3848 z m 31.34362,-0.4572 c -7.874,0 -12.7,5.6896 -12.7,14.8844 0,8.7884 4.7752,14.1732 12.5476,14.1732 6.14679,0 11.12519,-3.5052 12.69999,-8.89 h -7.0104 c -0.8636,2.1844 -2.8448,3.4544 -5.43559,3.4544 -4.7752,0 -5.5372,-3.5052 -5.6896,-7.2136 h 18.38959 c 0.0508,-0.6096 0.0508,-0.8636 0.0508,-1.2192 0,-12.1412 -7.366,-15.1892 -12.85239,-15.1892 z m 5.43559,11.684 H 161.1238 c 0.4572,-4.1656 2.2352,-6.2484 5.3848,-6.2484 3.30199,0 5.23239,2.2352 5.53719,6.2484 z m 12.75081,-11.2268 v 27.432 h 7.112 v -16.4592 c 0,-3.3528 1.8288,-5.3848 4.8768,-5.3848 2.3876,0 3.8608,1.3716 3.8608,3.556 v 18.288 h 7.112 v -16.4592 c 0,-3.3528 1.8288,-5.3848 4.8768,-5.3848 2.3876,0 3.8608,1.3716 3.8608,3.556 v 18.288 h 7.112 v -19.4056 c 0,-5.334 -3.2512,-8.4836 -8.7376,-8.4836 -3.4544,0 -5.8928,1.2192 -8.0264,4.064 -1.3208,-2.5908 -4.064,-4.064 -7.4676,-4.064 -3.1496,0 -5.1816,1.0668 -7.5184,3.8608 v -3.4036 z", + ) + .unwrap(); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } } diff --git a/libraries/path-bool/src/parsing/path_data.rs b/libraries/path-bool/src/parsing/path_data.rs index 6e6ed2a7d1..076f424795 100644 --- a/libraries/path-bool/src/parsing/path_data.rs +++ b/libraries/path-bool/src/parsing/path_data.rs @@ -45,7 +45,7 @@ pub fn commands_from_path_data(d: &str) -> Result, BooleanError *i += cap[0].len(); &cap[1] == "1" } else { - panic!("Invalid path data. Expected a flag at index {}", i); + panic!("Invalid path data. Expected a flag at index {i}"); } }; @@ -128,8 +128,8 @@ pub fn path_to_path_data(path: &Path, eps: f64) -> String { path_to_commands(path.iter(), eps) .map(|cmd| match cmd { PathCommand::Absolute(abs_cmd) => match abs_cmd { - AbsolutePathCommand::H(dx) => format!("H {:.12}", dx), - AbsolutePathCommand::V(dy) => format!("V {:.12}", dy), + AbsolutePathCommand::H(dx) => format!("H {dx:.12}"), + AbsolutePathCommand::V(dy) => format!("V {dy:.12}"), AbsolutePathCommand::M(p) => format!("M {:.12},{:.12}", p.x, p.y), AbsolutePathCommand::L(p) => format!("L {:.12},{:.12}", p.x, p.y), AbsolutePathCommand::C(p1, p2, p3) => format!("C {:.12},{:.12} {:.12},{:.12} {:.12},{:.12}", p1.x, p1.y, p2.x, p2.y, p3.x, p3.y), @@ -146,18 +146,18 @@ pub fn path_to_path_data(path: &Path, eps: f64) -> String { AbsolutePathCommand::Z => "Z".to_string(), }, PathCommand::Relative(rel_cmd) => match rel_cmd { - RelativePathCommand::M(dx, dy) => format!("m {:.12},{:.12}", dx, dy), - RelativePathCommand::L(dx, dy) => format!("l {:.12},{:.12}", dx, dy), - RelativePathCommand::H(dx) => format!("h {:.12}", dx), - RelativePathCommand::V(dy) => format!("v {:.12}", dy), - RelativePathCommand::C(dx1, dy1, dx2, dy2, dx, dy) => format!("c{:.12},{:.12} {:.12},{:.12} {:.12},{:.12}", dx1, dy1, dx2, dy2, dx, dy), + RelativePathCommand::M(dx, dy) => format!("m {dx:.12},{dy:.12}"), + RelativePathCommand::L(dx, dy) => format!("l {dx:.12},{dy:.12}"), + RelativePathCommand::H(dx) => format!("h {dx:.12}"), + RelativePathCommand::V(dy) => format!("v {dy:.12}"), + RelativePathCommand::C(dx1, dy1, dx2, dy2, dx, dy) => format!("c{dx1:.12},{dy1:.12} {dx2:.12},{dy2:.12} {dx:.12},{dy:.12}"), RelativePathCommand::S(dx2, dy2, dx, dy) => { - format!("s {:.12},{:.12} {:.12},{:.12}", dx2, dy2, dx, dy) + format!("s {dx2:.12},{dy2:.12} {dx:.12},{dy:.12}") } RelativePathCommand::Q(dx1, dy1, dx, dy) => { - format!("q {:.12},{:.12} {:.12},{:.12}", dx1, dy1, dx, dy) + format!("q {dx1:.12},{dy1:.12} {dx:.12},{dy:.12}") } - RelativePathCommand::T(dx, dy) => format!("t{:.12},{:.12}", dx, dy), + RelativePathCommand::T(dx, dy) => format!("t{dx:.12},{dy:.12}"), RelativePathCommand::A(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, dx, dy) => { format!("a {:.12} {:.12} {:.12} {} {} {:.12},{:.12}", rx, ry, x_axis_rotation, large_arc_flag as u8, sweep_flag as u8, dx, dy) } diff --git a/libraries/path-bool/src/path/intersection_path_segment.rs b/libraries/path-bool/src/path/intersection_path_segment.rs index 74559fd5fb..1ef931b868 100644 --- a/libraries/path-bool/src/path/intersection_path_segment.rs +++ b/libraries/path-bool/src/path/intersection_path_segment.rs @@ -5,6 +5,17 @@ use crate::line_segment_aabb::line_segment_aabb_intersect; use crate::math::lerp; use crate::path_segment::PathSegment; use glam::DVec2; +use lyon_geom::{CubicBezierSegment, Point}; + +/// Convert PathSegment::Cubic to lyon_geom::CubicBezierSegment +fn path_segment_cubic_to_lyon(start: DVec2, ctrl1: DVec2, ctrl2: DVec2, end: DVec2) -> CubicBezierSegment { + CubicBezierSegment { + from: Point::new(start.x, start.y), + ctrl1: Point::new(ctrl1.x, ctrl1.y), + ctrl2: Point::new(ctrl2.x, ctrl2.y), + to: Point::new(end.x, end.y), + } +} #[derive(Clone)] struct IntersectionSegment { @@ -23,13 +34,13 @@ fn subdivide_intersection_segment(int_seg: &IntersectionSegment) -> [Intersectio seg: seg0, start_param: int_seg.start_param, end_param: mid_param, - bounding_box: seg0.bounding_box(), + bounding_box: seg0.approx_bounding_box(), }, IntersectionSegment { seg: seg1, start_param: mid_param, end_param: int_seg.end_param, - bounding_box: seg1.bounding_box(), + bounding_box: seg1.approx_bounding_box(), }, ] } @@ -87,15 +98,27 @@ pub fn segments_equal(seg0: &PathSegment, seg1: &PathSegment, point_epsilon: f64 } pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoints: bool, eps: &Epsilons) -> Vec<[f64; 2]> { - if let (PathSegment::Line(start0, end0), PathSegment::Line(start1, end1)) = (seg0, seg1) { - if let Some(st) = line_segment_intersection([*start0, *end0], [*start1, *end1], eps.param) { - if !endpoints && (st.0 < eps.param || st.0 > 1. - eps.param) && (st.1 < eps.param || st.1 > 1. - eps.param) { - return vec![]; + match (seg0, seg1) { + (PathSegment::Line(start0, end0), PathSegment::Line(start1, end1)) => { + if let Some(st) = line_segment_intersection([*start0, *end0], [*start1, *end1], eps.param) { + if !endpoints && (st.0 < eps.param || st.0 > 1. - eps.param) && (st.1 < eps.param || st.1 > 1. - eps.param) { + return vec![]; + } + return vec![st.into()]; } - return vec![st.into()]; } - } + (PathSegment::Cubic(s1, c11, c21, e1), PathSegment::Cubic(s2, c12, c22, e2)) => { + let path1 = path_segment_cubic_to_lyon(*s1, *c11, *c21, *e1); + let path2 = path_segment_cubic_to_lyon(*s2, *c12, *c22, *e2); + let intersections = path1.cubic_intersections_t(&path2); + let intersections: Vec<_> = intersections.into_iter().map(|(s, t)| [s, t]).collect(); + return intersections; + } + _ => (), + }; + + // Fallback for quadratics and arc segments // https://math.stackexchange.com/questions/20321/how-can-i-tell-when-two-cubic-b%C3%A9zier-curves-intersect let mut pairs = vec![( @@ -103,13 +126,13 @@ pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoin seg: *seg0, start_param: 0., end_param: 1., - bounding_box: seg0.bounding_box(), + bounding_box: seg0.approx_bounding_box(), }, IntersectionSegment { seg: *seg1, start_param: 0., end_param: 1., - bounding_box: seg1.bounding_box(), + bounding_box: seg1.approx_bounding_box(), }, )]; let mut next_pairs = Vec::new(); @@ -123,7 +146,7 @@ pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoin while !pairs.is_empty() { next_pairs.clear(); - if pairs.len() > 1000 { + if pairs.len() > 256 { return calculate_overlap_intersections(seg0, seg1, eps); } @@ -169,10 +192,6 @@ pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoin std::mem::swap(&mut pairs, &mut next_pairs); } - if !endpoints { - params.retain(|[s, t]| (s > &eps.param && s < &(1. - eps.param)) || (t > &eps.param && t < &(1. - eps.param))); - } - params } diff --git a/libraries/path-bool/src/path/line_segment_aabb.rs b/libraries/path-bool/src/path/line_segment_aabb.rs index 86b7fa157a..38fbdf7d98 100644 --- a/libraries/path-bool/src/path/line_segment_aabb.rs +++ b/libraries/path-bool/src/path/line_segment_aabb.rs @@ -10,15 +10,15 @@ const TOP: u8 = 1 << 3; fn out_code(x: f64, y: f64, bounding_box: &Aabb) -> u8 { let mut code = INSIDE; - if x < bounding_box.left { + if x < bounding_box.left() { code |= LEFT; - } else if x > bounding_box.right { + } else if x > bounding_box.right() { code |= RIGHT; } - if y < bounding_box.top { + if y < bounding_box.top() { code |= BOTTOM; - } else if y > bounding_box.bottom { + } else if y > bounding_box.bottom() { code |= TOP; } @@ -57,20 +57,20 @@ pub(crate) fn line_segment_aabb_intersect(seg: LineSegment, bounding_box: &Aabb) // outcode bit being tested guarantees the denominator is non-zero if (outcode_out & TOP) != 0 { // point is above the clip window - x = p0.x + (p1.x - p0.x) * (bounding_box.bottom - p0.y) / (p1.y - p0.y); - y = bounding_box.bottom; + x = p0.x + (p1.x - p0.x) * (bounding_box.bottom() - p0.y) / (p1.y - p0.y); + y = bounding_box.bottom(); } else if (outcode_out & BOTTOM) != 0 { // point is below the clip window - x = p0.x + (p1.x - p0.x) * (bounding_box.top - p0.y) / (p1.y - p0.y); - y = bounding_box.top; + x = p0.x + (p1.x - p0.x) * (bounding_box.top() - p0.y) / (p1.y - p0.y); + y = bounding_box.top(); } else if (outcode_out & RIGHT) != 0 { // point is to the right of clip window - y = p0.y + (p1.y - p0.y) * (bounding_box.right - p0.x) / (p1.x - p0.x); - x = bounding_box.right; + y = p0.y + (p1.y - p0.y) * (bounding_box.right() - p0.x) / (p1.x - p0.x); + x = bounding_box.right(); } else if (outcode_out & LEFT) != 0 { // point is to the left of clip window - y = p0.y + (p1.y - p0.y) * (bounding_box.left - p0.x) / (p1.x - p0.x); - x = bounding_box.left; + y = p0.y + (p1.y - p0.y) * (bounding_box.left() - p0.x) / (p1.x - p0.x); + x = bounding_box.left(); } // Now we move outside point to intersection point to clip diff --git a/libraries/path-bool/src/path/path_segment.rs b/libraries/path-bool/src/path/path_segment.rs index f3246d8f12..eb0b6443ec 100644 --- a/libraries/path-bool/src/path/path_segment.rs +++ b/libraries/path-bool/src/path/path_segment.rs @@ -588,21 +588,16 @@ impl PathSegment { /// An [`Aabb`] representing the axis-aligned bounding box of the segment. pub(crate) fn bounding_box(&self) -> Aabb { match *self { - PathSegment::Line(start, end) => Aabb { - top: start.y.min(end.y), - right: start.x.max(end.x), - bottom: start.y.max(end.y), - left: start.x.min(end.x), - }, + PathSegment::Line(start, end) => Aabb::new(start.x.min(end.x), start.y.min(end.y), start.x.max(end.x), start.y.max(end.y)), PathSegment::Cubic(p1, p2, p3, p4) => { let (left, right) = cubic_bounding_interval(p1.x, p2.x, p3.x, p4.x); let (top, bottom) = cubic_bounding_interval(p1.y, p2.y, p3.y, p4.y); - Aabb { top, right, bottom, left } + Aabb::new(left, top, right, bottom) } PathSegment::Quadratic(p1, p2, p3) => { let (left, right) = quadratic_bounding_interval(p1.x, p2.x, p3.x); let (top, bottom) = quadratic_bounding_interval(p1.y, p2.y, p3.y); - Aabb { top, right, bottom, left } + Aabb::new(left, top, right, bottom) } PathSegment::Arc(start, rx, ry, phi, _, _, end) => { if let Some(center_param) = self.arc_segment_to_center() { @@ -627,11 +622,11 @@ impl PathSegment { } else { // TODO: Don't convert to cubics let cubics = self.arc_segment_to_cubics(PI / 16.); - let mut bounding_box = None; + let mut bounding_box = bounding_box_around_point(start, 0.); for cubic_seg in cubics { - bounding_box = Some(merge_bounding_boxes(bounding_box, &cubic_seg.bounding_box())); + bounding_box = merge_bounding_boxes(&bounding_box, &cubic_seg.bounding_box()); } - bounding_box.unwrap_or_else(|| bounding_box_around_point(start, 0.)) + bounding_box } } else { extend_bounding_box(Some(bounding_box_around_point(start, 0.)), end) @@ -640,6 +635,30 @@ impl PathSegment { } } + /// Computes a loose bounding box that surrounds all anchors, but also the handles of cubic and quadratic segments. + /// This will usually be larger than the actual bounding box, but is faster to compute because it does not have to find where each curve reaches its maximum and minimum. + pub(crate) fn approx_bounding_box(&self) -> Aabb { + match *self { + PathSegment::Cubic(p1, p2, p3, p4) => { + // Use the control points to create a bounding box + let left = p1.x.min(p2.x).min(p3.x).min(p4.x); + let right = p1.x.max(p2.x).max(p3.x).max(p4.x); + let top = p1.y.min(p2.y).min(p3.y).min(p4.y); + let bottom = p1.y.max(p2.y).max(p3.y).max(p4.y); + Aabb::new(left, top, right, bottom) + } + PathSegment::Quadratic(p1, p2, p3) => { + // Use the control points to create a bounding box + let left = p1.x.min(p2.x).min(p3.x); + let right = p1.x.max(p2.x).max(p3.x); + let top = p1.y.min(p2.y).min(p3.y); + let bottom = p1.y.max(p2.y).max(p3.y); + Aabb::new(left, top, right, bottom) + } + seg => seg.bounding_box(), + } + } + /// Splits the path segment at a given parameter value. /// /// # Arguments diff --git a/libraries/path-bool/src/path_boolean.rs b/libraries/path-bool/src/path_boolean.rs index fa858e9360..34d178559e 100644 --- a/libraries/path-bool/src/path_boolean.rs +++ b/libraries/path-bool/src/path_boolean.rs @@ -63,21 +63,30 @@ new_key_type! { // // SPDX-License-Identifier: MIT -use crate::aabb::{Aabb, bounding_box_around_point, bounding_box_max_extent, merge_bounding_boxes}; +use crate::aabb::{Aabb, bounding_box_max_extent, extend_bounding_box, merge_bounding_boxes}; use crate::epsilons::Epsilons; +use crate::grid::{BitVec, Grid}; use crate::intersection_path_segment::{path_segment_intersection, segments_equal}; use crate::path::Path; use crate::path_cubic_segment_self_intersection::path_cubic_segment_self_intersection; use crate::path_segment::PathSegment; #[cfg(feature = "logging")] use crate::path_to_path_data; -use crate::quad_tree::QuadTree; -use glam::DVec2; + +use glam::{BVec2, DVec2, I64Vec2}; +use roots::{Roots, find_roots_cubic}; +use rustc_hash::FxHashMap as HashMap; +use rustc_hash::FxHashSet as HashSet; use slotmap::{SlotMap, new_key_type}; +use smallvec::SmallVec; use std::cmp::Ordering; -use std::collections::{HashMap, HashSet, VecDeque}; +use std::collections::VecDeque; use std::fmt::Display; +fn new_hash_map(capacity: usize) -> HashMap { + HashMap::with_capacity_and_hasher(capacity, Default::default()) +} + /// Represents the types of boolean operations that can be performed on paths. #[derive(Debug, Clone, Copy)] pub enum PathBooleanOperation { @@ -128,9 +137,6 @@ pub enum FillRule { EvenOdd, } -const INTERSECTION_TREE_DEPTH: usize = 8; -const POINT_TREE_DEPTH: usize = 8; - pub const EPS: Epsilons = Epsilons { point: 1e-5, linear: 1e-4, @@ -153,7 +159,7 @@ pub struct MajorGraphEdge { pub struct MajorGraphVertex { #[cfg_attr(not(feature = "logging"), expect(dead_code))] pub point: DVec2, - outgoing_edges: Vec, + outgoing_edges: SmallVec<[MajorEdgeKey; 4]>, } /// Represents the initial graph structure used in boolean operations. @@ -167,7 +173,7 @@ struct MajorGraph { #[derive(Debug, Clone, PartialEq)] struct MinorGraphEdge { - segments: Vec, + segments: SmallVec<[PathSegment; 4]>, parent: u8, incident_vertices: [MinorVertexKey; 2], direction_flag: Direction, @@ -215,7 +221,7 @@ impl PartialOrd for MinorGraphEdge { #[derive(Debug, Clone, Default)] struct MinorGraphVertex { - outgoing_edges: Vec, + outgoing_edges: SmallVec<[MinorEdgeKey; 8]>, } #[derive(Debug, Clone)] @@ -244,6 +250,23 @@ struct DualGraphHalfEdge { twin: Option, } +impl DualGraphHalfEdge { + fn start_segment(&self) -> PathSegment { + let segment = self.segments[0]; + match self.direction_flag { + Direction::Forward => segment, + Direction::Backwards => segment.reverse(), + } + } + + fn outer_boundnig_box(&self) -> Aabb { + self.segments + .iter() + .map(|seg| seg.approx_bounding_box()) + .fold(Default::default(), |old, new| merge_bounding_boxes(&old, &new)) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] struct DualGraphVertex { incident_edges: Vec, @@ -258,6 +281,8 @@ struct DualGraphComponent { edges: Vec, vertices: Vec, outer_face: Option, + inner_bb: Aabb, + outer_bb: Aabb, } /// Represents the dual graph of the MinorGraph. @@ -334,7 +359,7 @@ fn dual_graph_to_dot(components: &[DualGraphComponent], edges: &SlotMap impl Fn(&PathSegment) -> Option { move |seg| { - if bounding_box_max_extent(&seg.bounding_box()) < EPS.point { + if bounding_box_max_extent(&seg.bounding_box()) < EPS.point / 2. { return None; } @@ -404,31 +429,42 @@ fn split_at_self_intersections(edges: &mut Vec) { /// A tuple containing: /// * A vector of split edges (MajorGraphEdgeStage2). /// * An optional overall bounding box (AaBb) for all edges. -fn split_at_intersections(edges: &[MajorGraphEdgeStage1]) -> (Vec, Option) { +fn split_at_intersections(edges: &[MajorGraphEdgeStage1]) -> Vec { // Step 1: Add bounding boxes to edges - let with_bounding_box: Vec = edges.iter().map(|(seg, parent)| (*seg, *parent, seg.bounding_box())).collect(); - + let with_bounding_box: Vec = edges.iter().map(|(seg, parent)| (*seg, *parent, seg.approx_bounding_box())).collect(); // Step 2: Calculate total bounding box - let total_bounding_box = with_bounding_box.iter().fold(None, |acc, (_, _, bb)| Some(merge_bounding_boxes(acc, bb))); + let total_bounding_box = with_bounding_box.iter().fold(Default::default(), |acc, (_, _, bb)| merge_bounding_boxes(&acc, bb)); - let total_bounding_box = match total_bounding_box { - Some(bb) => bb, - None => return (Vec::new(), None), - }; + let max_extent = bounding_box_max_extent(&total_bounding_box); + let cell_size = max_extent / (edges.len() as f64).sqrt(); + + // Step 3: Create grid for efficient intersection checks + let mut grid = Grid::new(cell_size, edges.len()); // Step 3: Create edge tree for efficient intersection checks - let mut edge_tree = QuadTree::new(total_bounding_box, INTERSECTION_TREE_DEPTH, 8); + // let mut edge_tree = QuadTree::new(total_bounding_box, INTERSECTION_TREE_DEPTH, 16); + // let mut rtree = crate::util::rtree::RTree::new(24); - let mut splits_per_edge: HashMap> = HashMap::new(); + let mut splits_per_edge: Vec> = vec![Vec::new(); edges.len()]; - fn add_split(splits_per_edge: &mut HashMap>, i: usize, t: f64) { - splits_per_edge.entry(i).or_default().push(t); + fn add_split(splits_per_edge: &mut [Vec], i: usize, t: f64) { + splits_per_edge[i].push(t); } + // let mut candidates = Vec::with_capacity(8); + let mut candidates = BitVec::new(edges.len()); // Step 4: Find intersections and record split points for (i, edge) in with_bounding_box.iter().enumerate() { - let candidates = edge_tree.find(&edge.2); - for &j in &candidates { + // let candidates = edge_tree.find(&edge.2); + // let mut quad_candidates: Vec<_> = quad_candidates.into_iter().collect(); + // quad_candidates.sort_unstable(); + // let mut candidates = rtree.query(&edge.2); + // candidates.sort_unstable(); + // assert_eq!(candidates, quad_candidates); + candidates.clear(); + grid.query(&edge.2, &mut candidates); + + for j in candidates.iter_set_bits() { let candidate: &(PathSegment, u8) = &edges[j]; let include_endpoints = edge.1 != candidate.1 || !(candidate.0.end().abs_diff_eq(edge.0.start(), EPS.point) || candidate.0.start().abs_diff_eq(edge.0.end(), EPS.point)); let intersection = path_segment_intersection(&edge.0, &candidate.0, include_endpoints, &EPS); @@ -437,14 +473,16 @@ fn split_at_intersections(edges: &[MajorGraphEdgeStage1]) -> (Vec (Vec MajorGraph { - let mut vertex_tree = QuadTree::new(bounding_box, POINT_TREE_DEPTH, 8); +const ROUNDING_FACTOR: f64 = 1.0 / (2. * EPS.point); + +fn round_point(point: DVec2) -> I64Vec2 { + (point * ROUNDING_FACTOR).round().as_i64vec2() +} + +type Edges = SmallVec<[(PathSegment, u8, MajorEdgeKey, MajorEdgeKey); 2]>; + +fn find_vertices(edges: &[MajorGraphEdgeStage1]) -> MajorGraph { let mut graph = MajorGraph { - edges: SlotMap::with_key(), - vertices: SlotMap::with_key(), + edges: SlotMap::with_capacity_and_key(edges.len() * 2), + vertices: SlotMap::with_capacity_and_key(edges.len()), }; - let mut parents: HashMap = HashMap::new(); + let mut vertex_pair_id_to_edges: HashMap<_, Edges> = new_hash_map(edges.len()); + let mut vertex_hashmap: HashMap = new_hash_map(edges.len() * 2); - let mut vertex_pair_id_to_edges: HashMap<_, Vec<(MajorGraphEdgeStage2, MajorEdgeKey, MajorEdgeKey)>> = HashMap::new(); - - for (seg, parent, bounding_box) in edges { + for (seg, parent) in edges { let mut get_vertex = |point: DVec2| -> MajorVertexKey { - let box_around_point = bounding_box_around_point(point, EPS.point); - if let Some(&existing_vertex) = vertex_tree.find(&box_around_point).iter().next() { - existing_vertex - } else { - let vertex_key = graph.vertices.insert(MajorGraphVertex { point, outgoing_edges: Vec::new() }); - vertex_tree.insert(box_around_point, vertex_key); - vertex_key + let rounded = round_point(point); + for dx in -1..=1 { + for dy in -1..=1 { + let offset = I64Vec2::new(dx, dy); + if let Some(&vertex) = vertex_hashmap.get(&(rounded + offset)) { + return vertex; + } + } } - }; + let vertex_key = graph.vertices.insert(MajorGraphVertex { + point, + outgoing_edges: SmallVec::new(), + }); + vertex_hashmap.insert(rounded, vertex_key); + vertex_key + }; + // we should subtract the center instead here let start_vertex = get_vertex(seg.start()); let end_vertex = get_vertex(seg.end()); @@ -556,10 +607,12 @@ fn find_vertices(edges: &[MajorGraphEdgeStage2], bounding_box: Aabb) -> MajorGra if let Some(existing_edges) = vertex_pair_id_to_edges.get(&vertex_pair_id) { if let Some(existing_edge) = existing_edges .iter() - .find(|(other_seg, ..)| segments_equal(seg, &other_seg.0, EPS.point) || segments_equal(&seg.reverse(), &other_seg.0, EPS.point)) + .find(|(other_seg, ..)| segments_equal(seg, other_seg, EPS.point) || segments_equal(&seg.reverse(), other_seg, EPS.point)) { - *parents.entry(existing_edge.1).or_default() |= parent; - *parents.entry(existing_edge.2).or_default() |= parent; + if existing_edge.1 != *parent { + graph.edges[existing_edge.2].parent = 0b11; + graph.edges[existing_edge.3].parent = 0b11; + } continue; } } @@ -585,13 +638,7 @@ fn find_vertices(edges: &[MajorGraphEdgeStage2], bounding_box: Aabb) -> MajorGra graph.vertices[start_vertex].outgoing_edges.push(fwd_edge_key); graph.vertices[end_vertex].outgoing_edges.push(bwd_edge_key); - vertex_pair_id_to_edges - .entry(vertex_pair_id) - .or_default() - .push(((*seg, *parent, *bounding_box), fwd_edge_key, bwd_edge_key)); - } - for (edge_key, parent) in parents { - graph.edges[edge_key].parent |= parent; + vertex_pair_id_to_edges.entry(vertex_pair_id).or_default().push((*seg, *parent, fwd_edge_key, bwd_edge_key)); } graph @@ -624,11 +671,14 @@ fn get_order(vertex: &MajorGraphVertex) -> usize { /// /// A new MinorGraph representing the simplified structure. fn compute_minor(major_graph: &MajorGraph) -> MinorGraph { - let mut new_edges = SlotMap::with_key(); - let mut new_vertices = SlotMap::with_key(); - let mut to_minor_vertex = HashMap::new(); - let mut id_to_edge = HashMap::new(); - let mut visited = HashSet::new(); + let vertex_count = major_graph.vertices.len(); + let edge_count = major_graph.edges.len(); + let mut new_edges = SlotMap::with_capacity_and_key(edge_count / 2); + let mut new_vertices = SlotMap::with_capacity_and_key(vertex_count.ilog2() as usize + 2); + let mut to_minor_vertex = new_hash_map(vertex_count); + let mut id_to_edge = new_hash_map(edge_count); + // merge with to_minor_vertex + let mut visited = HashSet::with_capacity_and_hasher(vertex_count, Default::default()); // Handle components that are not cycles for (major_vertex_key, vertex) in &major_graph.vertices { @@ -638,10 +688,10 @@ fn compute_minor(major_graph: &MajorGraph) -> MinorGraph { } let start_vertex = *to_minor_vertex .entry(major_vertex_key) - .or_insert_with(|| new_vertices.insert(MinorGraphVertex { outgoing_edges: Vec::new() })); + .or_insert_with(|| new_vertices.insert(MinorGraphVertex { outgoing_edges: SmallVec::new() })); for &start_edge_key in &vertex.outgoing_edges { - let mut segments = Vec::new(); + let mut segments = SmallVec::new(); let mut edge_key = start_edge_key; let mut edge = &major_graph.edges[edge_key]; @@ -660,7 +710,7 @@ fn compute_minor(major_graph: &MajorGraph) -> MinorGraph { let end_vertex = *to_minor_vertex .entry(edge.incident_vertices[1]) - .or_insert_with(|| new_vertices.insert(MinorGraphVertex { outgoing_edges: Vec::new() })); + .or_insert_with(|| new_vertices.insert(MinorGraphVertex { outgoing_edges: SmallVec::new() })); assert!(major_graph.edges[start_edge_key].twin.is_some()); assert!(edge.twin.is_some()); @@ -693,7 +743,7 @@ fn compute_minor(major_graph: &MajorGraph) -> MinorGraph { let mut edge_key = vertex.outgoing_edges[0]; let mut edge = &major_graph.edges[edge_key]; let mut cycle = MinorGraphCycle { - segments: Vec::new(), + segments: Vec::with_capacity(4), parent: edge.parent, direction_flag: edge.direction_flag, }; @@ -721,8 +771,10 @@ fn compute_minor(major_graph: &MajorGraph) -> MinorGraph { fn remove_dangling_edges(graph: &mut MinorGraph) { // Basically DFS for each parent with BFS number fn walk(parent: u8, graph: &MinorGraph) -> HashSet { - let mut kept_vertices = HashSet::new(); - let mut vertex_to_level = HashMap::new(); + // merge + let vertex_count = graph.vertices.len(); + let mut kept_vertices = HashSet::with_capacity_and_hasher(vertex_count, Default::default()); + let mut vertex_to_level = new_hash_map(vertex_count); fn visit( vertex: MinorVertexKey, @@ -768,8 +820,8 @@ fn remove_dangling_edges(graph: &mut MinorGraph) { graph.vertices.retain(|k, _| kept_vertices_a.contains(&k) || kept_vertices_b.contains(&k)); for vertex in graph.vertices.values_mut() { - vertex.outgoing_edges.retain(|&edge_key| { - let edge = &graph.edges[edge_key]; + vertex.outgoing_edges.retain(|edge_key| { + let edge = &graph.edges[*edge_key]; (edge.parent & 1 == 1 && kept_vertices_a.contains(&edge.incident_vertices[0]) && kept_vertices_a.contains(&edge.incident_vertices[1])) || (edge.parent & 2 == 2 && kept_vertices_b.contains(&edge.incident_vertices[0]) && kept_vertices_b.contains(&edge.incident_vertices[1])) }); @@ -786,7 +838,7 @@ fn sort_outgoing_edges_by_angle(graph: &mut MinorGraph) { if vertex.outgoing_edges.len() > 2 { vertex.outgoing_edges.sort_by(|&a, &b| graph.edges[a].partial_cmp(&graph.edges[b]).unwrap()); if cfg!(feature = "logging") { - eprintln!("Outgoing edges for {:?}:", vertex_key); + eprintln!("Outgoing edges for {vertex_key:?}:"); for &edge_key in &vertex.outgoing_edges { let edge = &graph.edges[edge_key]; let angle = edge.start_segment().start_angle(); @@ -797,6 +849,7 @@ fn sort_outgoing_edges_by_angle(graph: &mut MinorGraph) { } } +#[cfg(feature = "logging")] fn face_to_polygon(face: &DualGraphVertex, edges: &SlotMap) -> Vec { const CNT: usize = 3; @@ -829,6 +882,7 @@ fn line_segment_intersects_horizontal_ray(a: DVec2, b: DVec2, point: DVec2) -> b x >= point.x } +#[cfg(feature = "logging")] fn compute_point_winding(polygon: &[DVec2], tested_point: DVec2) -> i32 { if polygon.len() <= 2 { return 0; @@ -844,6 +898,7 @@ fn compute_point_winding(polygon: &[DVec2], tested_point: DVec2) -> i32 { winding } +#[cfg(feature = "logging")] fn compute_winding(face: &DualGraphVertex, edges: &SlotMap) -> Option { let polygon = face_to_polygon(face, edges); @@ -862,28 +917,49 @@ fn compute_winding(face: &DualGraphVertex, edges: &SlotMap) -> f64 { - let polygon = face_to_polygon(face, edges); - if polygon.len() <= 4 { - return -1.; + const CNT: usize = 3; + let mut area = 0.0; + let mut prev_point: Option = None; + let mut start_point = None; + let mut point_count = 0; + + for &edge_key in &face.incident_edges { + let edge = &edges[edge_key]; + for seg in &edge.segments { + for i in 0..CNT { + let t0 = i as f64 / CNT as f64; + let t = if edge.direction_flag.forward() { t0 } else { 1. - t0 }; + let current_point = seg.sample_at(t); + + if let Some(prev) = prev_point { + area += prev.x * current_point.y; + area -= current_point.x * prev.y; + } else { + start_point = Some(current_point); + } + + prev_point = Some(current_point); + point_count += 1; + } + } + } + + if point_count <= 4 { + return -f64::EPSILON; + } + + // Close the polygon + if let (Some(start), Some(end)) = (start_point, prev_point) { + area += end.x * start.y; + area -= start.x * end.y; } #[cfg(feature = "logging")] - eprintln!("vertex: {:?}", face); - #[cfg(feature = "logging")] - for point in &polygon { - eprintln!("{}, {}", point.x, point.y); - } - let mut area = 0.; - - for i in 0..polygon.len() { - let a = polygon[i]; - let b = polygon[(i + 1) % polygon.len()]; - area += a.x * b.y; - area -= b.x * a.y; + { + eprintln!("vertex: {:?}", face); + eprintln!("winding: {}", area); } - #[cfg(feature = "logging")] - eprintln!("winding: {}", area); area } @@ -912,8 +988,9 @@ fn compute_signed_area(face: &DualGraphVertex, edges: &SlotMap Result { let mut new_vertices: Vec = Vec::new(); - let mut minor_to_dual_edge: HashMap = HashMap::new(); - let mut dual_edges = SlotMap::with_key(); + let edge_count = minor_graph.edges.len(); + let mut minor_to_dual_edge: HashMap = new_hash_map(edge_count); + let mut dual_edges = SlotMap::with_capacity_and_key(edge_count); let mut dual_vertices = SlotMap::with_key(); for (start_edge_key, start_edge) in &minor_graph.edges { @@ -935,7 +1012,7 @@ fn compute_dual(minor_graph: &MinorGraph) -> Result { let twin_dual_key = minor_to_dual_edge.get(&twin).copied(); let new_edge_key = dual_edges.insert(DualGraphHalfEdge { - segments: edge.segments.clone(), + segments: edge.segments.to_vec(), parent: edge.parent, incident_vertex: face_key, direction_flag: edge.direction_flag, @@ -990,9 +1067,9 @@ fn compute_dual(minor_graph: &MinorGraph) -> Result { new_vertices.push(outer_face_key); } - let mut components = Vec::new(); - let mut visited_vertices = HashSet::new(); - let mut visited_edges = HashSet::new(); + let mut components = Vec::with_capacity(12); + let mut visited_vertices = HashSet::with_capacity_and_hasher(dual_vertices.len(), Default::default()); + let mut visited_edges = HashSet::with_capacity_and_hasher(edge_count, Default::default()); if cfg!(feature = "logging") { eprintln!("faces: {}, dual-edges: {}, cycles: {}", new_vertices.len(), dual_edges.len(), minor_graph.cycles.len()) @@ -1046,14 +1123,17 @@ fn compute_dual(minor_graph: &MinorGraph) -> Result { #[cfg(feature = "logging")] eprintln!("component_vertices: {}", component_vertices.len()); + #[cfg(feature = "logging")] let windings: Option> = component_vertices .iter() .map(|face_key| compute_winding(&dual_vertices[*face_key], &dual_edges).map(|w| (face_key, w))) .collect(); - let Some(windings) = windings else { + #[cfg(feature = "logging")] + let Some(_) = windings else { return Err(BooleanError::NoEarInPolygon); }; + #[cfg(feature = "logging")] let areas: Vec<_> = component_vertices .iter() .map(|face_key| (face_key, compute_signed_area(&dual_vertices[*face_key], &dual_edges))) @@ -1070,31 +1150,38 @@ fn compute_dual(minor_graph: &MinorGraph) -> Result { vertices: component_vertices.clone(), edges: component_edges.clone(), outer_face: None, + inner_bb: Default::default(), + outer_bb: Default::default(), }], &dual_edges, ) ); } - let mut count = windings.iter().filter(|(_, winding)| winding < &0).count(); - let mut reverse_winding = false; - // If the paths are reversed use positive winding as outer face - if windings.len() > 2 && count == windings.len() - 1 { - count = 1; - reverse_winding = true; - } - let outer_face_key = if count != 1 { - #[cfg(feature = "logging")] - eprintln!("Found multiple outer faces: {areas:?}, falling back to area calculation"); - let (key, _) = *areas.iter().max_by_key(|(_, area)| (area.abs() * 1000.) as u64).unwrap(); - *key - } else { - *windings - .iter() - .find(|&&(&_, ref winding)| (winding < &0) ^ reverse_winding) - .expect("No outer face of a component found.") - .0 - }; + let areas: Vec<_> = component_vertices + .iter() + .map(|face_key| (face_key, (compute_signed_area(&dual_vertices[*face_key], &dual_edges) * 1000.) as i64)) + .collect(); + #[cfg(feature = "logging")] + eprintln!("Found multiple outer faces: {areas:?}, falling back to area calculation"); + let (&outer_face_key, _) = *areas + .iter() + .max_by(|(_, a1), (_, a2)| match a1.abs().cmp(&a2.abs()) { + Ordering::Equal => a1.cmp(a2), + ord => ord, + }) + .unwrap(); + let inner_bb = dual_vertices[outer_face_key] + .incident_edges + .iter() + .map(|edge_key| dual_edges[*edge_key].start_segment().start()) + .fold(Default::default(), |bbox, point| extend_bounding_box(Some(bbox), point)); + let outer_bb = dual_vertices[outer_face_key] + .incident_edges + .iter() + .map(|edge_key| dual_edges[*edge_key].outer_boundnig_box()) + .reduce(|acc, new| merge_bounding_boxes(&acc, &new)) + .unwrap_or_default(); #[cfg(feature = "logging")] dbg!(outer_face_key); @@ -1102,6 +1189,8 @@ fn compute_dual(minor_graph: &MinorGraph) -> Result { vertices: component_vertices, edges: component_edges, outer_face: Some(outer_face_key), + inner_bb, + outer_bb, }); } @@ -1122,6 +1211,9 @@ fn get_next_edge(edge_key: MinorEdgeKey, graph: &MinorGraph) -> MinorEdgeKey { } fn test_inclusion(a: &DualGraphComponent, b: &DualGraphComponent, edges: &SlotMap, vertices: &SlotMap) -> Option { + if a.inner_bb.min().cmpge(b.outer_bb.min()) & a.inner_bb.max().cmple(b.outer_bb.max()) != BVec2::TRUE { + return None; + } let tested_point = edges[a.edges[0]].segments[0].start(); for (face_key, face) in b.vertices.iter().map(|&key| (key, &vertices[key])) { if Some(face_key) == b.outer_face { @@ -1141,30 +1233,86 @@ fn test_inclusion(a: &DualGraphComponent, b: &DualGraphComponent, edges: &SlotMa None } fn bounding_box_intersects_horizontal_ray(bounding_box: &Aabb, point: DVec2) -> bool { - interval_crosses_point(bounding_box.top, bounding_box.bottom, point[1]) && bounding_box.right >= point[0] + bounding_box.right() >= point[0] && (bounding_box.top()..bounding_box.bottom()).contains(&point[1]) } +#[derive(Copy, Clone)] struct IntersectionSegment { bounding_box: Aabb, seg: PathSegment, } pub fn path_segment_horizontal_ray_intersection_count(orig_seg: &PathSegment, point: DVec2) -> usize { - let total_bounding_box = orig_seg.bounding_box(); - + let total_bounding_box = orig_seg.approx_bounding_box(); if !bounding_box_intersects_horizontal_ray(&total_bounding_box, point) { return 0; } - let mut segments = vec![IntersectionSegment { - bounding_box: total_bounding_box, - seg: *orig_seg, - }]; + match orig_seg { + PathSegment::Cubic(..) => cubic_bezier_horizontal_ray_intersection_count(orig_seg, point), + _ => fallback_intersection_count(orig_seg, total_bounding_box, point), + } +} + +fn cubic_bezier_horizontal_ray_intersection_count(cubic: &PathSegment, point: DVec2) -> usize { + let y = point.y; + let PathSegment::Cubic(p0, p1, p2, p3) = cubic else { unreachable!() }; + + // Transform the curve so that the horizontal line is at y = 0 + let a = -p0.y + 3.0 * p1.y - 3.0 * p2.y + p3.y; + let b = 3.0 * p0.y - 6.0 * p1.y + 3.0 * p2.y; + let c = -3.0 * p0.y + 3.0 * p1.y; + let d = p0.y - y; + + let roots = find_roots_cubic(a, b, c, d); + let mut count = 0; + match roots { + Roots::Three(roots) => { + for &t in roots.iter() { + if (0.0..=1.0).contains(&t) { + let x = cubic.sample_at(t).x; + if x > point.x { + count += 1; + } + } + } + } + Roots::Two(roots) => { + for &t in roots.iter() { + if (0.0..=1.0).contains(&t) { + let x = cubic.sample_at(t).x; + if x > point.x { + count += 1; + } + } + } + } + Roots::One(roots) => { + for &t in roots.iter() { + if (0.0..=1.0).contains(&t) { + let x = cubic.sample_at(t).x; + if x > point.x { + count += 1; + } + } + } + } + _ => {} + } + + count +} + +fn fallback_intersection_count(orig_seg: &PathSegment, bounding_box: Aabb, point: DVec2) -> usize { + // Existing implementation for non-cubic segments + let mut segments = vec![IntersectionSegment { bounding_box, seg: *orig_seg }]; + let mut count = 0; + let mut next_segments = Vec::new(); while !segments.is_empty() { - let mut next_segments = Vec::new(); - for segment in segments { + next_segments.clear(); + for segment in segments.iter() { if bounding_box_max_extent(&segment.bounding_box) < EPS.linear { if line_segment_intersects_horizontal_ray(segment.seg.start(), segment.seg.end(), point) { count += 1; @@ -1173,7 +1321,6 @@ pub fn path_segment_horizontal_ray_intersection_count(orig_seg: &PathSegment, po let split = &segment.seg.split_at(0.5); let bounding_box0 = split.0.bounding_box(); let bounding_box1 = split.1.bounding_box(); - if bounding_box_intersects_horizontal_ray(&bounding_box0, point) { next_segments.push(IntersectionSegment { bounding_box: bounding_box0, @@ -1188,9 +1335,8 @@ pub fn path_segment_horizontal_ray_intersection_count(orig_seg: &PathSegment, po } } } - segments = next_segments; + std::mem::swap(&mut next_segments, &mut segments); } - count } @@ -1216,27 +1362,27 @@ pub fn path_segment_horizontal_ray_intersection_count(orig_seg: &PathSegment, po /// # Returns /// /// A vector of NestingTree structures representing the top-level components and their nested subcomponents. -fn compute_nesting_tree(DualGraph { components, vertices, edges }: &DualGraph) -> Vec { - let mut nesting_trees = Vec::new(); +fn compute_nesting_tree(DualGraph { components, vertices, edges }: &mut DualGraph) -> Vec { + let mut nesting_trees = Vec::with_capacity(4); - for component in components { + for component in components.drain(..) { insert_component(&mut nesting_trees, component, edges, vertices); } nesting_trees } -fn insert_component(trees: &mut Vec, component: &DualGraphComponent, edges: &SlotMap, vertices: &SlotMap) { +fn insert_component(trees: &mut Vec, component: DualGraphComponent, edges: &SlotMap, vertices: &SlotMap) { for tree in trees.iter_mut() { - if let Some(face_key) = test_inclusion(component, &tree.component, edges, vertices) { + if let Some(face_key) = test_inclusion(&component, &tree.component, edges, vertices) { if let Some(children) = tree.outgoing_edges.get_mut(&face_key) { insert_component(children, component, edges, vertices); } else { tree.outgoing_edges.insert( face_key, vec![NestingTree { - component: component.clone(), - outgoing_edges: HashMap::new(), + component, + outgoing_edges: HashMap::default(), }], ); } @@ -1245,15 +1391,14 @@ fn insert_component(trees: &mut Vec, component: &DualGraphComponent } let mut new_tree = NestingTree { - component: component.clone(), - outgoing_edges: HashMap::new(), + component, + outgoing_edges: HashMap::default(), }; let mut i = 0; while i < trees.len() { if let Some(face_key) = test_inclusion(&trees[i].component, &new_tree.component, edges, vertices) { - // TODO: (@TrueDoctor) use swap remove - let tree = trees.remove(i); + let tree = trees.swap_remove(i); new_tree.outgoing_edges.entry(face_key).or_default().push(tree); } else { i += 1; @@ -1288,12 +1433,15 @@ fn flag_faces( vertices: &SlotMap, flags: &mut HashMap, ) { + let mut visited_faces = HashSet::default(); + let mut face_stack = VecDeque::new(); for tree in nesting_trees.iter() { let mut tree_stack = vec![(tree, 0, 0)]; while let Some((current_tree, a_running_count, b_running_count)) = tree_stack.pop() { - let mut visited_faces = HashSet::new(); - let mut face_stack = VecDeque::new(); + // TODO: Test if clearing is faster + visited_faces.clear(); + face_stack.clear(); let outer_face_key = current_tree.component.outer_face.expect("Component doesn't have an outer face."); face_stack.push_back((outer_face_key, a_running_count, b_running_count)); @@ -1346,7 +1494,7 @@ fn walk_faces<'a>(faces: &'a [DualVertexKey], edges: &SlotMap(faces: &'a [DualVertexKey], edges: &SlotMap Result, BooleanError> { let mut unsplit_edges: Vec = a.iter().map(segment_to_edge(1)).chain(b.iter().map(segment_to_edge(2))).flatten().collect(); + if unsplit_edges.is_empty() { + return Ok(Vec::new()); + } split_at_self_intersections(&mut unsplit_edges); - let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); + let split_edges = split_at_intersections(&unsplit_edges); #[cfg(feature = "logging")] - for (edge, _, _) in split_edges.iter() { + for (edge, _) in split_edges.iter() { eprintln!("{}", path_to_path_data(&vec![*edge], 0.001)); } - let total_bounding_box = match total_bounding_box { - Some(bb) => bb, - None => return Ok(Vec::new()), // Input geometry is empty - }; - - let major_graph = find_vertices(&split_edges, total_bounding_box); + let major_graph = find_vertices(&split_edges); #[cfg(feature = "logging")] eprintln!("Major graph:"); @@ -1583,33 +1730,33 @@ pub fn path_boolean(a: &Path, a_fill_rule: FillRule, b: &Path, b_fill_rule: Fill #[cfg(feature = "logging")] for (key, edge) in minor_graph.edges.iter() { - eprintln!("{key:?}:\n{}", path_to_path_data(&edge.segments, 0.001)); + eprintln!("{key:?}:\n{}", path_to_path_data(&edge.segments.to_vec(), 0.001)); } #[cfg(feature = "logging")] for vertex in minor_graph.vertices.values() { - eprintln!("{:?}", vertex); + eprintln!("{vertex:?}"); } sort_outgoing_edges_by_angle(&mut minor_graph); #[cfg(feature = "logging")] for vertex in minor_graph.vertices.values() { - eprintln!("{:?}", vertex); + eprintln!("{vertex:?}"); } for (edge_key, edge) in &minor_graph.edges { - assert!(minor_graph.vertices.contains_key(edge.incident_vertices[0]), "Edge {:?} has invalid start vertex", edge_key); - assert!(minor_graph.vertices.contains_key(edge.incident_vertices[1]), "Edge {:?} has invalid end vertex", edge_key); - assert!(edge.twin.is_some(), "Edge {:?} should have a twin", edge_key); + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[0]), "Edge {edge_key:?} has invalid start vertex"); + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[1]), "Edge {edge_key:?} has invalid end vertex"); + assert!(edge.twin.is_some(), "Edge {edge_key:?} should have a twin"); let twin = &minor_graph.edges[edge.twin.unwrap()]; - assert_eq!(twin.twin.unwrap(), edge_key, "Twin relationship should be symmetrical for edge {:?}", edge_key); + assert_eq!(twin.twin.unwrap(), edge_key, "Twin relationship should be symmetrical for edge {edge_key:?}"); } - let dual_graph = compute_dual(&minor_graph)?; + let mut dual_graph = compute_dual(&minor_graph)?; - let nesting_trees = compute_nesting_tree(&dual_graph); + let nesting_trees = compute_nesting_tree(&mut dual_graph); #[cfg(feature = "logging")] for tree in &nesting_trees { - eprintln!("nesting_trees: {:?}", tree); + eprintln!("nesting_trees: {tree:?}"); } let DualGraph { edges, vertices, .. } = &dual_graph; @@ -1619,7 +1766,7 @@ pub fn path_boolean(a: &Path, a_fill_rule: FillRule, b: &Path, b_fill_rule: Fill #[cfg(feature = "logging")] eprintln!("{}", dual_graph_to_dot(&dual_graph.components, edges)); - let mut flags = HashMap::new(); + let mut flags = new_hash_map(vertices.len()); flag_faces(&nesting_trees, a_fill_rule, b_fill_rule, edges, vertices, &mut flags); #[cfg(feature = "logging")] @@ -1648,20 +1795,11 @@ mod tests { #[test] fn test_split_at_intersections() { let unsplit_edges = unsplit_edges(); - let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); - - // Check that we have a valid bounding box - assert!(total_bounding_box.is_some()); + let split_edges = split_at_intersections(&unsplit_edges); // Check that we have more edges after splitting (due to intersections) assert!(split_edges.len() >= unsplit_edges.len()); - // Check that all edges have a valid bounding box - for (_, _, bb) in &split_edges { - assert!(bb.left <= bb.right); - assert!(bb.top <= bb.bottom); - } - // You might want to add more specific checks based on the expected behavior // of your split_at_intersections function } @@ -1684,8 +1822,8 @@ mod tests { fn test_compute_minor() { // Set up the initial graph let unsplit_edges = unsplit_edges(); - let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); - let major_graph = find_vertices(&split_edges, total_bounding_box.unwrap()); + let split_edges = split_at_intersections(&unsplit_edges); + let major_graph = find_vertices(&split_edges); // Compute minor graph let minor_graph = compute_minor(&major_graph); @@ -1739,8 +1877,8 @@ mod tests { fn test_sort_outgoing_edges_by_angle() { // Set up the initial graph let unsplit_edges = unsplit_edges(); - let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); - let major_graph = find_vertices(&split_edges, total_bounding_box.unwrap()); + let split_edges = split_at_intersections(&unsplit_edges); + let major_graph = find_vertices(&split_edges); let mut minor_graph = compute_minor(&major_graph); // Print initial state @@ -1748,7 +1886,7 @@ mod tests { print_minor_graph_state(&minor_graph); // Store initial edge order - let initial_edge_order: HashMap> = minor_graph.vertices.iter().map(|(k, v)| (k, v.outgoing_edges.clone())).collect(); + let initial_edge_order: HashMap> = minor_graph.vertices.iter().map(|(k, v)| (k, v.outgoing_edges.clone())).collect(); // Apply sort_outgoing_edges_by_angle sort_outgoing_edges_by_angle(&mut minor_graph); @@ -1821,15 +1959,10 @@ mod tests { #[test] fn test_bounding_box_intersects_horizontal_ray() { - let bbox = Aabb { - top: 10., - right: 40., - bottom: 30., - left: 20., - }; + let bbox = Aabb::new(20., 10., 40., 30.); - assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(0., 30.))); - assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(20., 30.))); + assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(0., 29.))); + assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(20., 29.))); assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(10., 20.))); assert!(!bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(30., 40.))); } diff --git a/libraries/path-bool/src/util/aabb.rs b/libraries/path-bool/src/util/aabb.rs index a8d8f79cd2..7d68cfd084 100644 --- a/libraries/path-bool/src/util/aabb.rs +++ b/libraries/path-bool/src/util/aabb.rs @@ -1,64 +1,92 @@ -use glam::DVec2; +use glam::{BVec2, DVec2}; #[derive(Clone, Copy, Debug, PartialEq)] pub(crate) struct Aabb { - pub top: f64, - pub right: f64, - pub bottom: f64, - pub left: f64, + min: DVec2, + max: DVec2, } -pub(crate) fn bounding_boxes_overlap(a: &Aabb, b: &Aabb) -> bool { - a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom -} - -pub(crate) fn merge_bounding_boxes(a: Option, b: &Aabb) -> Aabb { - match a { - Some(a) => Aabb { - top: a.top.min(b.top), - right: a.right.max(b.right), - bottom: a.bottom.max(b.bottom), - left: a.left.min(b.left), - }, - None => *b, +impl Default for Aabb { + fn default() -> Self { + Self { + min: DVec2::INFINITY, + max: DVec2::NEG_INFINITY, + } } } +impl Aabb { + #[inline] + pub(crate) fn min(&self) -> DVec2 { + self.min + } + #[inline] + pub(crate) fn max(&self) -> DVec2 { + self.max + } + + pub(crate) const fn new(left: f64, top: f64, right: f64, bottom: f64) -> Self { + Aabb { + min: DVec2::new(left, top), + max: DVec2::new(right, bottom), + } + } + #[inline] + pub(crate) fn top(&self) -> f64 { + self.min.y + } + #[inline] + pub(crate) fn left(&self) -> f64 { + self.min.x + } + #[inline] + pub(crate) fn right(&self) -> f64 { + self.max.x + } + #[inline] + pub(crate) fn bottom(&self) -> f64 { + self.max.y + } +} + +#[inline] +pub(crate) fn bounding_boxes_overlap(a: &Aabb, b: &Aabb) -> bool { + (a.min.cmple(b.max) & b.min.cmple(a.max)) == BVec2::TRUE +} + +#[inline] +pub(crate) fn merge_bounding_boxes(a: &Aabb, b: &Aabb) -> Aabb { + Aabb { + min: a.min.min(b.min), + max: a.max.max(b.max), + } +} + +#[inline] pub(crate) fn extend_bounding_box(bounding_box: Option, point: DVec2) -> Aabb { match bounding_box { Some(bb) => Aabb { - top: bb.top.min(point.y), - right: bb.right.max(point.x), - bottom: bb.bottom.max(point.y), - left: bb.left.min(point.x), - }, - None => Aabb { - top: point.y, - right: point.x, - bottom: point.y, - left: point.x, + min: bb.min.min(point), + max: bb.max.max(point), }, + None => Aabb { min: point, max: point }, } } pub(crate) fn bounding_box_max_extent(bounding_box: &Aabb) -> f64 { - (bounding_box.right - bounding_box.left).max(bounding_box.bottom - bounding_box.top) + (bounding_box.max - bounding_box.min).max_element() } pub(crate) fn bounding_box_around_point(point: DVec2, padding: f64) -> Aabb { Aabb { - top: point.y - padding, - right: point.x + padding, - bottom: point.y + padding, - left: point.x - padding, + min: point - DVec2::splat(padding), + max: point + DVec2::splat(padding), } } pub(crate) fn expand_bounding_box(bounding_box: &Aabb, padding: f64) -> Aabb { Aabb { - top: bounding_box.top - padding, - right: bounding_box.right + padding, - bottom: bounding_box.bottom + padding, - left: bounding_box.left - padding, + min: bounding_box.min - DVec2::splat(padding), + max: bounding_box.max + DVec2::splat(padding), } } diff --git a/libraries/path-bool/src/util/grid.rs b/libraries/path-bool/src/util/grid.rs new file mode 100644 index 0000000000..4cb38c477b --- /dev/null +++ b/libraries/path-bool/src/util/grid.rs @@ -0,0 +1,128 @@ +use crate::aabb::Aabb; +use glam::{DVec2, IVec2}; +use rustc_hash::FxHashMap; +use smallvec::SmallVec; + +pub(crate) struct Grid { + cell_factor: f64, + cells: FxHashMap>, +} + +impl Grid { + pub(crate) fn new(cell_size: f64, edges: usize) -> Self { + Grid { + cell_factor: cell_size.recip(), + cells: FxHashMap::with_capacity_and_hasher(edges, Default::default()), + } + } + + pub(crate) fn insert(&mut self, bbox: &Aabb, index: usize) { + let min_cell = self.point_to_cell_floor(bbox.min()); + let max_cell = self.point_to_cell_ceil(bbox.max()); + + for i in min_cell.x..=max_cell.x { + for j in min_cell.y..=max_cell.y { + self.cells.entry((i, j).into()).or_default().push(index); + } + } + } + + pub(crate) fn query(&self, bbox: &Aabb, result: &mut BitVec) { + let min_cell = self.point_to_cell_floor(bbox.min()); + let max_cell = self.point_to_cell_ceil(bbox.max()); + + for i in min_cell.x..=max_cell.x { + for j in min_cell.y..=max_cell.y { + if let Some(indices) = self.cells.get(&(i, j).into()) { + for &index in indices { + result.set(index); + } + } + } + } + // result.sort_unstable(); + // result.dedup(); + } + + fn point_to_cell_ceil(&self, point: DVec2) -> IVec2 { + (point * self.cell_factor).ceil().as_ivec2() + } + fn point_to_cell_floor(&self, point: DVec2) -> IVec2 { + (point * self.cell_factor).floor().as_ivec2() + } +} + +pub struct BitVec { + data: Vec, +} + +impl BitVec { + pub fn new(capacity: usize) -> Self { + let num_words = capacity.div_ceil(64); + BitVec { data: vec![0; num_words] } + } + + pub fn set(&mut self, index: usize) { + let word_index = index / 64; + let bit_index = index % 64; + self.data[word_index] |= 1u64 << bit_index; + } + + pub fn clear(&mut self) { + self.data.fill(0); + } + + pub fn iter_set_bits(&self) -> BitVecIterator<'_> { + BitVecIterator { + bit_vec: self, + current_word: self.data[0], + word_index: 0, + } + } +} + +pub struct BitVecIterator<'a> { + bit_vec: &'a BitVec, + current_word: u64, + word_index: usize, +} + +impl<'a> Iterator for BitVecIterator<'a> { + type Item = usize; + + fn next(&mut self) -> Option { + loop { + if self.current_word == 0 { + self.word_index += 1; + if self.word_index == self.bit_vec.data.len() { + return None; + } + self.current_word = self.bit_vec.data[self.word_index]; + continue; + } + let tz = self.current_word.trailing_zeros() as usize; + self.current_word ^= 1 << tz; + + let result = self.word_index * 64 + tz; + + return Some(result); + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_bitvec() { + let mut bv = BitVec::new(200); + bv.set(5); + bv.set(64); + bv.set(128); + bv.set(199); + + let set_bits: Vec = bv.iter_set_bits().collect(); + assert_eq!(set_bits, vec![5, 64, 128, 199]); + } +} diff --git a/libraries/path-bool/src/util/quad_tree.rs b/libraries/path-bool/src/util/quad_tree.rs deleted file mode 100644 index 9468ad6119..0000000000 --- a/libraries/path-bool/src/util/quad_tree.rs +++ /dev/null @@ -1,121 +0,0 @@ -use crate::aabb::Aabb; -use std::collections::HashSet; - -pub struct QuadTree { - bounding_box: Aabb, - depth: usize, - inner_node_capacity: usize, - subtrees: Option; 4]>>, - pairs: Vec<(Aabb, T)>, -} - -impl QuadTree { - pub fn new(bounding_box: Aabb, depth: usize, inner_node_capacity: usize) -> Self { - QuadTree { - bounding_box, - depth, - inner_node_capacity, - subtrees: None, - pairs: Vec::new(), - } - } - - pub fn insert(&mut self, bounding_box: Aabb, value: T) -> bool { - if !crate::aabb::bounding_boxes_overlap(&bounding_box, &self.bounding_box) { - return false; - } - - if self.depth > 0 && self.pairs.len() >= self.inner_node_capacity { - self.ensure_subtrees(); - for tree in self.subtrees.as_mut().unwrap().iter_mut() { - tree.insert(bounding_box, value.clone()); - } - } else { - self.pairs.push((bounding_box, value)); - } - - true - } - - pub fn find(&self, bounding_box: &Aabb) -> HashSet - where - T: Eq + std::hash::Hash + Clone, - { - let mut set = HashSet::new(); - self.find_internal(bounding_box, &mut set); - set - } - - fn find_internal(&self, bounding_box: &Aabb, set: &mut HashSet) - where - T: Eq + std::hash::Hash + Clone, - { - if !crate::aabb::bounding_boxes_overlap(bounding_box, &self.bounding_box) { - return; - } - - for (key, value) in &self.pairs { - if crate::aabb::bounding_boxes_overlap(bounding_box, key) { - set.insert(value.clone()); - } - } - - if let Some(subtrees) = &self.subtrees { - for tree in subtrees.iter() { - tree.find_internal(bounding_box, set); - } - } - } - - fn ensure_subtrees(&mut self) { - if self.subtrees.is_some() { - return; - } - - let mid_x = (self.bounding_box.left + self.bounding_box.right) / 2.; - let mid_y = (self.bounding_box.top + self.bounding_box.bottom) / 2.; - - self.subtrees = Some(Box::new([ - QuadTree::new( - Aabb { - top: self.bounding_box.top, - right: mid_x, - bottom: mid_y, - left: self.bounding_box.left, - }, - self.depth - 1, - self.inner_node_capacity, - ), - QuadTree::new( - Aabb { - top: self.bounding_box.top, - right: self.bounding_box.right, - bottom: mid_y, - left: mid_x, - }, - self.depth - 1, - self.inner_node_capacity, - ), - QuadTree::new( - Aabb { - top: mid_y, - right: mid_x, - bottom: self.bounding_box.bottom, - left: self.bounding_box.left, - }, - self.depth - 1, - self.inner_node_capacity, - ), - QuadTree::new( - Aabb { - top: mid_y, - right: self.bounding_box.right, - bottom: self.bounding_box.bottom, - left: mid_x, - }, - self.depth - 1, - self.inner_node_capacity, - ), - ])); - } -} diff --git a/node-graph/README.md b/node-graph/README.md index 24ff12c763..cf2c1e9bc1 100644 --- a/node-graph/README.md +++ b/node-graph/README.md @@ -11,7 +11,7 @@ The graph that is presented to users in the editor is known as the document grap ```rs pub struct DocumentNode { pub inputs: Vec, - pub manual_composition: Option, + pub call_argument: Type, pub implementation: DocumentNodeImplementation, pub skip_deduplication: bool, pub visible: bool, @@ -157,7 +157,7 @@ raster_node!(graphene_core::raster::OpacityNode<_>, params: [f64]), There is also the more general `register_node!` for nodes that do not need to run per pixel. ```rs -register_node!(graphene_core::transform_nodes::SetTransformNode<_>, input: VectorData, params: [DAffine2]), +register_node!(graphene_core::transform_nodes::SetTransformNode<_>, input: Vector, params: [DAffine2]), ``` ## Debugging diff --git a/node-graph/gapplication-io/src/lib.rs b/node-graph/gapplication-io/src/lib.rs index d0fd84c6df..b9d072d2c0 100644 --- a/node-graph/gapplication-io/src/lib.rs +++ b/node-graph/gapplication-io/src/lib.rs @@ -42,7 +42,7 @@ pub trait Size { fn size(&self) -> UVec2; } -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] impl Size for web_sys::HtmlCanvasElement { fn size(&self) -> UVec2 { UVec2::new(self.width(), self.height()) @@ -52,11 +52,20 @@ impl Size for web_sys::HtmlCanvasElement { #[derive(Debug, Clone)] pub struct ImageTexture { #[cfg(feature = "wgpu")] - pub texture: Arc, + pub texture: wgpu::Texture, #[cfg(not(feature = "wgpu"))] pub texture: (), } +impl<'a> serde::Deserialize<'a> for ImageTexture { + fn deserialize(_: D) -> Result + where + D: serde::Deserializer<'a>, + { + unimplemented!("attempted to serialize a texture") + } +} + impl Hash for ImageTexture { #[cfg(feature = "wgpu")] fn hash(&self, state: &mut H) { @@ -106,9 +115,9 @@ pub struct SurfaceHandle { pub surface: Surface, } -// #[cfg(target_arch = "wasm32")] +// #[cfg(target_family = "wasm")] // unsafe impl Send for SurfaceHandle {} -// #[cfg(target_arch = "wasm32")] +// #[cfg(target_family = "wasm")] // unsafe impl Sync for SurfaceHandle {} impl Size for SurfaceHandle { @@ -144,9 +153,9 @@ impl<'a, Surface> Drop for SurfaceHandle<'a, Surface> { } }*/ -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub type ResourceFuture = Pin, ApplicationError>>>>; -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub type ResourceFuture = Pin, ApplicationError>> + Send>>; pub trait ApplicationIo { @@ -240,7 +249,7 @@ struct Logger; impl NodeGraphUpdateSender for Logger { fn send(&self, message: NodeGraphUpdateMessage) { - log::warn!("dispatching message with fallback node graph update sender {:?}", message); + log::warn!("dispatching message with fallback node graph update sender {message:?}"); } } diff --git a/node-graph/gbrush/src/brush.rs b/node-graph/gbrush/src/brush.rs index 3a085c0abe..b1837cfb13 100644 --- a/node-graph/gbrush/src/brush.rs +++ b/node-graph/gbrush/src/brush.rs @@ -2,19 +2,19 @@ use crate::brush_cache::BrushCache; use crate::brush_stroke::{BrushStroke, BrushStyle}; use glam::{DAffine2, DVec2}; use graphene_core::blending::BlendMode; -use graphene_core::bounds::BoundingBox; +use graphene_core::bounds::{BoundingBox, RenderBoundingBox}; use graphene_core::color::{Alpha, Color, Pixel, Sample}; use graphene_core::generic::FnNode; -use graphene_core::instances::Instance; use graphene_core::math::bbox::{AxisAlignedBbox, Bbox}; use graphene_core::raster::BitmapMut; use graphene_core::raster::image::Image; -use graphene_core::raster_types::{CPU, Raster, RasterDataTable}; +use graphene_core::raster_types::{CPU, Raster}; use graphene_core::registry::FutureWrapperNode; +use graphene_core::table::{Table, TableRow}; use graphene_core::transform::Transform; use graphene_core::value::ClonedNode; use graphene_core::{Ctx, Node}; -use graphene_raster_nodes::adjustments::blend_colors; +use graphene_raster_nodes::blending_nodes::blend_colors; use graphene_raster_nodes::std_nodes::{empty_image, extend_image_to_bounds}; #[derive(Clone, Copy, Debug, PartialEq)] @@ -77,7 +77,7 @@ fn brush_stamp_generator(#[unit(" px")] diameter: f64, color: Color, hardness: f } #[node_macro::node(skip_impl)] -fn blit(mut target: RasterDataTable, texture: Raster, positions: Vec, blend_mode: BlendFn) -> RasterDataTable +fn blit(mut target: Table>, texture: Raster, positions: Vec, blend_mode: BlendFn) -> Table> where BlendFn: for<'any_input> Node<'any_input, (Color, Color), Output = Color>, { @@ -85,14 +85,14 @@ where return target; } - for target_instance in target.instance_mut_iter() { - let target_width = target_instance.instance.width; - let target_height = target_instance.instance.height; + for table_row in target.iter_mut() { + let target_width = table_row.element.width; + let target_height = table_row.element.height; let target_size = DVec2::new(target_width as f64, target_height as f64); let texture_size = DVec2::new(texture.width as f64, texture.height as f64); - let document_to_target = DAffine2::from_translation(-texture_size / 2.) * DAffine2::from_scale(target_size) * target_instance.transform.inverse(); + let document_to_target = DAffine2::from_translation(-texture_size / 2.) * DAffine2::from_scale(target_size) * table_row.transform.inverse(); for position in &positions { let start = document_to_target.transform_point2(*position).round(); @@ -112,12 +112,12 @@ where let max_y = (blit_area_offset.y + blit_area_dimensions.y).saturating_sub(1); let max_x = (blit_area_offset.x + blit_area_dimensions.x).saturating_sub(1); assert!(texture_index(max_x, max_y) < texture.data.len()); - assert!(target_index(max_x, max_y) < target_instance.instance.data.len()); + assert!(target_index(max_x, max_y) < table_row.element.data.len()); for y in blit_area_offset.y..blit_area_offset.y + blit_area_dimensions.y { for x in blit_area_offset.x..blit_area_offset.x + blit_area_dimensions.x { let src_pixel = texture.data[texture_index(x, y)]; - let dst_pixel = &mut target_instance.instance.data_mut().data[target_index(x + clamp_start.x, y + clamp_start.y)]; + let dst_pixel = &mut table_row.element.data_mut().data[target_index(x + clamp_start.x, y + clamp_start.y)]; *dst_pixel = blend_mode.eval((src_pixel, *dst_pixel)); } } @@ -130,14 +130,14 @@ where pub async fn create_brush_texture(brush_style: &BrushStyle) -> Raster { let stamp = brush_stamp_generator(brush_style.diameter, brush_style.color, brush_style.hardness, brush_style.flow); let transform = DAffine2::from_scale_angle_translation(DVec2::splat(brush_style.diameter), 0., -DVec2::splat(brush_style.diameter / 2.)); - let blank_texture = empty_image((), transform, Color::TRANSPARENT).instance_iter().next().unwrap_or_default(); + let blank_texture = empty_image((), transform, Table::new_from_element(Color::TRANSPARENT)).into_iter().next().unwrap_or_default(); let image = blend_stamp_closure(stamp, blank_texture, |a, b| blend_colors(a, b, BlendMode::Normal, 1.)); - image.instance + image.element } -pub fn blend_with_mode(background: Instance>, foreground: Instance>, blend_mode: BlendMode, opacity: f64) -> Instance> { - let opacity = opacity / 100.; +pub fn blend_with_mode(background: TableRow>, foreground: TableRow>, blend_mode: BlendMode, opacity: f64) -> TableRow> { + let opacity = opacity as f32 / 100.; match std::hint::black_box(blend_mode) { // Normal group BlendMode::Normal => blend_image_closure(foreground, background, |a, b| blend_colors(a, b, BlendMode::Normal, opacity)), @@ -179,14 +179,15 @@ pub fn blend_with_mode(background: Instance>, foreground: Instance, strokes: Vec, cache: BrushCache) -> RasterDataTable { +async fn brush(_: impl Ctx, mut image_frame_table: Table>, strokes: Vec, cache: BrushCache) -> Table> { if image_frame_table.is_empty() { - image_frame_table.push(Instance::default()); + image_frame_table.push(TableRow::default()); } - // TODO: Find a way to handle more than one instance - let image_frame_instance = image_frame_table.instance_ref_iter().next().expect("Expected the one instance we just pushed").to_instance_cloned(); + // TODO: Find a way to handle more than one row + let table_row = image_frame_table.iter().next().expect("Expected the one row we just pushed").into_cloned(); - let [start, end] = image_frame_instance.clone().to_table().bounding_box(DAffine2::IDENTITY, false).unwrap_or([DVec2::ZERO, DVec2::ZERO]); + let bounds = Table::new_from_row(table_row.clone()).bounding_box(DAffine2::IDENTITY, false); + let [start, end] = if let RenderBoundingBox::Rectangle(rect) = bounds { rect } else { [DVec2::ZERO, DVec2::ZERO] }; let image_bbox = AxisAlignedBbox { start, end }; let stroke_bbox = strokes.iter().map(|s| s.bounding_box()).reduce(|a, b| a.union(&b)).unwrap_or(AxisAlignedBbox::ZERO); let bbox = if image_bbox.size().length() < 0.1 { stroke_bbox } else { stroke_bbox.union(&image_bbox) }; @@ -195,11 +196,11 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes let mut draw_strokes: Vec<_> = strokes.iter().filter(|&s| !matches!(s.style.blend_mode, BlendMode::Erase | BlendMode::Restore)).cloned().collect(); let erase_restore_strokes: Vec<_> = strokes.iter().filter(|&s| matches!(s.style.blend_mode, BlendMode::Erase | BlendMode::Restore)).cloned().collect(); - let mut brush_plan = cache.compute_brush_plan(image_frame_instance, &draw_strokes); + let mut brush_plan = cache.compute_brush_plan(table_row, &draw_strokes); - // TODO: Find a way to handle more than one instance - let Some(mut actual_image) = extend_image_to_bounds((), brush_plan.background.to_table(), background_bounds).instance_iter().next() else { - return RasterDataTable::default(); + // TODO: Find a way to handle more than one row + let Some(mut actual_image) = extend_image_to_bounds((), Table::new_from_row(brush_plan.background), background_bounds).into_iter().next() else { + return Table::new(); }; let final_stroke_idx = brush_plan.strokes.len().saturating_sub(1); @@ -229,7 +230,6 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes let stroke_origin_in_layer = bbox.start - snap_offset - DVec2::splat(stroke.style.diameter / 2.); let stroke_to_layer = DAffine2::from_translation(stroke_origin_in_layer) * DAffine2::from_scale(stroke_size); - // let normal_blend = BlendColorPairNode::new(ValueNode::new(CopiedNode::new(BlendMode::Normal)), ValueNode::new(CopiedNode::new(100.))); let normal_blend = FnNode::new(|(a, b)| blend_colors(a, b, BlendMode::Normal, 1.)); let blit_node = BlitNode::new( FutureWrapperNode::new(ClonedNode::new(brush_texture)), @@ -238,15 +238,15 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes ); let blit_target = if idx == 0 { let target = core::mem::take(&mut brush_plan.first_stroke_texture); - extend_image_to_bounds((), target.to_table(), stroke_to_layer) + extend_image_to_bounds((), Table::new_from_row(target), stroke_to_layer) } else { - empty_image((), stroke_to_layer, Color::TRANSPARENT) + empty_image((), stroke_to_layer, Table::new_from_element(Color::TRANSPARENT)) // EmptyImageNode::new(CopiedNode::new(stroke_to_layer), CopiedNode::new(Color::TRANSPARENT)).eval(()) }; - let instances = blit_node.eval(blit_target).await; - assert_eq!(instances.len(), 1); - instances.instance_iter().next().unwrap_or_default() + let table = blit_node.eval(blit_target).await; + assert_eq!(table.len(), 1); + table.into_iter().next().unwrap_or_default() }; // Cache image before doing final blend, and store final stroke texture. @@ -261,8 +261,8 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes let has_erase_strokes = strokes.iter().any(|s| s.style.blend_mode == BlendMode::Erase); if has_erase_strokes { let opaque_image = Image::new(bbox.size().x as u32, bbox.size().y as u32, Color::WHITE); - let mut erase_restore_mask = Instance { - instance: Raster::new_cpu(opaque_image), + let mut erase_restore_mask = TableRow { + element: Raster::new_cpu(opaque_image), transform: background_bounds, ..Default::default() }; @@ -285,7 +285,7 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes FutureWrapperNode::new(ClonedNode::new(positions)), FutureWrapperNode::new(ClonedNode::new(blend_params)), ); - erase_restore_mask = blit_node.eval(erase_restore_mask.to_table()).await.instance_iter().next().unwrap_or_default(); + erase_restore_mask = blit_node.eval(Table::new_from_row(erase_restore_mask)).await.into_iter().next().unwrap_or_default(); } // Yes, this is essentially the same as the above, but we duplicate to inline the blend mode. BlendMode::Restore => { @@ -295,7 +295,7 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes FutureWrapperNode::new(ClonedNode::new(positions)), FutureWrapperNode::new(ClonedNode::new(blend_params)), ); - erase_restore_mask = blit_node.eval(erase_restore_mask.to_table()).await.instance_iter().next().unwrap_or_default(); + erase_restore_mask = blit_node.eval(Table::new_from_row(erase_restore_mask)).await.into_iter().next().unwrap_or_default(); } _ => unreachable!(), } @@ -305,8 +305,8 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes actual_image = blend_image_closure(erase_restore_mask, actual_image, |a, b| blend_params.eval((a, b))); } - let first_row = image_frame_table.instance_mut_iter().next().unwrap(); - *first_row.instance = actual_image.instance; + let first_row = image_frame_table.iter_mut().next().unwrap(); + *first_row.element = actual_image.element; *first_row.transform = actual_image.transform; *first_row.alpha_blending = actual_image.alpha_blending; *first_row.source_node_id = actual_image.source_node_id; @@ -314,9 +314,9 @@ async fn brush(_: impl Ctx, mut image_frame_table: RasterDataTable, strokes image_frame_table } -pub fn blend_image_closure(foreground: Instance>, mut background: Instance>, map_fn: impl Fn(Color, Color) -> Color) -> Instance> { - let foreground_size = DVec2::new(foreground.instance.width as f64, foreground.instance.height as f64); - let background_size = DVec2::new(background.instance.width as f64, background.instance.height as f64); +pub fn blend_image_closure(foreground: TableRow>, mut background: TableRow>, map_fn: impl Fn(Color, Color) -> Color) -> TableRow> { + let foreground_size = DVec2::new(foreground.element.width as f64, foreground.element.height as f64); + let background_size = DVec2::new(background.element.width as f64, background.element.height as f64); // Transforms a point from the background image to the foreground image let background_to_foreground = DAffine2::from_scale(foreground_size) * foreground.transform.inverse() * background.transform * DAffine2::from_scale(1. / background_size); @@ -333,8 +333,8 @@ pub fn blend_image_closure(foreground: Instance>, mut background: In let background_point = DVec2::new(x as f64, y as f64); let foreground_point = background_to_foreground.transform_point2(background_point); - let source_pixel = foreground.instance.sample(foreground_point); - let Some(destination_pixel) = background.instance.data_mut().get_pixel_mut(x, y) else { continue }; + let source_pixel = foreground.element.sample(foreground_point); + let Some(destination_pixel) = background.element.data_mut().get_pixel_mut(x, y) else { continue }; *destination_pixel = map_fn(source_pixel, *destination_pixel); } @@ -343,8 +343,8 @@ pub fn blend_image_closure(foreground: Instance>, mut background: In background } -pub fn blend_stamp_closure(foreground: BrushStampGenerator, mut background: Instance>, map_fn: impl Fn(Color, Color) -> Color) -> Instance> { - let background_size = DVec2::new(background.instance.width as f64, background.instance.height as f64); +pub fn blend_stamp_closure(foreground: BrushStampGenerator, mut background: TableRow>, map_fn: impl Fn(Color, Color) -> Color) -> TableRow> { + let background_size = DVec2::new(background.element.width as f64, background.element.height as f64); // Transforms a point from the background image to the foreground image let background_to_foreground = background.transform * DAffine2::from_scale(1. / background_size); @@ -363,7 +363,7 @@ pub fn blend_stamp_closure(foreground: BrushStampGenerator, mut backgroun let foreground_point = background_to_foreground.transform_point2(background_point); let Some(source_pixel) = foreground.sample(foreground_point, area) else { continue }; - let Some(destination_pixel) = background.instance.data_mut().get_pixel_mut(x, y) else { continue }; + let Some(destination_pixel) = background.element.data_mut().get_pixel_mut(x, y) else { continue }; *destination_pixel = map_fn(source_pixel, *destination_pixel); } @@ -391,7 +391,7 @@ mod test { async fn test_brush_output_size() { let image = brush( (), - RasterDataTable::::new(Raster::new_cpu(Image::::default())), + Table::new_from_element(Raster::new_cpu(Image::::default())), vec![BrushStroke { trace: vec![crate::brush_stroke::BrushInputSample { position: DVec2::ZERO }], style: BrushStyle { @@ -406,6 +406,6 @@ mod test { BrushCache::default(), ) .await; - assert_eq!(image.instance_ref_iter().next().unwrap().instance.width, 20); + assert_eq!(image.iter().next().unwrap().element.width, 20); } } diff --git a/node-graph/gbrush/src/brush_cache.rs b/node-graph/gbrush/src/brush_cache.rs index c5495534c1..02d3a3c423 100644 --- a/node-graph/gbrush/src/brush_cache.rs +++ b/node-graph/gbrush/src/brush_cache.rs @@ -1,9 +1,9 @@ use crate::brush_stroke::BrushStroke; use crate::brush_stroke::BrushStyle; use dyn_any::DynAny; -use graphene_core::instances::Instance; use graphene_core::raster_types::CPU; use graphene_core::raster_types::Raster; +use graphene_core::table::TableRow; use std::collections::HashMap; use std::hash::Hash; use std::hash::Hasher; @@ -20,12 +20,12 @@ struct BrushCacheImpl { prev_input: Vec, // The strokes that have been fully processed and blended into the background. - #[serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame_instance")] - background: Instance>, - #[serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame_instance")] - blended_image: Instance>, - #[serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame_instance")] - last_stroke_texture: Instance>, + #[serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame_row")] + background: TableRow>, + #[serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame_row")] + blended_image: TableRow>, + #[serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame_row")] + last_stroke_texture: TableRow>, // A cache for brush textures. #[serde(skip)] @@ -33,7 +33,7 @@ struct BrushCacheImpl { } impl BrushCacheImpl { - fn compute_brush_plan(&mut self, mut background: Instance>, input: &[BrushStroke]) -> BrushPlan { + fn compute_brush_plan(&mut self, mut background: TableRow>, input: &[BrushStroke]) -> BrushPlan { // Do background invalidation. if background != self.background { self.background = background.clone(); @@ -60,8 +60,8 @@ impl BrushCacheImpl { background = std::mem::take(&mut self.blended_image); // Check if the first non-blended stroke is an extension of the last one. - let mut first_stroke_texture = Instance { - instance: Raster::::default(), + let mut first_stroke_texture = TableRow { + element: Raster::::default(), transform: glam::DAffine2::ZERO, ..Default::default() }; @@ -88,7 +88,7 @@ impl BrushCacheImpl { } } - pub fn cache_results(&mut self, input: Vec, blended_image: Instance>, last_stroke_texture: Instance>) { + pub fn cache_results(&mut self, input: Vec, blended_image: TableRow>, last_stroke_texture: TableRow>) { self.prev_input = input; self.blended_image = blended_image; self.last_stroke_texture = last_stroke_texture; @@ -123,8 +123,8 @@ impl Hash for BrushCacheImpl { #[derive(Clone, Debug, Default)] pub struct BrushPlan { pub strokes: Vec, - pub background: Instance>, - pub first_stroke_texture: Instance>, + pub background: TableRow>, + pub first_stroke_texture: TableRow>, pub first_stroke_point_skip: usize, } @@ -160,12 +160,12 @@ impl Hash for BrushCache { } impl BrushCache { - pub fn compute_brush_plan(&self, background: Instance>, input: &[BrushStroke]) -> BrushPlan { + pub fn compute_brush_plan(&self, background: TableRow>, input: &[BrushStroke]) -> BrushPlan { let mut inner = self.0.lock().unwrap(); inner.compute_brush_plan(background, input) } - pub fn cache_results(&self, input: Vec, blended_image: Instance>, last_stroke_texture: Instance>) { + pub fn cache_results(&self, input: Vec, blended_image: TableRow>, last_stroke_texture: TableRow>) { let mut inner = self.0.lock().unwrap(); inner.cache_results(input, blended_image, last_stroke_texture) } diff --git a/node-graph/gcore-shaders/Cargo.toml b/node-graph/gcore-shaders/Cargo.toml new file mode 100644 index 0000000000..ebb23e1234 --- /dev/null +++ b/node-graph/gcore-shaders/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "graphene-core-shaders" +version = "0.1.0" +edition = "2024" +description = "no_std API definitions for Graphene" +authors = ["Graphite Authors "] +license = "MIT OR Apache-2.0" + +[features] +std = ["dep:dyn-any", "dep:serde", "dep:specta", "dep:log", "glam/debug-glam-assert", "glam/std", "glam/serde", "half/std", "half/serde", "num-traits/std"] + +[dependencies] +# Local std dependencies +dyn-any = { workspace = true, optional = true } + +# Workspace dependencies +bytemuck = { workspace = true } +glam = { workspace = true } +half = { workspace = true, default-features = false } +num-derive = { workspace = true } +num-traits = { workspace = true } + +# Workspace std dependencies +serde = { workspace = true, optional = true } +specta = { workspace = true, optional = true } +log = { workspace = true, optional = true } + +[dev-dependencies] +graphene-core = { workspace = true } + +[lints.rust] +# the spirv target is not in the list of common cfgs so must be added manually +unexpected_cfgs = { level = "warn", check-cfg = [ + 'cfg(target_arch, values("spirv"))', +] } + +[package.metadata.cargo-shear] +ignored = ["graphene-core"] diff --git a/node-graph/gcore/src/blending.rs b/node-graph/gcore-shaders/src/blending.rs similarity index 86% rename from node-graph/gcore/src/blending.rs rename to node-graph/gcore-shaders/src/blending.rs index 921fb0d0ae..c3701e2cc0 100644 --- a/node-graph/gcore/src/blending.rs +++ b/node-graph/gcore-shaders/src/blending.rs @@ -1,8 +1,11 @@ -use dyn_any::DynAny; -use std::hash::Hash; +use core::fmt::Display; +use core::hash::{Hash, Hasher}; +#[cfg(not(feature = "std"))] +use num_traits::float::Float; -#[derive(Copy, Clone, Debug, PartialEq, DynAny, specta::Type, serde::Serialize, serde::Deserialize)] -#[serde(default)] +#[derive(Debug, Clone, Copy, PartialEq)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "std", serde(default))] pub struct AlphaBlending { pub blend_mode: BlendMode, pub opacity: f32, @@ -15,15 +18,15 @@ impl Default for AlphaBlending { } } impl Hash for AlphaBlending { - fn hash(&self, state: &mut H) { + fn hash(&self, state: &mut H) { self.opacity.to_bits().hash(state); self.fill.to_bits().hash(state); self.blend_mode.hash(state); self.clip.hash(state); } } -impl std::fmt::Display for AlphaBlending { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { +impl Display for AlphaBlending { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { let round = |x: f32| (x * 1e3).round() / 1e3; write!( f, @@ -56,11 +59,15 @@ impl AlphaBlending { clip: if t < 0.5 { self.clip } else { other.clip }, } } + + pub fn opacity(&self, mask: bool) -> f32 { + self.opacity * if mask { 1. } else { self.fill } + } } -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, DynAny, Hash, specta::Type)] #[repr(i32)] +#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub enum BlendMode { // Basic group #[default] @@ -185,19 +192,20 @@ impl BlendMode { } /// Renders the blend mode CSS style declaration. + #[cfg(feature = "std")] pub fn render(&self) -> String { format!( r#" mix-blend-mode: {};"#, self.to_svg_style_name().unwrap_or_else(|| { - warn!("Unsupported blend mode {self:?}"); + log::warn!("Unsupported blend mode {self:?}"); "normal" }) ) } } -impl std::fmt::Display for BlendMode { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { +impl Display for BlendMode { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { // Normal group BlendMode::Normal => write!(f, "Normal"), diff --git a/node-graph/gcore-shaders/src/choice_type.rs b/node-graph/gcore-shaders/src/choice_type.rs new file mode 100644 index 0000000000..7817ba1161 --- /dev/null +++ b/node-graph/gcore-shaders/src/choice_type.rs @@ -0,0 +1,26 @@ +pub trait ChoiceTypeStatic: Sized + Copy + crate::AsU32 + Send + Sync { + const WIDGET_HINT: ChoiceWidgetHint; + const DESCRIPTION: Option<&'static str>; + fn list() -> &'static [&'static [(Self, VariantMetadata)]]; +} + +pub enum ChoiceWidgetHint { + Dropdown, + RadioButtons, +} + +/// Translation struct between macro and definition. +#[derive(Clone, Debug)] +pub struct VariantMetadata { + /// Name as declared in source code. + pub name: &'static str, + + /// Name to be displayed in UI. + pub label: &'static str, + + /// User-facing documentation text. + pub docstring: Option<&'static str>, + + /// Name of icon to display in radio buttons and such. + pub icon: Option<&'static str>, +} diff --git a/node-graph/gcore/src/color/color_traits.rs b/node-graph/gcore-shaders/src/color/color_traits.rs similarity index 90% rename from node-graph/gcore/src/color/color_traits.rs rename to node-graph/gcore-shaders/src/color/color_traits.rs index b8ffa41f34..05b0242329 100644 --- a/node-graph/gcore/src/color/color_traits.rs +++ b/node-graph/gcore-shaders/src/color/color_traits.rs @@ -1,11 +1,10 @@ -use bytemuck::{Pod, Zeroable}; -use glam::DVec2; -use std::fmt::Debug; - -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::float::Float; - pub use crate::blending::*; +use bytemuck::{Pod, Zeroable}; +use core::fmt::Debug; +use glam::DVec2; +use num_derive::*; +#[cfg(not(feature = "std"))] +use num_traits::float::Float; pub trait Linear { fn from_f32(x: f32) -> Self; @@ -15,9 +14,9 @@ pub trait Linear { fn lerp(self, other: Self, value: Self) -> Self where Self: Sized + Copy, - Self: std::ops::Sub, - Self: std::ops::Mul, - Self: std::ops::Add, + Self: core::ops::Sub, + Self: core::ops::Mul, + Self: core::ops::Add, { self + (other - self) * value } @@ -64,7 +63,6 @@ impl Channel for T { impl LinearChannel for T {} -use num_derive::*; #[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Num, NumCast, NumOps, One, Zero, ToPrimitive, FromPrimitive)] pub struct SRGBGammaFloat(f32); @@ -97,17 +95,9 @@ impl RGBPrimaries for T { pub trait SRGB: Rec709Primaries {} -pub trait Serde: serde::Serialize + for<'a> serde::Deserialize<'a> {} -#[cfg(not(feature = "serde"))] -pub trait Serde {} - -impl serde::Deserialize<'a>> Serde for T {} -#[cfg(not(feature = "serde"))] -impl Serde for T {} - // TODO: Come up with a better name for this trait pub trait Pixel: Clone + Pod + Zeroable + Default { - #[cfg(not(target_arch = "spirv"))] + #[cfg(feature = "std")] fn to_bytes(&self) -> Vec { bytemuck::bytes_of(self).to_vec() } diff --git a/node-graph/gcore/src/color/color.rs b/node-graph/gcore-shaders/src/color/color_types.rs similarity index 95% rename from node-graph/gcore/src/color/color.rs rename to node-graph/gcore-shaders/src/color/color_types.rs index 0ca55220d6..2cb4d231bd 100644 --- a/node-graph/gcore/src/color/color.rs +++ b/node-graph/gcore-shaders/src/color/color_types.rs @@ -1,16 +1,18 @@ use super::color_traits::{Alpha, AlphaMut, AssociatedAlpha, Luminance, LuminanceMut, Pixel, RGB, RGBMut, Rec709Primaries, SRGB}; use super::discrete_srgb::{float_to_srgb_u8, srgb_u8_to_float}; use bytemuck::{Pod, Zeroable}; -use dyn_any::DynAny; +use core::fmt::Debug; +use core::hash::Hash; use half::f16; -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::Euclid; -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::float::Float; -use std::hash::Hash; +#[cfg(not(feature = "std"))] +use num_traits::Euclid; +#[cfg(not(feature = "std"))] +use num_traits::float::Float; #[repr(C)] -#[derive(Debug, Default, Clone, Copy, PartialEq, DynAny, Pod, Zeroable, serde::Serialize, serde::Deserialize)] +#[derive(Default, Clone, Copy, PartialEq, Pod, Zeroable)] +#[cfg_attr(not(target_arch = "spirv"), derive(Debug))] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, serde::Serialize, serde::Deserialize))] pub struct RGBA16F { red: f16, green: f16, @@ -18,6 +20,14 @@ pub struct RGBA16F { alpha: f16, } +/// hack around half still masking out impl Debug for f16 on spirv +#[cfg(target_arch = "spirv")] +impl core::fmt::Debug for RGBA16F { + fn fmt(&self, _f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + Ok(()) + } +} + impl From for RGBA16F { #[inline(always)] fn from(c: Color) -> Self { @@ -82,7 +92,8 @@ impl Alpha for RGBA16F { impl Pixel for RGBA16F {} #[repr(C)] -#[derive(Debug, Default, Clone, Copy, PartialEq, DynAny, Pod, Zeroable, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Default, Clone, Copy, PartialEq, Pod, Zeroable)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub struct SRGBA8 { red: u8, green: u8, @@ -162,7 +173,8 @@ impl Alpha for SRGBA8 { impl Pixel for SRGBA8 {} #[repr(C)] -#[derive(Debug, Default, Clone, Copy, PartialEq, DynAny, Pod, Zeroable, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Default, Clone, Copy, PartialEq, Pod, Zeroable)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub struct Luma(pub f32); impl Luminance for Luma { @@ -202,7 +214,8 @@ impl Pixel for Luma {} /// The other components (RGB) are stored as `f32` that range from `0.0` up to `f32::MAX`, /// the values encode the brightness of each channel proportional to the light intensity in cd/mยฒ (nits) in HDR, and `0.0` (black) to `1.0` (white) in SDR color. #[repr(C)] -#[derive(Debug, Default, Clone, Copy, PartialEq, DynAny, Pod, Zeroable, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Default, Clone, Copy, PartialEq, Pod, Zeroable)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub struct Color { red: f32, green: f32, @@ -212,7 +225,7 @@ pub struct Color { #[allow(clippy::derived_hash_with_manual_eq)] impl Hash for Color { - fn hash(&self, state: &mut H) { + fn hash(&self, state: &mut H) { self.red.to_bits().hash(state); self.green.to_bits().hash(state); self.blue.to_bits().hash(state); @@ -253,7 +266,7 @@ impl AlphaMut for Color { } impl Pixel for Color { - #[cfg(not(target_arch = "spirv"))] + #[cfg(feature = "std")] fn to_bytes(&self) -> Vec { self.to_rgba8_srgb().to_vec() } @@ -426,9 +439,9 @@ impl Color { lightness + saturation - lightness * saturation }; let temp2 = 2. * lightness - temp1; - #[cfg(not(target_arch = "spirv"))] + #[cfg(feature = "std")] let rem = |x: f32| x.rem_euclid(1.); - #[cfg(target_arch = "spirv")] + #[cfg(not(feature = "std"))] let rem = |x: f32| x.rem_euclid(&1.); let mut red = rem(hue + 1. / 3.); @@ -687,7 +700,7 @@ impl Color { if c_s <= 0.5 { c_b - (1. - 2. * c_s) * c_b * (1. - c_b) } else { - let d: fn(f32) -> f32 = |x| if x <= 0.25 { ((16. * x - 12.) * x + 4.) * x } else { x.sqrt() }; + let d = |x: f32| if x <= 0.25 { ((16. * x - 12.) * x + 4.) * x } else { x.sqrt() }; c_b + (2. * c_s - 1.) * (d(c_b) - c_b) } } @@ -790,6 +803,7 @@ impl Color { /// let color = Color::from_rgba8_srgb(0x52, 0x67, 0xFA, 0x61); // Premultiplied alpha /// assert_eq!("3240a261", color.to_rgba_hex_srgb()); // Equivalent hex incorporating premultiplied alpha /// ``` + #[cfg(feature = "std")] pub fn to_rgba_hex_srgb(&self) -> String { let gamma = self.to_gamma_srgb(); format!( @@ -807,6 +821,7 @@ impl Color { /// let color = Color::from_rgba8_srgb(0x52, 0x67, 0xFA, 0x61); // Premultiplied alpha /// assert_eq!("3240a2", color.to_rgb_hex_srgb()); // Equivalent hex incorporating premultiplied alpha /// ``` + #[cfg(feature = "std")] pub fn to_rgb_hex_srgb(&self) -> String { self.to_gamma_srgb().to_rgb_hex_srgb_from_gamma() } @@ -817,6 +832,7 @@ impl Color { /// let color = Color::from_rgba8_srgb(0x52, 0x67, 0xFA, 0x61); // Premultiplied alpha /// assert_eq!("3240a2", color.to_rgb_hex_srgb()); // Equivalent hex incorporating premultiplied alpha /// ``` + #[cfg(feature = "std")] pub fn to_rgb_hex_srgb_from_gamma(&self) -> String { format!("{:02x?}{:02x?}{:02x?}", (self.r() * 255.) as u8, (self.g() * 255.) as u8, (self.b() * 255.) as u8) } @@ -876,9 +892,9 @@ impl Color { } else { 4. + (self.red - self.green) / (max_channel - min_channel) } / 6.; - #[cfg(not(target_arch = "spirv"))] + #[cfg(feature = "std")] let hue = hue.rem_euclid(1.); - #[cfg(target_arch = "spirv")] + #[cfg(not(feature = "std"))] let hue = hue.rem_euclid(&1.); [hue, saturation, lightness, self.alpha] diff --git a/node-graph/gcore/src/color/discrete_srgb.rs b/node-graph/gcore-shaders/src/color/discrete_srgb.rs similarity index 99% rename from node-graph/gcore/src/color/discrete_srgb.rs rename to node-graph/gcore-shaders/src/color/discrete_srgb.rs index 28981e0976..13a06e30ab 100644 --- a/node-graph/gcore/src/color/discrete_srgb.rs +++ b/node-graph/gcore-shaders/src/color/discrete_srgb.rs @@ -69,7 +69,7 @@ pub fn float_to_srgb_u8(mut f: f32) -> u8 { // We clamped f to [0, 1], and the integer representations // of the positive finite non-NaN floats are monotonic. // This makes the later LUT lookup panicless. - unsafe { std::hint::unreachable_unchecked() } + unsafe { core::hint::unreachable_unchecked() } } // Compute a piecewise linear interpolation that is always diff --git a/node-graph/gcore/src/color/mod.rs b/node-graph/gcore-shaders/src/color/mod.rs similarity index 68% rename from node-graph/gcore/src/color/mod.rs rename to node-graph/gcore-shaders/src/color/mod.rs index 3b286c510c..0a983229c8 100644 --- a/node-graph/gcore/src/color/mod.rs +++ b/node-graph/gcore-shaders/src/color/mod.rs @@ -1,7 +1,7 @@ -mod color; mod color_traits; +mod color_types; mod discrete_srgb; -pub use color::*; pub use color_traits::*; +pub use color_types::*; pub use discrete_srgb::*; diff --git a/node-graph/gcore-shaders/src/context.rs b/node-graph/gcore-shaders/src/context.rs new file mode 100644 index 0000000000..11ed839a31 --- /dev/null +++ b/node-graph/gcore-shaders/src/context.rs @@ -0,0 +1,9 @@ +pub trait Ctx: Clone + Send {} + +impl Ctx for Option {} +impl Ctx for &T {} +impl Ctx for () {} + +pub trait ArcCtx: Send + Sync {} +#[cfg(feature = "std")] +impl Ctx for std::sync::Arc {} diff --git a/node-graph/gcore-shaders/src/lib.rs b/node-graph/gcore-shaders/src/lib.rs new file mode 100644 index 0000000000..9b310ea9d7 --- /dev/null +++ b/node-graph/gcore-shaders/src/lib.rs @@ -0,0 +1,19 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +pub mod blending; +pub mod choice_type; +pub mod color; +pub mod context; +pub mod registry; + +pub use context::Ctx; +pub use glam; + +pub trait AsU32 { + fn as_u32(&self) -> u32; +} +impl AsU32 for u32 { + fn as_u32(&self) -> u32 { + *self + } +} diff --git a/node-graph/gcore-shaders/src/registry.rs b/node-graph/gcore-shaders/src/registry.rs new file mode 100644 index 0000000000..d1957c8d29 --- /dev/null +++ b/node-graph/gcore-shaders/src/registry.rs @@ -0,0 +1,31 @@ +pub mod types { + /// 0% - 100% + pub type Percentage = f64; + /// 0% - 100% + pub type PercentageF32 = f32; + /// -100% - 100% + pub type SignedPercentage = f64; + /// -100% - 100% + pub type SignedPercentageF32 = f32; + /// -180ยฐ - 180ยฐ + pub type Angle = f64; + /// -180ยฐ - 180ยฐ + pub type AngleF32 = f32; + /// Ends in the unit of x + pub type Multiplier = f64; + /// Non-negative integer with px unit + pub type PixelLength = f64; + /// Non-negative + pub type Length = f64; + /// 0 to 1 + pub type Fraction = f64; + /// Unsigned integer + pub type IntegerCount = u32; + /// Unsigned integer to be used for random seeds + pub type SeedValue = u32; + /// DVec2 with px unit + pub type PixelSize = glam::DVec2; + /// String with one or more than one line + #[cfg(feature = "std")] + pub type TextArea = String; +} diff --git a/node-graph/gcore/Cargo.toml b/node-graph/gcore/Cargo.toml index cc8b30c8b4..2fb727aee5 100644 --- a/node-graph/gcore/Cargo.toml +++ b/node-graph/gcore/Cargo.toml @@ -14,10 +14,12 @@ wgpu = ["dep:wgpu"] dealloc_nodes = [] [dependencies] +# Local dependencies +graphene-core-shaders = { workspace = true, features = ["std"] } + # Workspace dependencies bytemuck = { workspace = true } node-macro = { workspace = true } -num-derive = { workspace = true } num-traits = { workspace = true } rand = { workspace = true } glam = { workspace = true } @@ -27,16 +29,16 @@ rustc-hash = { workspace = true } dyn-any = { workspace = true } ctor = { workspace = true } rand_chacha = { workspace = true } -bezier-rs = { workspace = true } specta = { workspace = true } image = { workspace = true } -half = { workspace = true } tinyvec = { workspace = true } parley = { workspace = true } skrifa = { workspace = true } kurbo = { workspace = true } +lyon_geom = { workspace = true } log = { workspace = true } base64 = { workspace = true } +poly-cool = { workspace = true } # Optional workspace dependencies serde = { workspace = true, optional = true } @@ -46,9 +48,3 @@ wgpu = { workspace = true, optional = true } # Workspace dependencies tokio = { workspace = true } serde_json = { workspace = true } - -[lints.rust] -# the spirv target is not in the list of common cfgs so must be added manually -unexpected_cfgs = { level = "warn", check-cfg = [ - 'cfg(target_arch, values("spirv"))', -] } diff --git a/node-graph/gcore/src/artboard.rs b/node-graph/gcore/src/artboard.rs new file mode 100644 index 0000000000..168259d99f --- /dev/null +++ b/node-graph/gcore/src/artboard.rs @@ -0,0 +1,140 @@ +use crate::blending::AlphaBlending; +use crate::bounds::{BoundingBox, RenderBoundingBox}; +use crate::gradient::GradientStops; +use crate::math::quad::Quad; +use crate::raster_types::{CPU, GPU, Raster}; +use crate::table::{Table, TableRow}; +use crate::transform::TransformMut; +use crate::uuid::NodeId; +use crate::vector::Vector; +use crate::{CloneVarArgs, Color, Context, Ctx, ExtractAll, Graphic, OwnedContextImpl}; +use dyn_any::DynAny; +use glam::{DAffine2, DVec2, IVec2}; +use std::hash::Hash; + +/// Some [`ArtboardData`] with some optional clipping bounds that can be exported. +#[derive(Clone, Debug, Hash, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] +pub struct Artboard { + pub content: Table, + pub label: String, + pub location: IVec2, + pub dimensions: IVec2, + pub background: Color, + pub clip: bool, +} + +impl Default for Artboard { + fn default() -> Self { + Self::new(IVec2::ZERO, IVec2::new(1920, 1080)) + } +} + +impl Artboard { + pub fn new(location: IVec2, dimensions: IVec2) -> Self { + Self { + content: Table::new(), + label: "Artboard".to_string(), + location: location.min(location + dimensions), + dimensions: dimensions.abs(), + background: Color::WHITE, + clip: false, + } + } +} + +impl BoundingBox for Artboard { + fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { + let artboard_bounds = || (transform * Quad::from_box([self.location.as_dvec2(), self.location.as_dvec2() + self.dimensions.as_dvec2()])).bounding_box(); + + if self.clip { + return RenderBoundingBox::Rectangle(artboard_bounds()); + } + + match self.content.bounding_box(transform, include_stroke) { + RenderBoundingBox::Rectangle(content_bounds) => RenderBoundingBox::Rectangle(Quad::combine_bounds(content_bounds, artboard_bounds())), + other => other, + } + } +} + +// TODO: Eventually remove this migration document upgrade code +pub fn migrate_artboard<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + use serde::Deserialize; + + #[derive(Clone, Default, Debug, Hash, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] + pub struct ArtboardGroup { + pub artboards: Vec<(Artboard, Option)>, + } + + #[derive(serde::Serialize, serde::Deserialize)] + #[serde(untagged)] + enum EitherFormat { + ArtboardGroup(ArtboardGroup), + ArtboardTable(Table), + } + + Ok(match EitherFormat::deserialize(deserializer)? { + EitherFormat::ArtboardGroup(artboard_group) => { + let mut table = Table::new(); + for (artboard, source_node_id) in artboard_group.artboards { + table.push(TableRow { + element: artboard, + mask: None, + transform: DAffine2::IDENTITY, + alpha_blending: AlphaBlending::default(), + source_node_id, + }); + } + table + } + EitherFormat::ArtboardTable(artboard_table) => artboard_table, + }) +} + +#[node_macro::node(category(""))] +async fn create_artboard> + 'n>( + ctx: impl ExtractAll + CloneVarArgs + Ctx, + #[implementations( + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table>, + Context -> Table, + Context -> Table, + Context -> DAffine2, + )] + content: impl Node, Output = T>, + label: String, + location: DVec2, + dimensions: DVec2, + background: Table, + clip: bool, +) -> Table { + let location = location.as_ivec2(); + + let footprint = ctx.try_footprint().copied(); + let mut new_ctx = OwnedContextImpl::from(ctx); + if let Some(mut footprint) = footprint { + footprint.translate(location.as_dvec2()); + new_ctx = new_ctx.with_footprint(footprint); + } + let content = content.eval(new_ctx.into_context()).await.into(); + + let dimensions = dimensions.as_ivec2().max(IVec2::ONE); + + let location = location.min(location + dimensions); + + let dimensions = dimensions.abs(); + + let background: Option = background.into(); + let background = background.unwrap_or(Color::WHITE); + + Table::new_from_element(Artboard { + content, + label, + location, + dimensions, + background, + clip, + }) +} diff --git a/node-graph/gcore/src/blending_nodes.rs b/node-graph/gcore/src/blending_nodes.rs index fcf2bd0c00..a6c2c34e61 100644 --- a/node-graph/gcore/src/blending_nodes.rs +++ b/node-graph/gcore/src/blending_nodes.rs @@ -1,8 +1,9 @@ -use crate::raster::Image; -use crate::raster_types::{CPU, RasterDataTable}; +use crate::gradient::GradientStops; +use crate::raster_types::{CPU, Raster}; use crate::registry::types::Percentage; -use crate::vector::VectorDataTable; -use crate::{BlendMode, Color, Ctx, GraphicElement, GraphicGroupTable}; +use crate::table::Table; +use crate::vector::Vector; +use crate::{BlendMode, Color, Ctx, Graphic}; pub(super) trait MultiplyAlpha { fn multiply_alpha(&mut self, factor: f64); @@ -13,27 +14,38 @@ impl MultiplyAlpha for Color { *self = Color::from_rgbaf32_unchecked(self.r(), self.g(), self.b(), (self.a() * factor as f32).clamp(0., 1.)) } } -impl MultiplyAlpha for VectorDataTable { +impl MultiplyAlpha for Table { fn multiply_alpha(&mut self, factor: f64) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.opacity *= factor as f32; + for row in self.iter_mut() { + row.alpha_blending.opacity *= factor as f32; } } } -impl MultiplyAlpha for GraphicGroupTable { +impl MultiplyAlpha for Table { fn multiply_alpha(&mut self, factor: f64) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.opacity *= factor as f32; + for row in self.iter_mut() { + row.alpha_blending.opacity *= factor as f32; } } } -impl MultiplyAlpha for RasterDataTable -where - GraphicElement: From>, -{ +impl MultiplyAlpha for Table> { fn multiply_alpha(&mut self, factor: f64) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.opacity *= factor as f32; + for row in self.iter_mut() { + row.alpha_blending.opacity *= factor as f32; + } + } +} +impl MultiplyAlpha for Table { + fn multiply_alpha(&mut self, factor: f64) { + for row in self.iter_mut() { + row.alpha_blending.opacity *= factor as f32; + } + } +} +impl MultiplyAlpha for Table { + fn multiply_alpha(&mut self, factor: f64) { + for row in self.iter_mut() { + row.alpha_blending.opacity *= factor as f32; } } } @@ -46,24 +58,38 @@ impl MultiplyFill for Color { *self = Color::from_rgbaf32_unchecked(self.r(), self.g(), self.b(), (self.a() * factor as f32).clamp(0., 1.)) } } -impl MultiplyFill for VectorDataTable { +impl MultiplyFill for Table { fn multiply_fill(&mut self, factor: f64) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.fill *= factor as f32; + for row in self.iter_mut() { + row.alpha_blending.fill *= factor as f32; } } } -impl MultiplyFill for GraphicGroupTable { +impl MultiplyFill for Table { fn multiply_fill(&mut self, factor: f64) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.fill *= factor as f32; + for row in self.iter_mut() { + row.alpha_blending.fill *= factor as f32; } } } -impl MultiplyFill for RasterDataTable { +impl MultiplyFill for Table> { fn multiply_fill(&mut self, factor: f64) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.fill *= factor as f32; + for row in self.iter_mut() { + row.alpha_blending.fill *= factor as f32; + } + } +} +impl MultiplyFill for Table { + fn multiply_fill(&mut self, factor: f64) { + for row in self.iter_mut() { + row.alpha_blending.fill *= factor as f32; + } + } +} +impl MultiplyFill for Table { + fn multiply_fill(&mut self, factor: f64) { + for row in self.iter_mut() { + row.alpha_blending.fill *= factor as f32; } } } @@ -72,24 +98,38 @@ trait SetBlendMode { fn set_blend_mode(&mut self, blend_mode: BlendMode); } -impl SetBlendMode for VectorDataTable { +impl SetBlendMode for Table { fn set_blend_mode(&mut self, blend_mode: BlendMode) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.blend_mode = blend_mode; + for row in self.iter_mut() { + row.alpha_blending.blend_mode = blend_mode; } } } -impl SetBlendMode for GraphicGroupTable { +impl SetBlendMode for Table { fn set_blend_mode(&mut self, blend_mode: BlendMode) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.blend_mode = blend_mode; + for row in self.iter_mut() { + row.alpha_blending.blend_mode = blend_mode; } } } -impl SetBlendMode for RasterDataTable { +impl SetBlendMode for Table> { fn set_blend_mode(&mut self, blend_mode: BlendMode) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.blend_mode = blend_mode; + for row in self.iter_mut() { + row.alpha_blending.blend_mode = blend_mode; + } + } +} +impl SetBlendMode for Table { + fn set_blend_mode(&mut self, blend_mode: BlendMode) { + for row in self.iter_mut() { + row.alpha_blending.blend_mode = blend_mode; + } + } +} +impl SetBlendMode for Table { + fn set_blend_mode(&mut self, blend_mode: BlendMode) { + for row in self.iter_mut() { + row.alpha_blending.blend_mode = blend_mode; } } } @@ -98,24 +138,38 @@ trait SetClip { fn set_clip(&mut self, clip: bool); } -impl SetClip for VectorDataTable { +impl SetClip for Table { fn set_clip(&mut self, clip: bool) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.clip = clip; + for row in self.iter_mut() { + row.alpha_blending.clip = clip; } } } -impl SetClip for GraphicGroupTable { +impl SetClip for Table { fn set_clip(&mut self, clip: bool) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.clip = clip; + for row in self.iter_mut() { + row.alpha_blending.clip = clip; } } } -impl SetClip for RasterDataTable { +impl SetClip for Table> { fn set_clip(&mut self, clip: bool) { - for instance in self.instance_mut_iter() { - instance.alpha_blending.clip = clip; + for row in self.iter_mut() { + row.alpha_blending.clip = clip; + } + } +} +impl SetClip for Table { + fn set_clip(&mut self, clip: bool) { + for row in self.iter_mut() { + row.alpha_blending.clip = clip; + } + } +} +impl SetClip for Table { + fn set_clip(&mut self, clip: bool) { + for row in self.iter_mut() { + row.alpha_blending.clip = clip; } } } @@ -124,14 +178,16 @@ impl SetClip for RasterDataTable { fn blend_mode( _: impl Ctx, #[implementations( - GraphicGroupTable, - VectorDataTable, - RasterDataTable, + Table, + Table, + Table>, + Table, + Table, )] mut value: T, blend_mode: BlendMode, ) -> T { - // TODO: Find a way to make this apply once to the table's parent (i.e. its row in its parent table or Instance) rather than applying to each row in its own table, which produces the undesired result + // TODO: Find a way to make this apply once to the table's parent (i.e. its row in its parent table or TableRow) rather than applying to each row in its own table, which produces the undesired result value.set_blend_mode(blend_mode); value } @@ -140,14 +196,16 @@ fn blend_mode( fn opacity( _: impl Ctx, #[implementations( - GraphicGroupTable, - VectorDataTable, - RasterDataTable, + Table, + Table, + Table>, + Table, + Table, )] mut value: T, #[default(100.)] opacity: Percentage, ) -> T { - // TODO: Find a way to make this apply once to the table's parent (i.e. its row in its parent table or Instance) rather than applying to each row in its own table, which produces the undesired result + // TODO: Find a way to make this apply once to the table's parent (i.e. its row in its parent table or TableRow) rather than applying to each row in its own table, which produces the undesired result value.multiply_alpha(opacity / 100.); value } @@ -156,9 +214,11 @@ fn opacity( fn blending( _: impl Ctx, #[implementations( - GraphicGroupTable, - VectorDataTable, - RasterDataTable, + Table, + Table, + Table>, + Table, + Table, )] mut value: T, blend_mode: BlendMode, @@ -166,7 +226,7 @@ fn blending( #[default(100.)] fill: Percentage, #[default(false)] clip: bool, ) -> T { - // TODO: Find a way to make this apply once to the table's parent (i.e. its row in its parent table or Instance) rather than applying to each row in its own table, which produces the undesired result + // TODO: Find a way to make this apply once to the table's parent (i.e. its row in its parent table or TableRow) rather than applying to each row in its own table, which produces the undesired result value.set_blend_mode(blend_mode); value.multiply_alpha(opacity / 100.); value.multiply_fill(fill / 100.); diff --git a/node-graph/gcore/src/bounds.rs b/node-graph/gcore/src/bounds.rs index ccc373d4cf..fb4b19cd42 100644 --- a/node-graph/gcore/src/bounds.rs +++ b/node-graph/gcore/src/bounds.rs @@ -1,24 +1,40 @@ -use crate::Color; +use crate::{Color, gradient::GradientStops}; use glam::{DAffine2, DVec2}; +#[derive(Clone, Copy, Default, Debug, PartialEq)] +pub enum RenderBoundingBox { + #[default] + None, + Infinite, + Rectangle([DVec2; 2]), +} + pub trait BoundingBox { - fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> Option<[DVec2; 2]>; + fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox; } macro_rules! none_impl { ($t:path) => { impl BoundingBox for $t { - fn bounding_box(&self, _transform: DAffine2, _include_stroke: bool) -> Option<[DVec2; 2]> { - None + fn bounding_box(&self, _transform: DAffine2, _include_stroke: bool) -> RenderBoundingBox { + RenderBoundingBox::None } } }; } - -none_impl!(String); none_impl!(bool); none_impl!(f32); none_impl!(f64); none_impl!(DVec2); -none_impl!(Option); -none_impl!(Vec); +none_impl!(String); + +impl BoundingBox for Color { + fn bounding_box(&self, _transform: DAffine2, _include_stroke: bool) -> RenderBoundingBox { + RenderBoundingBox::Infinite + } +} +impl BoundingBox for GradientStops { + fn bounding_box(&self, _transform: DAffine2, _include_stroke: bool) -> RenderBoundingBox { + RenderBoundingBox::Infinite + } +} diff --git a/node-graph/gcore/src/context.rs b/node-graph/gcore/src/context.rs index cd2f500f2f..4b1ab305e7 100644 --- a/node-graph/gcore/src/context.rs +++ b/node-graph/gcore/src/context.rs @@ -1,11 +1,10 @@ use crate::transform::Footprint; +pub use graphene_core_shaders::context::{ArcCtx, Ctx}; use std::any::Any; use std::borrow::Borrow; use std::panic::Location; use std::sync::Arc; -pub trait Ctx: Clone + Send {} - pub trait ExtractFootprint { #[track_caller] fn try_footprint(&self) -> Option<&Footprint>; @@ -51,9 +50,6 @@ pub enum VarArgsResult { IndexOutOfBounds, NoVarArgs, } -impl Ctx for Option {} -impl Ctx for &T {} -impl Ctx for () {} impl Ctx for Footprint {} impl ExtractFootprint for () { fn try_footprint(&self) -> Option<&Footprint> { @@ -157,7 +153,7 @@ impl CloneVarArgs for Arc { } impl Ctx for ContextImpl<'_> {} -impl Ctx for Arc {} +impl ArcCtx for OwnedContextImpl {} impl ExtractFootprint for ContextImpl<'_> { fn try_footprint(&self) -> Option<&Footprint> { diff --git a/node-graph/gcore/src/debug.rs b/node-graph/gcore/src/debug.rs index 8b4a2a80d2..f484446d4c 100644 --- a/node-graph/gcore/src/debug.rs +++ b/node-graph/gcore/src/debug.rs @@ -1,12 +1,12 @@ -use crate::raster_types::{CPU, RasterDataTable}; -use crate::vector::VectorDataTable; -use crate::{Color, Ctx}; +use crate::Ctx; +use crate::raster_types::{CPU, Raster}; +use crate::table::Table; use glam::{DAffine2, DVec2}; #[node_macro::node(category("Debug"), name("Log to Console"))] -fn log_to_console(_: impl Ctx, #[implementations(String, bool, f64, u32, u64, DVec2, VectorDataTable, DAffine2, Color, Option)] value: T) -> T { +fn log_to_console(_: impl Ctx, #[implementations(bool, f64, u32, u64, DVec2, DAffine2, String)] value: T) -> T { // KEEP THIS `debug!()` - It acts as the output for the debug node itself - log::debug!("{:#?}", value); + log::debug!("{value:#?}"); value } @@ -18,18 +18,18 @@ fn size_of(_: impl Ctx, ty: crate::Type) -> Option { /// Meant for debugging purposes, not general use. Wraps the input value in the Some variant of an Option. #[node_macro::node(category("Debug"))] -fn some(_: impl Ctx, #[implementations(f64, f32, u32, u64, String, Color)] input: T) -> Option { +fn some(_: impl Ctx, #[implementations(f64, f32, u32, u64, String)] input: T) -> Option { Some(input) } /// Meant for debugging purposes, not general use. Unwraps the input value from an Option, returning the default value if the input is None. #[node_macro::node(category("Debug"))] -fn unwrap(_: impl Ctx, #[implementations(Option, Option, Option, Option, Option, Option)] input: Option) -> T { +fn unwrap_option(_: impl Ctx, #[implementations(Option, Option, Option, Option)] input: Option) -> T { input.unwrap_or_default() } /// Meant for debugging purposes, not general use. Clones the input value. #[node_macro::node(category("Debug"))] -fn clone<'i, T: Clone + 'i>(_: impl Ctx, #[implementations(&RasterDataTable)] value: &'i T) -> T { +fn clone<'i, T: Clone + 'i>(_: impl Ctx, #[implementations(&Table>)] value: &'i T) -> T { value.clone() } diff --git a/node-graph/gcore/src/extract_xy.rs b/node-graph/gcore/src/extract_xy.rs index 3697e363a8..97f546a546 100644 --- a/node-graph/gcore/src/extract_xy.rs +++ b/node-graph/gcore/src/extract_xy.rs @@ -2,9 +2,9 @@ use crate::Ctx; use dyn_any::DynAny; use glam::{DVec2, IVec2, UVec2}; -/// Obtains the X or Y component of a coordinate point. +/// Obtains the X or Y component of a vec2. /// -/// The inverse of this node is "Coordinate Value", which can have either or both its X and Y exposed as graph inputs. +/// The inverse of this node is "Vec2 Value", which can have either or both its X and Y parameters exposed as graph inputs. #[node_macro::node(name("Extract XY"), category("Math: Vector"))] fn extract_xy>(_: impl Ctx, #[implementations(DVec2, IVec2, UVec2)] vector: T, axis: XY) -> f64 { match axis { @@ -13,9 +13,9 @@ fn extract_xy>(_: impl Ctx, #[implementations(DVec2, IVec2, UVec2 } } -/// The X or Y component of a coordinate. +/// The X or Y component of a vec2. #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] -#[widget(Dropdown)] +#[widget(Radio)] pub enum XY { #[default] X, diff --git a/node-graph/gcore/src/gradient.rs b/node-graph/gcore/src/gradient.rs index 8034cc9876..0d51a8611f 100644 --- a/node-graph/gcore/src/gradient.rs +++ b/node-graph/gcore/src/gradient.rs @@ -126,7 +126,6 @@ pub struct Gradient { pub gradient_type: GradientType, pub start: DVec2, pub end: DVec2, - pub transform: DAffine2, } impl Default for Gradient { @@ -136,7 +135,6 @@ impl Default for Gradient { gradient_type: GradientType::Linear, start: DVec2::new(0., 0.5), end: DVec2::new(1., 0.5), - transform: DAffine2::IDENTITY, } } } @@ -147,7 +145,6 @@ impl std::hash::Hash for Gradient { [].iter() .chain(self.start.to_array().iter()) .chain(self.end.to_array().iter()) - .chain(self.transform.to_cols_array().iter()) .chain(self.stops.0.iter().map(|(position, _)| position)) .for_each(|x| x.to_bits().hash(state)); self.stops.0.iter().for_each(|(_, color)| color.hash(state)); @@ -171,20 +168,15 @@ impl std::fmt::Display for Gradient { impl Gradient { /// Constructs a new gradient with the colors at 0 and 1 specified. - pub fn new(start: DVec2, start_color: Color, end: DVec2, end_color: Color, transform: DAffine2, gradient_type: GradientType) -> Self { - Gradient { - start, - end, - stops: GradientStops::new(vec![(0., start_color.to_gamma_srgb()), (1., end_color.to_gamma_srgb())]), - transform, - gradient_type, - } + pub fn new(start: DVec2, start_color: Color, end: DVec2, end_color: Color, gradient_type: GradientType) -> Self { + let stops = GradientStops::new(vec![(0., start_color.to_gamma_srgb()), (1., end_color.to_gamma_srgb())]); + + Self { start, end, stops, gradient_type } } pub fn lerp(&self, other: &Self, time: f64) -> Self { let start = self.start + (other.start - self.start) * time; let end = self.end + (other.end - self.end) * time; - let transform = self.transform; let stops = self .stops .0 @@ -199,13 +191,7 @@ impl Gradient { let stops = GradientStops::new(stops); let gradient_type = if time < 0.5 { self.gradient_type } else { other.gradient_type }; - Self { - start, - end, - transform, - stops, - gradient_type, - } + Self { start, end, stops, gradient_type } } /// Insert a stop into the gradient, the index if successful diff --git a/node-graph/gcore/src/graphic.rs b/node-graph/gcore/src/graphic.rs new file mode 100644 index 0000000000..a2a945b150 --- /dev/null +++ b/node-graph/gcore/src/graphic.rs @@ -0,0 +1,556 @@ +use crate::blending::AlphaBlending; +use crate::bounds::{BoundingBox, RenderBoundingBox}; +use crate::gradient::GradientStops; +use crate::raster_types::{CPU, GPU, Raster}; +use crate::table::{Table, TableRow}; +use crate::uuid::NodeId; +use crate::vector::Vector; +use crate::{Artboard, Color, Ctx}; +use dyn_any::DynAny; +use glam::{DAffine2, DVec2}; +use std::hash::Hash; + +/// The possible forms of graphical content that can be rendered by the Render node into either an image or SVG syntax. +#[derive(Clone, Debug, Hash, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] +pub enum Graphic { + Graphic(Table), + Vector(Table), + RasterCPU(Table>), + RasterGPU(Table>), + Color(Table), + Gradient(Table), +} + +impl Default for Graphic { + fn default() -> Self { + Self::Graphic(Table::new()) + } +} + +// Graphic +impl From> for Graphic { + fn from(graphic: Table) -> Self { + Graphic::Graphic(graphic) + } +} + +// Vector +impl From for Graphic { + fn from(vector: Vector) -> Self { + Graphic::Vector(Table::new_from_element(vector)) + } +} +impl From> for Graphic { + fn from(vector: Table) -> Self { + Graphic::Vector(vector) + } +} +impl From for Table { + fn from(vector: Vector) -> Self { + Table::new_from_element(Graphic::Vector(Table::new_from_element(vector))) + } +} +impl From> for Table { + fn from(vector: Table) -> Self { + Table::new_from_element(Graphic::Vector(vector)) + } +} + +// Raster +impl From> for Graphic { + fn from(raster: Raster) -> Self { + Graphic::RasterCPU(Table::new_from_element(raster)) + } +} +impl From>> for Graphic { + fn from(raster: Table>) -> Self { + Graphic::RasterCPU(raster) + } +} +impl From> for Table { + fn from(raster: Raster) -> Self { + Table::new_from_element(Graphic::RasterCPU(Table::new_from_element(raster))) + } +} +impl From>> for Table { + fn from(raster: Table>) -> Self { + Table::new_from_element(Graphic::RasterCPU(raster)) + } +} + +// Raster +impl From> for Graphic { + fn from(raster: Raster) -> Self { + Graphic::RasterGPU(Table::new_from_element(raster)) + } +} +impl From>> for Graphic { + fn from(raster: Table>) -> Self { + Graphic::RasterGPU(raster) + } +} +impl From> for Table { + fn from(raster: Raster) -> Self { + Table::new_from_element(Graphic::RasterGPU(Table::new_from_element(raster))) + } +} +impl From>> for Table { + fn from(raster: Table>) -> Self { + Table::new_from_element(Graphic::RasterGPU(raster)) + } +} + +// Color +impl From for Graphic { + fn from(color: Color) -> Self { + Graphic::Color(Table::new_from_element(color)) + } +} +impl From> for Graphic { + fn from(color: Table) -> Self { + Graphic::Color(color) + } +} +impl From for Table { + fn from(color: Color) -> Self { + Table::new_from_element(Graphic::Color(Table::new_from_element(color))) + } +} +impl From> for Table { + fn from(color: Table) -> Self { + Table::new_from_element(Graphic::Color(color)) + } +} + +// Option +impl From> for Graphic { + fn from(color: Option) -> Self { + if let Some(color) = color { + Graphic::Color(Table::new_from_element(color)) + } else { + Graphic::default() + } + } +} +impl From> for Table { + fn from(color: Option) -> Self { + if let Some(color) = color { + Table::new_from_element(Graphic::Color(Table::new_from_element(color))) + } else { + Table::new() + } + } +} +impl From> for Option { + fn from(color: Table) -> Self { + color.into_iter().next().map(|row| row.element) + } +} + +// GradientStops +impl From for Graphic { + fn from(gradient: GradientStops) -> Self { + Graphic::Gradient(Table::new_from_element(gradient)) + } +} +impl From> for Graphic { + fn from(gradient: Table) -> Self { + Graphic::Gradient(gradient) + } +} +impl From for Table { + fn from(gradient: GradientStops) -> Self { + Table::new_from_element(Graphic::Gradient(Table::new_from_element(gradient))) + } +} +impl From> for Table { + fn from(gradient: Table) -> Self { + Table::new_from_element(Graphic::Gradient(gradient)) + } +} + +// DAffine2 +impl From for Graphic { + fn from(_: DAffine2) -> Self { + Graphic::default() + } +} +impl From for Table { + fn from(_: DAffine2) -> Self { + Table::new() + } +} + +impl Graphic { + pub fn as_graphic(&self) -> Option<&Table> { + match self { + Graphic::Graphic(graphic) => Some(graphic), + _ => None, + } + } + + pub fn as_graphic_mut(&mut self) -> Option<&mut Table> { + match self { + Graphic::Graphic(graphic) => Some(graphic), + _ => None, + } + } + + pub fn as_vector(&self) -> Option<&Table> { + match self { + Graphic::Vector(vector) => Some(vector), + _ => None, + } + } + + pub fn as_vector_mut(&mut self) -> Option<&mut Table> { + match self { + Graphic::Vector(vector) => Some(vector), + _ => None, + } + } + + pub fn as_raster(&self) -> Option<&Table>> { + match self { + Graphic::RasterCPU(raster) => Some(raster), + _ => None, + } + } + + pub fn as_raster_mut(&mut self) -> Option<&mut Table>> { + match self { + Graphic::RasterCPU(raster) => Some(raster), + _ => None, + } + } + + pub fn had_clip_enabled(&self) -> bool { + match self { + Graphic::Vector(vector) => vector.iter().all(|row| row.alpha_blending.clip), + Graphic::Graphic(graphic) => graphic.iter().all(|row| row.alpha_blending.clip), + Graphic::RasterCPU(raster) => raster.iter().all(|row| row.alpha_blending.clip), + Graphic::RasterGPU(raster) => raster.iter().all(|row| row.alpha_blending.clip), + Graphic::Color(color) => color.iter().all(|row| row.alpha_blending.clip), + Graphic::Gradient(gradient) => gradient.iter().all(|row| row.alpha_blending.clip), + } + } + + pub fn can_reduce_to_clip_path(&self) -> bool { + match self { + Graphic::Vector(vector) => vector.iter().all(|row| { + let style = &row.element.style; + let alpha_blending = &row.alpha_blending; + (alpha_blending.opacity > 1. - f32::EPSILON) && style.fill().is_opaque() && style.stroke().is_none_or(|stroke| !stroke.has_renderable_stroke()) + }), + _ => false, + } + } +} + +impl BoundingBox for Graphic { + fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { + match self { + Graphic::Vector(vector) => vector.bounding_box(transform, include_stroke), + Graphic::RasterCPU(raster) => raster.bounding_box(transform, include_stroke), + Graphic::RasterGPU(raster) => raster.bounding_box(transform, include_stroke), + Graphic::Graphic(graphic) => graphic.bounding_box(transform, include_stroke), + Graphic::Color(color) => color.bounding_box(transform, include_stroke), + Graphic::Gradient(gradient) => gradient.bounding_box(transform, include_stroke), + } + } +} + +#[node_macro::node(category(""))] +async fn source_node_id( + _: impl Ctx, + #[implementations(Table, Table, Table, Table>, Table>, Table, Table)] content: Table, + node_path: Vec, +) -> Table { + // Get the penultimate element of the node path, or None if the path is too short + // This is used to get the ID of the user-facing parent layer-style node (which encapsulates this internal node). + let source_node_id = node_path.get(node_path.len().wrapping_sub(2)).copied(); + + let mut content = content; + for row in content.iter_mut() { + *row.source_node_id = source_node_id; + } + + content +} + +/// Joins two tables of the same type, extending the base table with the rows of the new table. +#[node_macro::node(category("General"))] +async fn extend( + _: impl Ctx, + /// The table whose rows will appear at the start of the extended table. + #[implementations(Table, Table, Table, Table>, Table>, Table, Table)] + base: Table, + /// The table whose rows will appear at the end of the extended table. + #[expose] + #[implementations(Table, Table, Table, Table>, Table>, Table, Table)] + new: Table, +) -> Table { + let mut base = base; + base.extend(new); + + base +} + +// TODO: Eventually remove this document upgrade code +#[node_macro::node(category(""))] +async fn legacy_layer_extend( + _: impl Ctx, + #[implementations(Table, Table, Table, Table>, Table>, Table, Table)] base: Table, + #[expose] + #[implementations(Table, Table, Table, Table>, Table>, Table, Table)] + new: Table, + nested_node_path: Vec, +) -> Table { + // Get the penultimate element of the node path, or None if the path is too short + // This is used to get the ID of the user-facing parent layer-style node (which encapsulates this internal node). + let source_node_id = nested_node_path.get(nested_node_path.len().wrapping_sub(2)).copied(); + + let mut base = base; + for row in new.into_iter() { + base.push(TableRow { source_node_id, ..row }); + } + + base +} + +/// Places a table of graphical content into an element of a new wrapper graphic table. +#[node_macro::node(category("General"))] +async fn wrap_graphic + 'n>( + _: impl Ctx, + #[implementations( + Table, + Table, + Table>, + Table>, + Table, + Table, + DAffine2, + )] + content: T, +) -> Table { + Table::new_from_element(content.into()) +} + +/// Converts a table of graphical content into a graphic table by placing it into an element of a new wrapper graphic table. +/// If it is already a graphic table, it is not wrapped again. Use the 'Wrap Graphic' node if wrapping is always desired. +#[node_macro::node(category("Type Conversion"))] +async fn to_graphic> + 'n>( + _: impl Ctx, + #[implementations( + Table, + Table, + Table>, + Table>, + Table, + Table, + )] + content: T, +) -> Table { + content.into() +} + +#[node_macro::node(category("General"))] +async fn flatten_graphic(_: impl Ctx, content: Table, fully_flatten: bool) -> Table { + // TODO: Avoid mutable reference, instead return a new Table? + fn flatten_table(output_graphic_table: &mut Table, current_graphic_table: Table, fully_flatten: bool, recursion_depth: usize) { + for current_row in current_graphic_table.iter() { + let current_element = current_row.element.clone(); + let reference = *current_row.source_node_id; + + let recurse = fully_flatten || recursion_depth == 0; + + match current_element { + // If we're allowed to recurse, flatten any graphics we encounter + Graphic::Graphic(mut current_element) if recurse => { + // Apply the parent graphic's transform to all child elements + for graphic in current_element.iter_mut() { + *graphic.transform = *current_row.transform * *graphic.transform; + } + + flatten_table(output_graphic_table, current_element, fully_flatten, recursion_depth + 1); + } + // Push any leaf Graphic elements we encounter, which can be either Graphic table elements beyond the recursion depth, or table elements other than Graphic tables + _ => { + output_graphic_table.push(TableRow { + element: current_element, + mask: current_row.mask.clone(), + transform: *current_row.transform, + alpha_blending: *current_row.alpha_blending, + source_node_id: reference, + }); + } + } + } + } + + let mut output = Table::new(); + flatten_table(&mut output, content, fully_flatten, 0); + + output +} + +#[node_macro::node(category("Vector"))] +async fn flatten_vector(_: impl Ctx, content: Table) -> Table { + // TODO: Avoid mutable reference, instead return a new Table? + fn flatten_table(output_vector_table: &mut Table, current_graphic_table: Table) { + for current_graphic_row in current_graphic_table.iter() { + let current_graphic = current_graphic_row.element.clone(); + let source_node_id = *current_graphic_row.source_node_id; + + match current_graphic { + // If we're allowed to recurse, flatten any tables we encounter + Graphic::Graphic(mut current_graphic_table) => { + // Apply the parent graphic's transform to all child elements + for graphic in current_graphic_table.iter_mut() { + *graphic.transform = *current_graphic_row.transform * *graphic.transform; + } + + flatten_table(output_vector_table, current_graphic_table); + } + // Push any leaf Vector elements we encounter + Graphic::Vector(vector_table) => { + for current_vector_row in vector_table.iter() { + output_vector_table.push(TableRow { + element: current_vector_row.element.clone(), + mask: current_vector_row.mask.clone(), + transform: *current_graphic_row.transform * *current_vector_row.transform, + alpha_blending: AlphaBlending { + blend_mode: current_vector_row.alpha_blending.blend_mode, + opacity: current_graphic_row.alpha_blending.opacity * current_vector_row.alpha_blending.opacity, + fill: current_vector_row.alpha_blending.fill, + clip: current_vector_row.alpha_blending.clip, + }, + source_node_id, + }); + } + } + _ => {} + } + } + } + + let mut output = Table::new(); + flatten_table(&mut output, content); + + output +} + +/// Returns the value at the specified index in the collection. +/// If that index has no value, the type's default value is returned. +#[node_macro::node(category("General"))] +fn index( + _: impl Ctx, + /// The collection of data, such as a list or table. + #[implementations( + Vec, + Vec, + Vec, + Vec, + Table, + Table, + Table, + Table>, + Table>, + Table, + Table, + )] + collection: T, + /// The index of the item to retrieve, starting from 0 for the first item. + index: u32, +) -> T::Output +where + T::Output: Clone + Default, +{ + collection.at_index(index as usize).unwrap_or_default() +} + +pub trait AtIndex { + type Output; + fn at_index(&self, index: usize) -> Option; +} +impl AtIndex for Vec { + type Output = T; + + fn at_index(&self, index: usize) -> Option { + self.get(index).cloned() + } +} +impl AtIndex for Table { + type Output = Table; + + fn at_index(&self, index: usize) -> Option { + let mut result_table = Self::default(); + if let Some(row) = self.iter().nth(index) { + result_table.push(row.into_cloned()); + Some(result_table) + } else { + None + } + } +} + +// TODO: Eventually remove this migration document upgrade code +pub fn migrate_graphic<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + use serde::Deserialize; + + #[derive(Clone, Debug, PartialEq, DynAny, Default, serde::Serialize, serde::Deserialize)] + pub struct OldGraphicGroup { + elements: Vec<(Graphic, Option)>, + transform: DAffine2, + alpha_blending: AlphaBlending, + } + #[derive(Clone, Debug, PartialEq, DynAny, Default, serde::Serialize, serde::Deserialize)] + pub struct GraphicGroup { + elements: Vec<(Graphic, Option)>, + } + + #[derive(serde::Serialize, serde::Deserialize)] + #[serde(untagged)] + enum EitherFormat { + OldGraphicGroup(OldGraphicGroup), + Table(serde_json::Value), + } + + Ok(match EitherFormat::deserialize(deserializer)? { + EitherFormat::OldGraphicGroup(old) => { + let mut graphic_table = Table::new(); + for (graphic, source_node_id) in old.elements { + graphic_table.push(TableRow { + element: graphic, + mask: None, + transform: old.transform, + alpha_blending: old.alpha_blending, + source_node_id, + }); + } + graphic_table + } + EitherFormat::Table(value) => { + // Try to deserialize as either table format + if let Ok(old_table) = serde_json::from_value::>(value.clone()) { + let mut graphic_table = Table::new(); + for row in old_table.iter() { + for (graphic, source_node_id) in &row.element.elements { + graphic_table.push(TableRow { + element: graphic.clone(), + mask: None, + transform: *row.transform, + alpha_blending: *row.alpha_blending, + source_node_id: *source_node_id, + }); + } + } + graphic_table + } else if let Ok(new_table) = serde_json::from_value::>(value) { + new_table + } else { + return Err(serde::de::Error::custom("Failed to deserialize Table")); + } + } + }) +} diff --git a/node-graph/gcore/src/instances.rs b/node-graph/gcore/src/instances.rs deleted file mode 100644 index 69b59280d2..0000000000 --- a/node-graph/gcore/src/instances.rs +++ /dev/null @@ -1,309 +0,0 @@ -use crate::transform::ApplyTransform; -use crate::uuid::NodeId; -use crate::{AlphaBlending, GraphicElement}; -use dyn_any::StaticType; -use glam::DAffine2; -use std::hash::Hash; - -pub type Mask = Option; - -#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct Instances { - #[serde(alias = "instances")] - instance: Vec, - #[serde(default = "one_mask_default")] - mask: Vec, - #[serde(default = "one_daffine2_default")] - transform: Vec, - #[serde(default = "one_alpha_blending_default")] - alpha_blending: Vec, - #[serde(default = "one_source_node_id_default")] - source_node_id: Vec>, -} - -impl Instances { - pub fn new(instance: T) -> Self { - Self { - instance: vec![instance], - mask: vec![None], - transform: vec![DAffine2::IDENTITY], - alpha_blending: vec![AlphaBlending::default()], - source_node_id: vec![None], - } - } - - pub fn new_instance(instance: Instance) -> Self { - Self { - instance: vec![instance.instance], - mask: vec![instance.mask], - transform: vec![instance.transform], - alpha_blending: vec![instance.alpha_blending], - source_node_id: vec![instance.source_node_id], - } - } - - pub fn with_capacity(capacity: usize) -> Self { - Self { - instance: Vec::with_capacity(capacity), - mask: Vec::with_capacity(capacity), - transform: Vec::with_capacity(capacity), - alpha_blending: Vec::with_capacity(capacity), - source_node_id: Vec::with_capacity(capacity), - } - } - - pub fn push(&mut self, instance: Instance) { - self.instance.push(instance.instance); - self.mask.push(instance.mask); - self.transform.push(instance.transform); - self.alpha_blending.push(instance.alpha_blending); - self.source_node_id.push(instance.source_node_id); - } - - pub fn extend(&mut self, instances: Instances) { - self.instance.extend(instances.instance); - self.transform.extend(instances.transform); - self.alpha_blending.extend(instances.alpha_blending); - self.source_node_id.extend(instances.source_node_id); - } - - pub fn instance_iter(self) -> impl DoubleEndedIterator> { - self.instance - .into_iter() - .zip(self.mask) - .zip(self.transform) - .zip(self.alpha_blending) - .zip(self.source_node_id) - .map(|((((instance, mask), transform), alpha_blending), source_node_id)| Instance { - instance, - mask, - transform, - alpha_blending, - source_node_id, - }) - } - - pub fn instance_ref_iter(&self) -> impl DoubleEndedIterator> + Clone { - self.instance - .iter() - .zip(self.mask.iter()) - .zip(self.transform.iter()) - .zip(self.alpha_blending.iter()) - .zip(self.source_node_id.iter()) - .map(|((((instance, mask), transform), alpha_blending), source_node_id)| InstanceRef { - instance, - mask, - transform, - alpha_blending, - source_node_id, - }) - } - - pub fn instance_mut_iter(&mut self) -> impl DoubleEndedIterator> { - self.instance - .iter_mut() - .zip(self.mask.iter_mut()) - .zip(self.transform.iter_mut()) - .zip(self.alpha_blending.iter_mut()) - .zip(self.source_node_id.iter_mut()) - .map(|((((instance, mask), transform), alpha_blending), source_node_id)| InstanceMut { - instance, - mask, - transform, - alpha_blending, - source_node_id, - }) - } - - pub fn get(&self, index: usize) -> Option> { - if index >= self.instance.len() { - return None; - } - - Some(InstanceRef { - instance: &self.instance[index], - mask: &self.mask[index], - transform: &self.transform[index], - alpha_blending: &self.alpha_blending[index], - source_node_id: &self.source_node_id[index], - }) - } - - pub fn get_mut(&mut self, index: usize) -> Option> { - if index >= self.instance.len() { - return None; - } - - Some(InstanceMut { - instance: &mut self.instance[index], - mask: &mut self.mask[index], - transform: &mut self.transform[index], - alpha_blending: &mut self.alpha_blending[index], - source_node_id: &mut self.source_node_id[index], - }) - } - - pub fn len(&self) -> usize { - self.instance.len() - } - - pub fn is_empty(&self) -> bool { - self.instance.is_empty() - } -} - -impl Default for Instances { - fn default() -> Self { - Self { - instance: Vec::new(), - mask: Vec::new(), - transform: Vec::new(), - alpha_blending: Vec::new(), - source_node_id: Vec::new(), - } - } -} - -impl Hash for Instances { - fn hash(&self, state: &mut H) { - for instance in &self.instance { - instance.hash(state); - } - } -} - -impl ApplyTransform for Instances { - fn apply_transform(&mut self, modification: &DAffine2) { - for transform in &mut self.transform { - *transform *= *modification; - } - } - - fn left_apply_transform(&mut self, modification: &DAffine2) { - for transform in &mut self.transform { - *transform = *modification * *transform; - } - } -} - -impl PartialEq for Instances { - fn eq(&self, other: &Self) -> bool { - self.instance.len() == other.instance.len() && { self.instance.iter().zip(other.instance.iter()).all(|(a, b)| a == b) } - } -} - -unsafe impl StaticType for Instances { - type Static = Instances; -} - -fn one_mask_default() -> Vec { - vec![None] -} -impl FromIterator> for Instances { - fn from_iter>>(iter: I) -> Self { - let iter = iter.into_iter(); - let (lower, _) = iter.size_hint(); - let mut instances = Self::with_capacity(lower); - for instance in iter { - instances.push(instance); - } - instances - } -} - -fn one_daffine2_default() -> Vec { - vec![DAffine2::IDENTITY] -} -fn one_alpha_blending_default() -> Vec { - vec![AlphaBlending::default()] -} -fn one_source_node_id_default() -> Vec> { - vec![None] -} - -#[derive(Copy, Clone, Debug, PartialEq)] -pub struct InstanceRef<'a, T> { - pub instance: &'a T, - pub mask: &'a Mask, - pub transform: &'a DAffine2, - pub alpha_blending: &'a AlphaBlending, - pub source_node_id: &'a Option, -} - -impl InstanceRef<'_, T> { - pub fn to_instance_cloned(self) -> Instance - where - T: Clone, - { - Instance { - instance: self.instance.clone(), - mask: self.mask.clone(), - transform: *self.transform, - alpha_blending: *self.alpha_blending, - source_node_id: *self.source_node_id, - } - } -} - -#[derive(Debug)] -pub struct InstanceMut<'a, T> { - pub instance: &'a mut T, - pub mask: &'a mut Mask, - pub transform: &'a mut DAffine2, - pub alpha_blending: &'a mut AlphaBlending, - pub source_node_id: &'a mut Option, -} - -#[derive(Clone, Default, Debug, PartialEq, serde::Serialize, serde::Deserialize)] -pub struct Instance { - pub instance: T, - pub mask: Mask, - pub transform: DAffine2, - pub alpha_blending: AlphaBlending, - pub source_node_id: Option, -} - -impl Instance { - pub fn to_graphic_element(self) -> Instance - where - T: Into, - { - Instance { - instance: self.instance.into(), - mask: self.mask, - transform: self.transform, - alpha_blending: self.alpha_blending, - source_node_id: self.source_node_id, - } - } - - pub fn to_instance_ref(&self) -> InstanceRef<'_, T> { - InstanceRef { - instance: &self.instance, - mask: &self.mask, - transform: &self.transform, - alpha_blending: &self.alpha_blending, - source_node_id: &self.source_node_id, - } - } - - pub fn to_instance_mut(&mut self) -> InstanceMut<'_, T> { - InstanceMut { - instance: &mut self.instance, - mask: &mut self.mask, - transform: &mut self.transform, - alpha_blending: &mut self.alpha_blending, - source_node_id: &mut self.source_node_id, - } - } - - pub fn to_table(self) -> Instances { - Instances { - instance: vec![self.instance], - mask: vec![self.mask], - transform: vec![self.transform], - alpha_blending: vec![self.alpha_blending], - source_node_id: vec![self.source_node_id], - } - } -} diff --git a/node-graph/gcore/src/lib.rs b/node-graph/gcore/src/lib.rs index 4f1f0aaf0b..3b098147ff 100644 --- a/node-graph/gcore/src/lib.rs +++ b/node-graph/gcore/src/lib.rs @@ -2,18 +2,16 @@ extern crate log; pub mod animation; -pub mod blending; +pub mod artboard; pub mod blending_nodes; pub mod bounds; -pub mod color; pub mod consts; pub mod context; pub mod debug; pub mod extract_xy; pub mod generic; pub mod gradient; -pub mod graphic_element; -pub mod instances; +pub mod graphic; pub mod logic; pub mod math; pub mod memo; @@ -23,7 +21,8 @@ pub mod raster; pub mod raster_types; pub mod registry; pub mod render_complexity; -pub mod structural; +pub mod subpath; +pub mod table; pub mod text; pub mod transform; pub mod transform_nodes; @@ -32,14 +31,19 @@ pub mod value; pub mod vector; pub use crate as graphene_core; +pub use artboard::Artboard; pub use blending::*; +pub use color::Color; pub use context::*; pub use ctor; pub use dyn_any::{StaticTypeSized, WasmNotSend, WasmNotSync}; -pub use graphic_element::{Artboard, ArtboardGroupTable, GraphicElement, GraphicGroupTable}; +pub use graphene_core_shaders::AsU32; +pub use graphene_core_shaders::blending; +pub use graphene_core_shaders::choice_type; +pub use graphene_core_shaders::color; +pub use graphic::Graphic; pub use memo::MemoHash; pub use num_traits; -pub use raster::Color; use std::any::TypeId; use std::future::Future; use std::pin::Pin; @@ -165,12 +169,3 @@ pub trait NodeInputDecleration { fn identifier() -> ProtoNodeIdentifier; type Result; } - -pub trait AsU32 { - fn as_u32(&self) -> u32; -} -impl AsU32 for u32 { - fn as_u32(&self) -> u32 { - *self - } -} diff --git a/node-graph/gcore/src/logic.rs b/node-graph/gcore/src/logic.rs index 1c48970b7a..ee9d9c84e3 100644 --- a/node-graph/gcore/src/logic.rs +++ b/node-graph/gcore/src/logic.rs @@ -1,23 +1,23 @@ -use crate::ArtboardGroupTable; +use crate::Artboard; use crate::Color; -use crate::GraphicElement; -use crate::GraphicGroupTable; +use crate::Graphic; use crate::gradient::GradientStops; use crate::graphene_core::registry::types::TextArea; -use crate::raster_types::{CPU, GPU, RasterDataTable}; -use crate::vector::VectorDataTable; +use crate::raster_types::{CPU, GPU, Raster}; +use crate::table::Table; +use crate::vector::Vector; use crate::{Context, Ctx}; use glam::{DAffine2, DVec2}; -#[node_macro::node(category("Text"))] -fn to_string(_: impl Ctx, #[implementations(String, bool, f64, u32, u64, DVec2, DAffine2, VectorDataTable)] value: T) -> String { - format!("{:?}", value) +#[node_macro::node(category("Type Conversion"))] +fn to_string(_: impl Ctx, #[implementations(bool, f64, u32, u64, DVec2, DAffine2, String)] value: T) -> String { + format!("{value:?}") } #[node_macro::node(category("Text"))] fn serialize( _: impl Ctx, - #[implementations(String, bool, f64, u32, u64, DVec2, DAffine2, Color, Option, GraphicGroupTable, VectorDataTable, RasterDataTable)] value: T, + #[implementations(String, bool, f64, u32, u64, DVec2, DAffine2, Table, Table, Table, Table>, Table, Table)] value: T, ) -> String { serde_json::to_string(&value).unwrap_or_else(|_| "Serialization Error".to_string()) } @@ -59,14 +59,12 @@ async fn switch( Context -> u64, Context -> DVec2, Context -> DAffine2, - Context -> ArtboardGroupTable, - Context -> VectorDataTable, - Context -> GraphicGroupTable, - Context -> RasterDataTable, - Context -> RasterDataTable, - Context -> GraphicElement, - Context -> Color, - Context -> Option, + Context -> Table, + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table>, + Context -> Table, Context -> GradientStops, )] if_true: impl Node, @@ -80,14 +78,12 @@ async fn switch( Context -> u64, Context -> DVec2, Context -> DAffine2, - Context -> ArtboardGroupTable, - Context -> VectorDataTable, - Context -> GraphicGroupTable, - Context -> RasterDataTable, - Context -> RasterDataTable, - Context -> GraphicElement, - Context -> Color, - Context -> Option, + Context -> Table, + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table>, + Context -> Table, Context -> GradientStops, )] if_false: impl Node, diff --git a/node-graph/gcore/src/math/math_ext.rs b/node-graph/gcore/src/math/math_ext.rs index bab9c19bf9..03c9b96dfb 100644 --- a/node-graph/gcore/src/math/math_ext.rs +++ b/node-graph/gcore/src/math/math_ext.rs @@ -1,16 +1,23 @@ use crate::math::quad::Quad; use crate::math::rect::Rect; -use bezier_rs::Bezier; +use crate::subpath::Bezier; +use crate::vector::misc::dvec2_to_point; +use kurbo::{Line, PathSeg}; pub trait QuadExt { /// Get all the edges in the rect as linear bezier curves fn bezier_lines(&self) -> impl Iterator + '_; + fn to_lines(&self) -> impl Iterator; } impl QuadExt for Quad { fn bezier_lines(&self) -> impl Iterator + '_ { self.all_edges().into_iter().map(|[start, end]| Bezier::from_linear_dvec2(start, end)) } + + fn to_lines(&self) -> impl Iterator { + self.all_edges().into_iter().map(|[start, end]| PathSeg::Line(Line::new(dvec2_to_point(start), dvec2_to_point(end)))) + } } pub trait RectExt { diff --git a/node-graph/gcore/src/math/mod.rs b/node-graph/gcore/src/math/mod.rs index 06a1c21bc4..34e2d22684 100644 --- a/node-graph/gcore/src/math/mod.rs +++ b/node-graph/gcore/src/math/mod.rs @@ -1,4 +1,5 @@ pub mod bbox; pub mod math_ext; +pub mod polynomial; pub mod quad; pub mod rect; diff --git a/libraries/bezier-rs/src/polynomial.rs b/node-graph/gcore/src/math/polynomial.rs similarity index 84% rename from libraries/bezier-rs/src/polynomial.rs rename to node-graph/gcore/src/math/polynomial.rs index 1deee9ce97..8af2f0907e 100644 --- a/libraries/bezier-rs/src/polynomial.rs +++ b/node-graph/gcore/src/math/polynomial.rs @@ -1,3 +1,4 @@ +use kurbo::PathSeg; use std::fmt::{self, Display, Formatter}; use std::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}; @@ -197,6 +198,33 @@ impl Mul for &Polynomial { } } +/// Returns two [`Polynomial`]s representing the parametric equations for x and y coordinates of the bezier curve respectively. +/// The domain of both the equations are from t=0.0 representing the start and t=1.0 representing the end of the bezier curve. +pub fn pathseg_to_parametric_polynomial(segment: PathSeg) -> (Polynomial<4>, Polynomial<4>) { + match segment { + PathSeg::Line(line) => { + let term1 = line.p0 - line.p1; + (Polynomial::new([line.p0.x, term1.x, 0., 0.]), Polynomial::new([line.p0.y, term1.y, 0., 0.])) + } + PathSeg::Quad(quad_bez) => { + let term1 = 2. * (quad_bez.p1 - quad_bez.p0); + let term2 = quad_bez.p0 - 2. * quad_bez.p1.to_vec2() + quad_bez.p2.to_vec2(); + + (Polynomial::new([quad_bez.p0.x, term1.x, term2.x, 0.]), Polynomial::new([quad_bez.p0.y, term1.y, term2.y, 0.])) + } + PathSeg::Cubic(cubic_bez) => { + let term1 = 3. * (cubic_bez.p1 - cubic_bez.p0); + let term2 = 3. * (cubic_bez.p2 - cubic_bez.p1) - term1; + let term3 = cubic_bez.p3 - cubic_bez.p0 - term2 - term1; + + ( + Polynomial::new([cubic_bez.p0.x, term1.x, term2.x, term3.x]), + Polynomial::new([cubic_bez.p0.y, term1.y, term2.y, term3.y]), + ) + } + } +} + #[cfg(test)] mod test { use super::*; @@ -259,6 +287,6 @@ mod test { fn display() { let p = Polynomial::new([1., 2., 0., 3.]); - assert_eq!(format!("{:.2}", p), "3.00x^3 + 2.00x + 1.00"); + assert_eq!(format!("{p:.2}"), "3.00x^3 + 2.00x + 1.00"); } } diff --git a/node-graph/gcore/src/memo.rs b/node-graph/gcore/src/memo.rs index 1a124d2068..43ac10d77f 100644 --- a/node-graph/gcore/src/memo.rs +++ b/node-graph/gcore/src/memo.rs @@ -8,6 +8,21 @@ use std::sync::Arc; use std::sync::Mutex; /// Caches the output of a given Node and acts as a proxy +/// +/// ```text +/// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +/// โ”‚ โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚โ—„โ”€โ”€โ”€ EVAL (START) +/// โ”‚ CacheNode โ”‚ โ”‚ F โ”‚ +/// โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚โ”€โ”€โ”€โ–บ RESULT (END) +/// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +/// โ”‚ โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚ +/// โ”‚ G โ”‚ โ”‚ Cached Data โ”‚ +/// โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚ +/// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +/// ``` +/// +/// The call from `F` directly reaches the `CacheNode` and the `CacheNode` can decide whether to call `G.eval(input_from_f)` +/// in the event of a cache miss or just return the cached data in the event of a cache hit. #[derive(Default)] pub struct MemoNode { cache: Arc>>, @@ -50,6 +65,7 @@ impl MemoNode { } } +#[allow(clippy::module_inception)] pub mod memo { pub const IDENTIFIER: crate::ProtoNodeIdentifier = crate::ProtoNodeIdentifier::new("graphene_core::memo::MemoNode"); } @@ -155,10 +171,10 @@ pub mod monitor { pub const IDENTIFIER: crate::ProtoNodeIdentifier = crate::ProtoNodeIdentifier::new("graphene_core::memo::MonitorNode"); } -#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] pub struct MemoHash { hash: u64, - value: T, + value: Arc, } impl<'de, T: serde::Deserialize<'de> + Hash> serde::Deserialize<'de> for MemoHash { @@ -182,10 +198,10 @@ impl serde::Serialize for MemoHash { impl MemoHash { pub fn new(value: T) -> Self { let hash = Self::calc_hash(&value); - Self { hash, value } + Self { hash, value: value.into() } } pub fn new_with_hash(value: T, hash: u64) -> Self { - Self { hash, value } + Self { hash, value: value.into() } } fn calc_hash(data: &T) -> u64 { @@ -197,7 +213,7 @@ impl MemoHash { pub fn inner_mut(&mut self) -> MemoHashGuard<'_, T> { MemoHashGuard { inner: self } } - pub fn into_inner(self) -> T { + pub fn into_inner(self) -> Arc { self.value } pub fn hash_code(&self) -> u64 { @@ -243,8 +259,8 @@ impl Deref for MemoHashGuard<'_, T> { } } -impl std::ops::DerefMut for MemoHashGuard<'_, T> { +impl std::ops::DerefMut for MemoHashGuard<'_, T> { fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.inner.value + Arc::make_mut(&mut self.inner.value) } } diff --git a/node-graph/gcore/src/misc.rs b/node-graph/gcore/src/misc.rs index 9d70728ab1..f0c452cdea 100644 --- a/node-graph/gcore/src/misc.rs +++ b/node-graph/gcore/src/misc.rs @@ -60,3 +60,30 @@ impl Clampable for DVec2 { self.min(DVec2::splat(max)) } } + +// TODO: Eventually remove this migration document upgrade code +pub fn migrate_color<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + use crate::table::Table; + use graphene_core_shaders::color::Color; + use serde::Deserialize; + + #[derive(serde::Serialize, serde::Deserialize)] + #[serde(untagged)] + enum EitherFormat { + Color(Color), + OptionalColor(Option), + ColorTable(Table), + } + + Ok(match EitherFormat::deserialize(deserializer)? { + EitherFormat::Color(color) => Table::new_from_element(color), + EitherFormat::OptionalColor(color) => { + if let Some(color) = color { + Table::new_from_element(color) + } else { + Table::new() + } + } + EitherFormat::ColorTable(color_table) => color_table, + }) +} diff --git a/node-graph/gcore/src/ops.rs b/node-graph/gcore/src/ops.rs index 0ef40a86a4..c80a1adb48 100644 --- a/node-graph/gcore/src/ops.rs +++ b/node-graph/gcore/src/ops.rs @@ -1,3 +1,5 @@ +use graphene_core_shaders::Ctx; + use crate::Node; use std::marker::PhantomData; @@ -41,28 +43,9 @@ impl<'i, N: for<'a> Node<'a, I> + Clone, I: 'i> Clone for TypeNode Node<'a, I> + Copy, I: 'i> Copy for TypeNode>::Output> {} -// Into -pub struct IntoNode(PhantomData); -impl IntoNode { - pub const fn new() -> Self { - Self(PhantomData) - } -} -impl Default for IntoNode { - fn default() -> Self { - Self::new() - } -} -impl<'input, I: 'input, O: 'input> Node<'input, I> for IntoNode -where - I: Into + Sync + Send, -{ - type Output = dyn_any::DynFuture<'input, O>; - - #[inline] - fn eval(&'input self, input: I) -> Self::Output { - Box::pin(async move { input.into() }) - } +#[node_macro::node(skip_impl)] +fn into<'i, T: 'i + Send + Into, O: 'i + Send>(_: impl Ctx, value: T, _out_ty: PhantomData) -> O { + value.into() } /// The [`Convert`] trait allows for conversion between Rust primitive numeric types. @@ -122,25 +105,9 @@ impl_convert!(u128); impl_convert!(isize); impl_convert!(usize); -// Convert -pub struct ConvertNode(PhantomData); -impl<_O> ConvertNode<_O> { - pub const fn new() -> Self { - Self(core::marker::PhantomData) - } -} -impl<_O> Default for ConvertNode<_O> { - fn default() -> Self { - Self::new() - } -} -impl<'input, I: 'input + Convert<_O> + Sync + Send, _O: 'input> Node<'input, I> for ConvertNode<_O> { - type Output = ::dyn_any::DynFuture<'input, _O>; - - #[inline] - fn eval(&'input self, input: I) -> Self::Output { - Box::pin(async move { input.convert() }) - } +#[node_macro::node(skip_impl)] +fn convert<'i, T: 'i + Send + Convert, O: 'i + Send>(_: impl Ctx, value: T, _out_ty: PhantomData) -> O { + value.convert() } #[cfg(test)] diff --git a/node-graph/gcore/src/raster.rs b/node-graph/gcore/src/raster.rs index 60106bdc70..44a3da4035 100644 --- a/node-graph/gcore/src/raster.rs +++ b/node-graph/gcore/src/raster.rs @@ -1,12 +1,3 @@ -use crate::GraphicGroupTable; -pub use crate::color::*; -use crate::raster_types::{CPU, RasterDataTable}; -use crate::vector::VectorDataTable; -use std::fmt::Debug; - -#[cfg(target_arch = "spirv")] -use spirv_std::num_traits::float::Float; - /// as to not yet rename all references pub mod color { pub use super::*; @@ -15,6 +6,9 @@ pub mod color { pub mod image; pub use self::image::Image; +pub use crate::color::*; +use crate::raster_types::CPU; +use std::fmt::Debug; pub trait Bitmap { type Pixel: Pixel; diff --git a/node-graph/gcore/src/raster/image.rs b/node-graph/gcore/src/raster/image.rs index 6e0232825b..d6c7e10200 100644 --- a/node-graph/gcore/src/raster/image.rs +++ b/node-graph/gcore/src/raster/image.rs @@ -1,8 +1,9 @@ use super::Color; use crate::AlphaBlending; use crate::color::float_to_srgb_u8; -use crate::instances::{Instance, Instances}; use crate::raster_types::Raster; +use crate::table::{Table, TableRow}; +use crate::vector::Vector; use core::hash::{Hash, Hasher}; use dyn_any::{DynAny, StaticType}; use glam::{DAffine2, DVec2}; @@ -50,6 +51,13 @@ pub struct Image { // TODO: Currently it is always anchored at the top left corner at (0, 0). The bottom right corner of the new origin field would correspond to (1, 1). } +#[derive(Debug, Clone, dyn_any::DynAny, Default, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)] +pub struct TransformImage(pub DAffine2); + +impl Hash for TransformImage { + fn hash(&self, _: &mut H) {} +} + impl Debug for Image

{ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let length = self.data.len(); @@ -205,25 +213,23 @@ impl IntoIterator for Image

{ } // TODO: Eventually remove this migration document upgrade code -pub fn migrate_image_frame<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { +pub fn migrate_image_frame<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result>, D::Error> { use serde::Deserialize; - type ImageFrameTable

= Instances>; - #[derive(Clone, Debug, Hash, PartialEq, DynAny)] enum RasterFrame { /// A CPU-based bitmap image with a finite position and extent, equivalent to the SVG tag: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image - ImageFrame(ImageFrameTable), + ImageFrame(Table>), } impl<'de> serde::Deserialize<'de> for RasterFrame { fn deserialize>(deserializer: D) -> Result { - Ok(RasterFrame::ImageFrame(ImageFrameTable::new(Image::deserialize(deserializer)?))) + Ok(RasterFrame::ImageFrame(Table::new_from_element(Image::deserialize(deserializer)?))) } } impl serde::Serialize for RasterFrame { fn serialize(&self, serializer: S) -> Result { match self { - RasterFrame::ImageFrame(image_instances) => image_instances.serialize(serializer), + RasterFrame::ImageFrame(table) => table.serialize(serializer), } } } @@ -231,9 +237,9 @@ pub fn migrate_image_frame<'de, D: serde::Deserializer<'de>>(deserializer: D) -> #[derive(Clone, Debug, Hash, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] pub enum GraphicElement { /// Equivalent to the SVG tag: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g - GraphicGroup(GraphicGroupTable), + GraphicGroup(Table), /// A vector shape, equivalent to the SVG tag: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path - VectorData(VectorDataTable), + VectorData(Table), RasterFrame(RasterFrame), } @@ -243,16 +249,16 @@ pub fn migrate_image_frame<'de, D: serde::Deserializer<'de>>(deserializer: D) -> } impl From> for GraphicElement { fn from(image_frame: ImageFrame) -> Self { - GraphicElement::RasterFrame(RasterFrame::ImageFrame(ImageFrameTable::new(image_frame.image))) + GraphicElement::RasterFrame(RasterFrame::ImageFrame(Table::new_from_element(image_frame.image))) } } impl From for ImageFrame { fn from(element: GraphicElement) -> Self { match element { GraphicElement::RasterFrame(RasterFrame::ImageFrame(image)) => Self { - image: image.instance_ref_iter().next().unwrap().instance.clone(), + image: image.iter().next().unwrap().element.clone(), }, - _ => panic!("Expected Image, found {:?}", element), + _ => panic!("Expected Image, found {element:?}"), } } } @@ -277,54 +283,51 @@ pub fn migrate_image_frame<'de, D: serde::Deserializer<'de>>(deserializer: D) -> enum FormatVersions { Image(Image), OldImageFrame(OldImageFrame), - ImageFrame(Instances>), - ImageFrameTable(ImageFrameTable), - RasterDataTable(RasterDataTable), + ImageFrameTable(Table>), + ImageTable(Table>), + RasterTable(Table>), } Ok(match FormatVersions::deserialize(deserializer)? { - FormatVersions::Image(image) => RasterDataTable::new(Raster::new_cpu(image)), - FormatVersions::OldImageFrame(image_frame_with_transform_and_blending) => { - let OldImageFrame { image, transform, alpha_blending } = image_frame_with_transform_and_blending; - let mut image_frame_table = RasterDataTable::new(Raster::new_cpu(image)); - *image_frame_table.instance_mut_iter().next().unwrap().transform = transform; - *image_frame_table.instance_mut_iter().next().unwrap().alpha_blending = alpha_blending; + FormatVersions::Image(image) => Table::new_from_element(Raster::new_cpu(image)), + FormatVersions::OldImageFrame(OldImageFrame { image, transform, alpha_blending }) => { + let mut image_frame_table = Table::new_from_element(Raster::new_cpu(image)); + *image_frame_table.iter_mut().next().unwrap().transform = transform; + *image_frame_table.iter_mut().next().unwrap().alpha_blending = alpha_blending; image_frame_table } - FormatVersions::ImageFrame(image_frame) => RasterDataTable::new(Raster::new_cpu( + FormatVersions::ImageFrameTable(image_frame) => Table::new_from_element(Raster::new_cpu( image_frame - .instance_ref_iter() + .iter() .next() - .unwrap_or(Instances::new(ImageFrame::default()).instance_ref_iter().next().unwrap()) - .instance + .unwrap_or(Table::new_from_element(ImageFrame::default()).iter().next().unwrap()) + .element .image .clone(), )), - FormatVersions::ImageFrameTable(image_frame_table) => RasterDataTable::new(Raster::new_cpu(image_frame_table.instance_ref_iter().next().unwrap().instance.clone())), - FormatVersions::RasterDataTable(raster_data_table) => raster_data_table, + FormatVersions::ImageTable(table) => Table::new_from_element(Raster::new_cpu(table.iter().next().unwrap().element.clone())), + FormatVersions::RasterTable(table) => table, }) } // TODO: Eventually remove this migration document upgrade code -pub fn migrate_image_frame_instance<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result>, D::Error> { +pub fn migrate_image_frame_row<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result>, D::Error> { use serde::Deserialize; - type ImageFrameTable

= Instances>; - #[derive(Clone, Debug, Hash, PartialEq, DynAny)] enum RasterFrame { /// A CPU-based bitmap image with a finite position and extent, equivalent to the SVG tag: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image - ImageFrame(ImageFrameTable), + ImageFrame(Table>), } impl<'de> serde::Deserialize<'de> for RasterFrame { fn deserialize>(deserializer: D) -> Result { - Ok(RasterFrame::ImageFrame(ImageFrameTable::new(Image::deserialize(deserializer)?))) + Ok(RasterFrame::ImageFrame(Table::new_from_element(Image::deserialize(deserializer)?))) } } impl serde::Serialize for RasterFrame { fn serialize(&self, serializer: S) -> Result { match self { - RasterFrame::ImageFrame(image_instances) => image_instances.serialize(serializer), + RasterFrame::ImageFrame(table) => table.serialize(serializer), } } } @@ -332,9 +335,9 @@ pub fn migrate_image_frame_instance<'de, D: serde::Deserializer<'de>>(deserializ #[derive(Clone, Debug, Hash, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] pub enum GraphicElement { /// Equivalent to the SVG tag: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g - GraphicGroup(GraphicGroupTable), + GraphicGroup(Table), /// A vector shape, equivalent to the SVG tag: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path - VectorData(VectorDataTable), + VectorData(Table), RasterFrame(RasterFrame), } @@ -344,16 +347,16 @@ pub fn migrate_image_frame_instance<'de, D: serde::Deserializer<'de>>(deserializ } impl From> for GraphicElement { fn from(image_frame: ImageFrame) -> Self { - GraphicElement::RasterFrame(RasterFrame::ImageFrame(ImageFrameTable::new(image_frame.image))) + GraphicElement::RasterFrame(RasterFrame::ImageFrame(Table::new_from_element(image_frame.image))) } } impl From for ImageFrame { fn from(element: GraphicElement) -> Self { match element { GraphicElement::RasterFrame(RasterFrame::ImageFrame(image)) => Self { - image: image.instance_ref_iter().next().unwrap().instance.clone(), + image: image.iter().next().unwrap().element.clone(), }, - _ => panic!("Expected Image, found {:?}", element), + _ => panic!("Expected Image, found {element:?}"), } } } @@ -378,34 +381,32 @@ pub fn migrate_image_frame_instance<'de, D: serde::Deserializer<'de>>(deserializ enum FormatVersions { Image(Image), OldImageFrame(OldImageFrame), - ImageFrame(Instances>), - RasterDataTable(RasterDataTable), - ImageInstance(Instance>), + ImageFrameTable(Table>), + RasterTable(Table>), + RasterTableRow(TableRow>), } Ok(match FormatVersions::deserialize(deserializer)? { - FormatVersions::Image(image) => Instance { - instance: Raster::new_cpu(image), + FormatVersions::Image(image) => TableRow { + element: Raster::new_cpu(image), ..Default::default() }, - FormatVersions::OldImageFrame(image_frame_with_transform_and_blending) => Instance { - instance: Raster::new_cpu(image_frame_with_transform_and_blending.image), + FormatVersions::OldImageFrame(image_frame_with_transform_and_blending) => TableRow { + element: Raster::new_cpu(image_frame_with_transform_and_blending.image), mask: None, transform: image_frame_with_transform_and_blending.transform, alpha_blending: image_frame_with_transform_and_blending.alpha_blending, source_node_id: None, }, - FormatVersions::ImageFrame(image_frame) => Instance { - instance: Raster::new_cpu(image_frame.instance_ref_iter().next().unwrap().instance.image.clone()), + FormatVersions::ImageFrameTable(image_frame) => TableRow { + element: Raster::new_cpu(image_frame.iter().next().unwrap().element.image.clone()), ..Default::default() }, - FormatVersions::RasterDataTable(image_frame_table) => image_frame_table.instance_iter().next().unwrap_or_default(), - FormatVersions::ImageInstance(image_instance) => image_instance, + FormatVersions::RasterTable(image_frame_table) => image_frame_table.into_iter().next().unwrap_or_default(), + FormatVersions::RasterTableRow(image_table_row) => image_table_row, }) } -// pub type RasterDataTable

= Instances>; - impl Sample for Image

{ type Pixel = P; @@ -452,24 +453,6 @@ impl From> for Image { } } -// impl From> for RasterDataTable { -// fn from(image_frame_table: RasterDataTable) -> Self { -// let mut result_table = RasterDataTable::::default(); - -// for image_frame_instance in image_frame_table.instance_iter() { -// result_table.push(Instance { -// instance: image_frame_instance.instance, -// mask: image_frame_instance.mask, -// transform: image_frame_instance.transform, -// alpha_blending: image_frame_instance.alpha_blending, -// source_node_id: image_frame_instance.source_node_id, -// }); -// } - -// result_table -// } -// } - impl From> for Image { fn from(image: Image) -> Self { let data = image.data.into_iter().map(|x| x.into()).collect(); @@ -496,9 +479,9 @@ mod test { }; let serialized = serde_json::to_string(&image).unwrap(); - println!("{}", serialized); + println!("{serialized}"); let deserialized: Image = serde_json::from_str(&serialized).unwrap(); - println!("{:?}", deserialized); + println!("{deserialized:?}"); assert_eq!(image, deserialized); } diff --git a/node-graph/gcore/src/raster_types.rs b/node-graph/gcore/src/raster_types.rs index 937d89b2e0..97dd138145 100644 --- a/node-graph/gcore/src/raster_types.rs +++ b/node-graph/gcore/src/raster_types.rs @@ -1,148 +1,213 @@ use crate::Color; -use crate::bounds::BoundingBox; -use crate::instances::Instances; +use crate::bounds::{BoundingBox, RenderBoundingBox}; use crate::math::quad::Quad; use crate::raster::Image; use core::ops::Deref; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; -#[cfg(feature = "wgpu")] -use std::sync::Arc; +use std::fmt::Debug; +use std::ops::DerefMut; -#[derive(Clone, Debug, Hash, PartialEq, Eq, Copy)] -pub struct CPU; -#[derive(Clone, Debug, Hash, PartialEq, Eq, Copy)] -pub struct GPU; +mod __private { + pub trait Sealed {} +} -trait Storage: 'static {} -impl Storage for CPU {} -impl Storage for GPU {} +pub trait Storage: __private::Sealed + Clone + Debug + 'static { + fn is_empty(&self) -> bool; +} -#[derive(Clone, Debug, Hash, PartialEq)] -#[allow(private_bounds)] -pub struct Raster { - data: RasterStorage, +#[derive(Clone, Debug, PartialEq, Hash, Default)] +pub struct Raster +where + Raster: Storage, +{ storage: T, } -unsafe impl dyn_any::StaticType for Raster { +unsafe impl dyn_any::StaticType for Raster +where + Raster: Storage, +{ type Static = Raster; } -#[derive(Clone, Debug, Hash, PartialEq, DynAny)] -pub enum RasterStorage { - Cpu(Image), - #[cfg(feature = "wgpu")] - Gpu(Arc), - #[cfg(not(feature = "wgpu"))] - Gpu(()), + +impl Raster +where + Raster: Storage, +{ + pub fn new(t: T) -> Self { + Self { storage: t } + } } -impl RasterStorage {} -impl Raster { - pub fn new_cpu(image: Image) -> Self { - Self { - data: RasterStorage::Cpu(image), - storage: CPU, - } - } - pub fn data(&self) -> &Image { - let RasterStorage::Cpu(cpu) = &self.data else { unreachable!() }; - cpu - } - pub fn data_mut(&mut self) -> &mut Image { - let RasterStorage::Cpu(cpu) = &mut self.data else { unreachable!() }; - cpu - } - pub fn into_data(self) -> Image { - let RasterStorage::Cpu(cpu) = self.data else { unreachable!() }; - cpu - } - pub fn is_empty(&self) -> bool { - let data = self.data(); - data.height == 0 || data.width == 0 - } -} -impl Default for Raster { - fn default() -> Self { - Self { - data: RasterStorage::Cpu(Image::default()), - storage: CPU, - } - } -} -impl Deref for Raster { - type Target = Image; +impl Deref for Raster +where + Raster: Storage, +{ + type Target = T; fn deref(&self) -> &Self::Target { - self.data() + &self.storage } } -#[cfg(feature = "wgpu")] -impl Raster { - pub fn new_gpu(image: Arc) -> Self { - Self { - data: RasterStorage::Gpu(image), - storage: GPU, + +impl DerefMut for Raster +where + Raster: Storage, +{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.storage + } +} + +pub use cpu::CPU; + +mod cpu { + use super::*; + use crate::raster_types::__private::Sealed; + + #[derive(Clone, Debug, Default, PartialEq, Hash, DynAny)] + pub struct CPU(Image); + + impl Sealed for Raster {} + + impl Storage for Raster { + fn is_empty(&self) -> bool { + self.0.height == 0 || self.0.width == 0 } } - pub fn data(&self) -> &wgpu::Texture { - let RasterStorage::Gpu(gpu) = &self.data else { unreachable!() }; - gpu + + impl Raster { + pub fn new_cpu(image: Image) -> Self { + Self::new(CPU(image)) + } + + pub fn data(&self) -> &Image { + self + } + + pub fn data_mut(&mut self) -> &mut Image { + self + } + + pub fn into_data(self) -> Image { + self.storage.0 + } } - pub fn data_mut(&mut self) -> &mut Arc { - let RasterStorage::Gpu(gpu) = &mut self.data else { unreachable!() }; - gpu + + impl Deref for CPU { + type Target = Image; + + fn deref(&self) -> &Self::Target { + &self.0 + } } - pub fn data_owned(&self) -> Arc { - let RasterStorage::Gpu(gpu) = &self.data else { unreachable!() }; - gpu.clone() + + impl DerefMut for CPU { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + + impl<'de> serde::Deserialize<'de> for Raster { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + Ok(Raster::new_cpu(Image::deserialize(deserializer)?)) + } + } + + impl serde::Serialize for Raster { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.0.serialize(serializer) + } } } -impl Raster { - #[cfg(feature = "wgpu")] - pub fn is_empty(&self) -> bool { - let data = self.data(); - data.width() == 0 || data.height() == 0 - } - #[cfg(not(feature = "wgpu"))] - pub fn is_empty(&self) -> bool { - true - } -} +pub use gpu::GPU; #[cfg(feature = "wgpu")] -impl Deref for Raster { - type Target = wgpu::Texture; +mod gpu { + use super::*; + use crate::raster_types::__private::Sealed; - fn deref(&self) -> &Self::Target { - self.data() + #[derive(Clone, Debug, PartialEq, Hash)] + pub struct GPU { + texture: wgpu::Texture, + } + + impl Sealed for Raster {} + + impl Storage for Raster { + fn is_empty(&self) -> bool { + self.texture.width() == 0 || self.texture.height() == 0 + } + } + + impl Raster { + pub fn new_gpu(texture: wgpu::Texture) -> Self { + Self::new(GPU { texture }) + } + + pub fn data(&self) -> &wgpu::Texture { + &self.texture + } } } -pub type RasterDataTable = Instances>; +#[cfg(not(feature = "wgpu"))] +mod gpu { + use super::*; + use crate::raster_types::__private::Sealed; -// TODO: Make this not dupliated -impl BoundingBox for RasterDataTable { - fn bounding_box(&self, transform: DAffine2, _include_stroke: bool) -> Option<[DVec2; 2]> { - self.instance_ref_iter() - .filter(|instance| !instance.instance.is_empty()) // Eliminate empty images - .flat_map(|instance| { - let transform = transform * *instance.transform; - (transform.matrix2.determinant() != 0.).then(|| (transform * Quad::from_box([DVec2::ZERO, DVec2::ONE])).bounding_box()) - }) - .reduce(Quad::combine_bounds) + #[derive(Clone, Debug, PartialEq, Hash)] + pub struct GPU; + + impl Sealed for Raster {} + + impl Storage for Raster { + fn is_empty(&self) -> bool { + true + } } } -impl BoundingBox for RasterDataTable { - fn bounding_box(&self, transform: DAffine2, _include_stroke: bool) -> Option<[DVec2; 2]> { - self.instance_ref_iter() - .filter(|instance| !instance.instance.is_empty()) // Eliminate empty images - .flat_map(|instance| { - let transform = transform * *instance.transform; - (transform.matrix2.determinant() != 0.).then(|| (transform * Quad::from_box([DVec2::ZERO, DVec2::ONE])).bounding_box()) - }) - .reduce(Quad::combine_bounds) +mod gpu_common { + use super::*; + + impl<'de> serde::Deserialize<'de> for Raster { + fn deserialize(_deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + unimplemented!() + } + } + + impl serde::Serialize for Raster { + fn serialize(&self, _serializer: S) -> Result + where + S: serde::Serializer, + { + unimplemented!() + } + } +} + +impl BoundingBox for Raster +where + Raster: Storage, +{ + fn bounding_box(&self, transform: DAffine2, _include_stroke: bool) -> RenderBoundingBox { + if self.is_empty() || transform.matrix2.determinant() == 0. { + return RenderBoundingBox::None; + } + + let unit_rectangle = Quad::from_box([DVec2::ZERO, DVec2::ONE]); + RenderBoundingBox::Rectangle((transform * unit_rectangle).bounding_box()) } } diff --git a/node-graph/gcore/src/registry.rs b/node-graph/gcore/src/registry.rs index a5d92e8320..32fcf019de 100644 --- a/node-graph/gcore/src/registry.rs +++ b/node-graph/gcore/src/registry.rs @@ -1,36 +1,12 @@ use crate::{Node, NodeIO, NodeIOTypes, ProtoNodeIdentifier, Type, WasmNotSend}; use dyn_any::{DynAny, StaticType}; -use std::borrow::Cow; use std::collections::HashMap; use std::marker::PhantomData; use std::ops::Deref; use std::pin::Pin; use std::sync::{LazyLock, Mutex}; -pub mod types { - /// 0% - 100% - pub type Percentage = f64; - /// -100% - 100% - pub type SignedPercentage = f64; - /// -180ยฐ - 180ยฐ - pub type Angle = f64; - /// Ends in the unit of x - pub type Multiplier = f64; - /// Non-negative integer with px unit - pub type PixelLength = f64; - /// Non-negative - pub type Length = f64; - /// 0 to 1 - pub type Fraction = f64; - /// Unsigned integer - pub type IntegerCount = u32; - /// Unsigned integer to be used for random seeds - pub type SeedValue = u32; - /// DVec2 with px unit - pub type PixelSize = glam::DVec2; - /// String with one or more than one line - pub type TextArea = String; -} +pub use graphene_core_shaders::registry::types; // Translation struct between macro and definition #[derive(Clone)] @@ -59,33 +35,6 @@ pub struct FieldMetadata { pub unit: Option<&'static str>, } -pub trait ChoiceTypeStatic: Sized + Copy + crate::AsU32 + Send + Sync { - const WIDGET_HINT: ChoiceWidgetHint; - const DESCRIPTION: Option<&'static str>; - fn list() -> &'static [&'static [(Self, VariantMetadata)]]; -} - -pub enum ChoiceWidgetHint { - Dropdown, - RadioButtons, -} - -/// Translation struct between macro and definition. -#[derive(Clone, Debug)] -pub struct VariantMetadata { - /// Name as declared in source code. - pub name: Cow<'static, str>, - - /// Name to be displayed in UI. - pub label: Cow<'static, str>, - - /// User-facing documentation text. - pub docstring: Option>, - - /// Name of icon to display in radio buttons and such. - pub icon: Option>, -} - #[derive(Clone, Debug)] pub enum RegistryWidgetOverride { None, @@ -107,20 +56,20 @@ pub static NODE_REGISTRY: NodeRegistry = LazyLock::new(|| Mutex::new(HashMap::ne pub static NODE_METADATA: LazyLock>> = LazyLock::new(|| Mutex::new(HashMap::new())); -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub type DynFuture<'n, T> = Pin + 'n + Send>>; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub type DynFuture<'n, T> = Pin + 'n>>; pub type LocalFuture<'n, T> = Pin + 'n>>; -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub type Any<'n> = Box + 'n + Send>; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub type Any<'n> = Box + 'n>; pub type FutureAny<'n> = DynFuture<'n, Any<'n>>; // TODO: is this safe? This is assumed to be send+sync. -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub type TypeErasedNode<'n> = dyn for<'i> NodeIO<'i, Any<'i>, Output = FutureAny<'i>> + 'n + Send + Sync; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub type TypeErasedNode<'n> = dyn for<'i> NodeIO<'i, Any<'i>, Output = FutureAny<'i>> + 'n; pub type TypeErasedPinnedRef<'n> = Pin<&'n TypeErasedNode<'n>>; pub type TypeErasedRef<'n> = &'n TypeErasedNode<'n>; @@ -204,13 +153,14 @@ where { type Output = DynFuture<'input, O>; #[inline] + #[track_caller] fn eval(&'input self, input: I) -> Self::Output { { let node_name = self.node.node_name(); let input = Box::new(input); let future = self.node.eval(input); Box::pin(async move { - let out = dyn_any::downcast(future.await).unwrap_or_else(|e| panic!("DowncastBothNode Input {e} in: \n{node_name}")); + let out = dyn_any::downcast(future.await).unwrap_or_else(|e| panic!("DowncastBothNode wrong output type: {e} in: \n{node_name}")); *out }) } @@ -285,7 +235,7 @@ where }; match dyn_any::downcast(input) { Ok(input) => Box::pin(output(*input)), - Err(e) => panic!("DynAnyNode Input, {0} in:\n{1}", e, node_name), + Err(e) => panic!("DynAnyNode Input, {e} in:\n{node_name}"), } } diff --git a/node-graph/gcore/src/render_complexity.rs b/node-graph/gcore/src/render_complexity.rs index 3c137c87e8..7920479377 100644 --- a/node-graph/gcore/src/render_complexity.rs +++ b/node-graph/gcore/src/render_complexity.rs @@ -1,8 +1,8 @@ -use crate::instances::Instances; +use crate::gradient::GradientStops; use crate::raster_types::{CPU, GPU, Raster}; -use crate::vector::VectorData; -use crate::{Artboard, Color, GraphicElement}; -use glam::DVec2; +use crate::table::Table; +use crate::vector::Vector; +use crate::{Artboard, Color, Graphic}; pub trait RenderComplexity { fn render_complexity(&self) -> usize { @@ -10,30 +10,32 @@ pub trait RenderComplexity { } } -impl RenderComplexity for Instances { +impl RenderComplexity for Table { fn render_complexity(&self) -> usize { - self.instance_ref_iter().map(|instance| instance.instance.render_complexity()).fold(0, usize::saturating_add) + self.iter().map(|row| row.element.render_complexity()).fold(0, usize::saturating_add) } } impl RenderComplexity for Artboard { fn render_complexity(&self) -> usize { - self.graphic_group.render_complexity() + self.content.render_complexity() } } -impl RenderComplexity for GraphicElement { +impl RenderComplexity for Graphic { fn render_complexity(&self) -> usize { match self { - Self::GraphicGroup(instances) => instances.render_complexity(), - Self::VectorData(instances) => instances.render_complexity(), - Self::RasterDataCPU(instances) => instances.render_complexity(), - Self::RasterDataGPU(instances) => instances.render_complexity(), + Self::Graphic(table) => table.render_complexity(), + Self::Vector(table) => table.render_complexity(), + Self::RasterCPU(table) => table.render_complexity(), + Self::RasterGPU(table) => table.render_complexity(), + Self::Color(table) => table.render_complexity(), + Self::Gradient(table) => table.render_complexity(), } } } -impl RenderComplexity for VectorData { +impl RenderComplexity for Vector { fn render_complexity(&self) -> usize { self.segment_domain.ids().len() } @@ -52,10 +54,14 @@ impl RenderComplexity for Raster { } } -impl RenderComplexity for String {} -impl RenderComplexity for bool {} -impl RenderComplexity for f32 {} -impl RenderComplexity for f64 {} -impl RenderComplexity for DVec2 {} -impl RenderComplexity for Option {} -impl RenderComplexity for Vec {} +impl RenderComplexity for Color { + fn render_complexity(&self) -> usize { + 1 + } +} + +impl RenderComplexity for GradientStops { + fn render_complexity(&self) -> usize { + 1 + } +} diff --git a/node-graph/gcore/src/structural.rs b/node-graph/gcore/src/structural.rs deleted file mode 100644 index b6488c573c..0000000000 --- a/node-graph/gcore/src/structural.rs +++ /dev/null @@ -1,153 +0,0 @@ -use crate::Node; -use std::marker::PhantomData; - -/// This is how we can generically define composition of two nodes. -/// This is done generically as shown: -/// A concrete example: -/// And showing the direction of data flow: -/// ```text -/// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -/// T โ”‚ โ”‚ U -/// โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ Compose Node โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ -/// โ”‚ โ”‚ -/// โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค -/// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ -/// โ”‚ โ”‚ T -> V โ”‚ โ”‚ -/// โ”‚ First โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ โ”‚ -/// โ”‚ โ”‚ โ”‚ โ”‚ -/// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ -/// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ -/// โ”‚ โ”‚ V -> U โ”‚ โ”‚ -/// โ”‚ Second โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ โ”‚ -/// โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -/// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -/// ``` -#[derive(Clone, Copy)] -pub struct ComposeNode { - first: First, - second: Second, - phantom: PhantomData, -} - -impl<'i, Input: 'i, First, Second> Node<'i, Input> for ComposeNode -where - First: Node<'i, Input>, - Second: Node<'i, >::Output> + 'i, -{ - type Output = >::Output>>::Output; - fn eval(&'i self, input: Input) -> Self::Output { - let arg = self.first.eval(input); - let second = &self.second; - second.eval(arg) - } -} - -impl ComposeNode { - pub const fn new(first: First, second: Second) -> Self { - ComposeNode:: { first, second, phantom: PhantomData } - } -} - -#[derive(Clone)] -pub struct AsyncComposeNode { - first: First, - second: Second, - phantom: PhantomData, -} - -impl<'i, Input: 'static, First, Second> Node<'i, Input> for AsyncComposeNode -where - First: Node<'i, Input>, - First::Output: Future, - Second: Node<'i, <>::Output as Future>::Output> + 'i, -{ - type Output = std::pin::Pin>::Output as Future>::Output>>::Output> + 'i>>; - fn eval(&'i self, input: Input) -> Self::Output { - Box::pin(async move { - let arg = self.first.eval(input).await; - self.second.eval(arg) - }) - } -} - -impl<'i, First, Second, Input: 'i> AsyncComposeNode -where - First: Node<'i, Input>, - First::Output: Future, - Second: Node<'i, <>::Output as Future>::Output> + 'i, -{ - pub const fn new(first: First, second: Second) -> Self { - AsyncComposeNode:: { first, second, phantom: PhantomData } - } -} - -pub trait Then<'i, Input: 'i>: Sized { - fn then(self, second: Second) -> ComposeNode - where - Self: Node<'i, Input>, - Second: Node<'i, >::Output>, - { - ComposeNode::new(self, second) - } -} - -impl<'i, First: Node<'i, Input>, Input: 'i> Then<'i, Input> for First {} - -pub trait AndThen<'i, Input: 'i>: Sized { - fn and_then(self, second: Second) -> AsyncComposeNode - where - Self: Node<'i, Input>, - Self::Output: Future, - Second: Node<'i, <>::Output as Future>::Output> + 'i, - { - AsyncComposeNode::new(self, second) - } -} - -impl<'i, First: Node<'i, Input>, Input: 'i> AndThen<'i, Input> for First {} - -pub struct ConsNode, Root>(pub Root, PhantomData); - -impl<'i, Root, Input: 'i, I: 'i + From<()>> Node<'i, Input> for ConsNode -where - Root: Node<'i, I>, -{ - type Output = (Input, Root::Output); - fn eval(&'i self, input: Input) -> Self::Output { - let arg = self.0.eval(I::from(())); - (input, arg) - } -} -impl<'i, Root: Node<'i, I>, I: 'i + From<()>> ConsNode { - pub fn new(root: Root) -> Self { - ConsNode(root, PhantomData) - } -} - -#[cfg(test)] -mod test { - use super::*; - use crate::generic::FnNode; - use crate::value::ValueNode; - - #[test] - fn compose() { - let value = ValueNode::new(4u32); - let compose = value.then(FnNode::new(|x| x)); - assert_eq!(compose.eval(()), &4u32); - let type_erased = &compose as &dyn Node<'_, (), Output = &'_ u32>; - assert_eq!(type_erased.eval(()), &4u32); - } - - #[test] - fn test_ref_eval() { - let value = ValueNode::new(5); - - assert_eq!(value.eval(()), &5); - let id = FnNode::new(|x| x); - - let compose = ComposeNode::new(&value, &id); - - assert_eq!(compose.eval(()), &5); - } -} diff --git a/node-graph/gcore/src/subpath/consts.rs b/node-graph/gcore/src/subpath/consts.rs new file mode 100644 index 0000000000..300407f526 --- /dev/null +++ b/node-graph/gcore/src/subpath/consts.rs @@ -0,0 +1,4 @@ +// Implementation constants + +/// Constant used to determine if `f64`s are equivalent. +pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; diff --git a/node-graph/gcore/src/subpath/core.rs b/node-graph/gcore/src/subpath/core.rs new file mode 100644 index 0000000000..2dc8f3dc1c --- /dev/null +++ b/node-graph/gcore/src/subpath/core.rs @@ -0,0 +1,318 @@ +use super::consts::*; +use super::*; +use crate::vector::misc::point_to_dvec2; +use glam::DVec2; +use kurbo::PathSeg; + +pub struct PathSegPoints { + pub p0: DVec2, + pub p1: Option, + pub p2: Option, + pub p3: DVec2, +} + +impl PathSegPoints { + pub fn new(p0: DVec2, p1: Option, p2: Option, p3: DVec2) -> Self { + Self { p0, p1, p2, p3 } + } +} + +pub fn pathseg_points(segment: PathSeg) -> PathSegPoints { + match segment { + PathSeg::Line(line) => PathSegPoints::new(point_to_dvec2(line.p0), None, None, point_to_dvec2(line.p1)), + PathSeg::Quad(quad) => PathSegPoints::new(point_to_dvec2(quad.p0), None, Some(point_to_dvec2(quad.p1)), point_to_dvec2(quad.p2)), + PathSeg::Cubic(cube) => PathSegPoints::new(point_to_dvec2(cube.p0), Some(point_to_dvec2(cube.p1)), Some(point_to_dvec2(cube.p2)), point_to_dvec2(cube.p3)), + } +} + +/// Functionality relating to core `Subpath` operations, such as constructors and `iter`. +impl Subpath { + /// Create a new `Subpath` using a list of [ManipulatorGroup]s. + /// A `Subpath` with less than 2 [ManipulatorGroup]s may not be closed. + #[track_caller] + pub fn new(manipulator_groups: Vec>, closed: bool) -> Self { + assert!(!closed || !manipulator_groups.is_empty(), "A closed Subpath must contain more than 0 ManipulatorGroups."); + Self { manipulator_groups, closed } + } + + /// Create a `Subpath` consisting of 2 manipulator groups from a `Bezier`. + pub fn from_bezier(segment: PathSeg) -> Self { + let PathSegPoints { p0, p1, p2, p3 } = pathseg_points(segment); + Subpath::new(vec![ManipulatorGroup::new(p0, None, p1), ManipulatorGroup::new(p3, p2, None)], false) + } + + /// Creates a subpath from a slice of [Bezier]. When two consecutive Beziers do not share an end and start point, this function + /// resolves the discrepancy by simply taking the start-point of the second Bezier as the anchor of the Manipulator Group. + pub fn from_beziers(beziers: &[PathSeg], closed: bool) -> Self { + assert!(!closed || beziers.len() > 1, "A closed Subpath must contain at least 1 Bezier."); + if beziers.is_empty() { + return Subpath::new(vec![], closed); + } + + let beziers: Vec<_> = beziers.iter().map(|b| pathseg_points(*b)).collect(); + + let first = beziers.first().unwrap(); + let mut manipulator_groups = vec![ManipulatorGroup { + anchor: first.p0, + in_handle: None, + out_handle: first.p1, + id: PointId::new(), + }]; + let mut inner_groups: Vec> = beziers + .windows(2) + .map(|bezier_pair| ManipulatorGroup { + anchor: bezier_pair[1].p0, + in_handle: bezier_pair[0].p2, + out_handle: bezier_pair[1].p1, + id: PointId::new(), + }) + .collect::>>(); + manipulator_groups.append(&mut inner_groups); + + let last = beziers.last().unwrap(); + if !closed { + manipulator_groups.push(ManipulatorGroup { + anchor: last.p3, + in_handle: last.p2, + out_handle: None, + id: PointId::new(), + }); + return Subpath::new(manipulator_groups, false); + } + + manipulator_groups[0].in_handle = last.p2; + Subpath::new(manipulator_groups, true) + } + + /// Returns true if the `Subpath` contains no [ManipulatorGroup]. + pub fn is_empty(&self) -> bool { + self.manipulator_groups.is_empty() + } + + /// Returns the number of [ManipulatorGroup]s contained within the `Subpath`. + pub fn len(&self) -> usize { + self.manipulator_groups.len() + } + + /// Returns the number of segments contained within the `Subpath`. + pub fn len_segments(&self) -> usize { + let mut number_of_curves = self.len(); + if !self.closed && number_of_curves > 0 { + number_of_curves -= 1 + } + number_of_curves + } + + /// Returns a copy of the bezier segment at the given segment index, if this segment exists. + pub fn get_segment(&self, segment_index: usize) -> Option { + if segment_index >= self.len_segments() { + return None; + } + Some(self[segment_index].to_bezier(&self[(segment_index + 1) % self.len()])) + } + + /// Returns an iterator of the [Bezier]s along the `Subpath`. + pub fn iter(&self) -> SubpathIter<'_, PointId> { + SubpathIter { + subpath: self, + index: 0, + is_always_closed: false, + } + } + + /// Returns an iterator of the [Bezier]s along the `Subpath` always considering it as a closed subpath. + pub fn iter_closed(&self) -> SubpathIter<'_, PointId> { + SubpathIter { + subpath: self, + index: 0, + is_always_closed: true, + } + } + + /// Returns a slice of the [ManipulatorGroup]s in the `Subpath`. + pub fn manipulator_groups(&self) -> &[ManipulatorGroup] { + &self.manipulator_groups + } + + /// Returns a mutable reference to the [ManipulatorGroup]s in the `Subpath`. + pub fn manipulator_groups_mut(&mut self) -> &mut Vec> { + &mut self.manipulator_groups + } + + /// Returns a vector of all the anchors (DVec2) for this `Subpath`. + pub fn anchors(&self) -> Vec { + self.manipulator_groups().iter().map(|group| group.anchor).collect() + } + + /// Returns if the Subpath is equivalent to a single point. + pub fn is_point(&self) -> bool { + if self.is_empty() { + return false; + } + let point = self.manipulator_groups[0].anchor; + self.manipulator_groups + .iter() + .all(|manipulator_group| manipulator_group.anchor.abs_diff_eq(point, MAX_ABSOLUTE_DIFFERENCE)) + } + + /// Construct a [Subpath] from an iter of anchor positions. + pub fn from_anchors(anchor_positions: impl IntoIterator, closed: bool) -> Self { + Self::new(anchor_positions.into_iter().map(|anchor| ManipulatorGroup::new_anchor(anchor)).collect(), closed) + } + + pub fn from_anchors_linear(anchor_positions: impl IntoIterator, closed: bool) -> Self { + Self::new(anchor_positions.into_iter().map(|anchor| ManipulatorGroup::new_anchor_linear(anchor)).collect(), closed) + } + + /// Constructs a rectangle with `corner1` and `corner2` as the two corners. + pub fn new_rect(corner1: DVec2, corner2: DVec2) -> Self { + Self::from_anchors_linear([corner1, DVec2::new(corner2.x, corner1.y), corner2, DVec2::new(corner1.x, corner2.y)], true) + } + + /// Constructs a rounded rectangle with `corner1` and `corner2` as the two corners and `corner_radii` as the radii of the corners: `[top_left, top_right, bottom_right, bottom_left]`. + pub fn new_rounded_rect(corner1: DVec2, corner2: DVec2, corner_radii: [f64; 4]) -> Self { + if corner_radii.iter().all(|radii| radii.abs() < f64::EPSILON * 100.) { + return Self::new_rect(corner1, corner2); + } + + use std::f64::consts::{FRAC_1_SQRT_2, PI}; + + let new_arc = |center: DVec2, corner: DVec2, radius: f64| -> Vec> { + let point1 = center + DVec2::from_angle(-PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; + let point2 = center + DVec2::from_angle(PI * 0.25).rotate(corner - center) * FRAC_1_SQRT_2; + if radius == 0. { + return vec![ManipulatorGroup::new_anchor(point1), ManipulatorGroup::new_anchor(point2)]; + } + + // Based on https://pomax.github.io/bezierinfo/#circles_cubic + const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; + let handle_offset = radius * HANDLE_OFFSET_FACTOR; + vec![ + ManipulatorGroup::new(point1, None, Some(point1 + handle_offset * (corner - point1).normalize())), + ManipulatorGroup::new(point2, Some(point2 + handle_offset * (corner - point2).normalize()), None), + ] + }; + Self::new( + [ + new_arc(DVec2::new(corner1.x + corner_radii[0], corner1.y + corner_radii[0]), DVec2::new(corner1.x, corner1.y), corner_radii[0]), + new_arc(DVec2::new(corner2.x - corner_radii[1], corner1.y + corner_radii[1]), DVec2::new(corner2.x, corner1.y), corner_radii[1]), + new_arc(DVec2::new(corner2.x - corner_radii[2], corner2.y - corner_radii[2]), DVec2::new(corner2.x, corner2.y), corner_radii[2]), + new_arc(DVec2::new(corner1.x + corner_radii[3], corner2.y - corner_radii[3]), DVec2::new(corner1.x, corner2.y), corner_radii[3]), + ] + .concat(), + true, + ) + } + + /// Constructs an ellipse with `corner1` and `corner2` as the two corners of the bounding box. + pub fn new_ellipse(corner1: DVec2, corner2: DVec2) -> Self { + let size = (corner1 - corner2).abs(); + let center = (corner1 + corner2) / 2.; + let top = DVec2::new(center.x, corner1.y); + let bottom = DVec2::new(center.x, corner2.y); + let left = DVec2::new(corner1.x, center.y); + let right = DVec2::new(corner2.x, center.y); + + // Based on https://pomax.github.io/bezierinfo/#circles_cubic + const HANDLE_OFFSET_FACTOR: f64 = 0.551784777779014; + let handle_offset = size * HANDLE_OFFSET_FACTOR * 0.5; + + let manipulator_groups = vec![ + ManipulatorGroup::new(top, Some(top - handle_offset * DVec2::X), Some(top + handle_offset * DVec2::X)), + ManipulatorGroup::new(right, Some(right - handle_offset * DVec2::Y), Some(right + handle_offset * DVec2::Y)), + ManipulatorGroup::new(bottom, Some(bottom + handle_offset * DVec2::X), Some(bottom - handle_offset * DVec2::X)), + ManipulatorGroup::new(left, Some(left + handle_offset * DVec2::Y), Some(left - handle_offset * DVec2::Y)), + ]; + Self::new(manipulator_groups, true) + } + + /// Constructs an arc by a `radius`, `angle_start` and `angle_size`. Angles must be in radians. Slice option makes it look like pie or pacman. + pub fn new_arc(radius: f64, start_angle: f64, sweep_angle: f64, arc_type: ArcType) -> Self { + // Prevents glitches from numerical imprecision that have been observed during animation playback after about a minute + let start_angle = start_angle % (std::f64::consts::TAU * 2.); + let sweep_angle = sweep_angle % (std::f64::consts::TAU * 2.); + + let original_start_angle = start_angle; + let sweep_angle_sign = sweep_angle.signum(); + + let mut start_angle = 0.; + let mut sweep_angle = sweep_angle.abs(); + + if (sweep_angle / std::f64::consts::TAU).floor() as u32 % 2 == 0 { + sweep_angle %= std::f64::consts::TAU; + } else { + start_angle = sweep_angle % std::f64::consts::TAU; + sweep_angle = std::f64::consts::TAU - start_angle; + } + + sweep_angle *= sweep_angle_sign; + start_angle *= sweep_angle_sign; + start_angle += original_start_angle; + + let closed = arc_type == ArcType::Closed; + let slice = arc_type == ArcType::PieSlice; + + let center = DVec2::new(0., 0.); + let segments = (sweep_angle.abs() / (std::f64::consts::PI / 4.)).ceil().max(1.) as usize; + let step = sweep_angle / segments as f64; + let factor = 4. / 3. * (step / 2.).sin() / (1. + (step / 2.).cos()); + + let mut manipulator_groups = Vec::with_capacity(segments); + let mut prev_in_handle = None; + let mut prev_end = DVec2::new(0., 0.); + + for i in 0..segments { + let start_angle = start_angle + step * i as f64; + let end_angle = start_angle + step; + let start_vec = DVec2::from_angle(start_angle); + let end_vec = DVec2::from_angle(end_angle); + + let start = center + radius * start_vec; + let end = center + radius * end_vec; + + let handle_start = start + start_vec.perp() * radius * factor; + let handle_end = end - end_vec.perp() * radius * factor; + + manipulator_groups.push(ManipulatorGroup::new(start, prev_in_handle, Some(handle_start))); + prev_in_handle = Some(handle_end); + prev_end = end; + } + manipulator_groups.push(ManipulatorGroup::new(prev_end, prev_in_handle, None)); + + if slice { + manipulator_groups.push(ManipulatorGroup::new(center, None, None)); + } + + Self::new(manipulator_groups, closed || slice) + } + + /// Constructs a regular polygon (ngon). Based on `sides` and `radius`, which is the distance from the center to any vertex. + pub fn new_regular_polygon(center: DVec2, sides: u64, radius: f64) -> Self { + let sides = sides.max(3); + let angle_increment = std::f64::consts::TAU / (sides as f64); + let anchor_positions = (0..sides).map(|i| { + let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; + let center = center + DVec2::ONE * radius; + DVec2::new(center.x + radius * f64::cos(angle), center.y + radius * f64::sin(angle)) * 0.5 + }); + Self::from_anchors(anchor_positions, true) + } + + /// Constructs a star polygon (n-star). See [new_regular_polygon], but with interspersed vertices at an `inner_radius`. + pub fn new_star_polygon(center: DVec2, sides: u64, radius: f64, inner_radius: f64) -> Self { + let sides = sides.max(2); + let angle_increment = 0.5 * std::f64::consts::TAU / (sides as f64); + let anchor_positions = (0..sides * 2).map(|i| { + let angle = (i as f64) * angle_increment - std::f64::consts::FRAC_PI_2; + let center = center + DVec2::ONE * radius; + let r = if i % 2 == 0 { radius } else { inner_radius }; + DVec2::new(center.x + r * f64::cos(angle), center.y + r * f64::sin(angle)) * 0.5 + }); + Self::from_anchors(anchor_positions, true) + } + + /// Constructs a line from `p1` to `p2` + pub fn new_line(p1: DVec2, p2: DVec2) -> Self { + Self::from_anchors([p1, p2], false) + } +} diff --git a/node-graph/gcore/src/subpath/lookup.rs b/node-graph/gcore/src/subpath/lookup.rs new file mode 100644 index 0000000000..94e85e9707 --- /dev/null +++ b/node-graph/gcore/src/subpath/lookup.rs @@ -0,0 +1,114 @@ +use super::consts::MAX_ABSOLUTE_DIFFERENCE; +use super::*; +use crate::math::polynomial::pathseg_to_parametric_polynomial; +use crate::vector::algorithms::bezpath_algorithms::pathseg_length_centroid_and_length; +use crate::vector::algorithms::intersection::{filtered_all_segment_intersections, pathseg_self_intersections}; +use glam::DVec2; + +impl Subpath { + /// Returns a list of `t` values that correspond to all the self intersection points of the subpath always considering it as a closed subpath. The index and `t` value of both will be returned that corresponds to a point. + /// The points will be sorted based on their index and `t` repsectively. + /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. + /// - `minimum_separation`: the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. + /// + /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two + /// + /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. + pub fn all_self_intersections(&self, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { + let mut intersections_vec = Vec::new(); + let err = accuracy.unwrap_or(MAX_ABSOLUTE_DIFFERENCE); + let num_curves = self.len(); + // TODO: optimization opportunity - this for-loop currently compares all intersections with all curve-segments in the subpath collection + self.iter_closed().enumerate().for_each(|(i, other)| { + intersections_vec.extend(pathseg_self_intersections(other, accuracy, minimum_separation).iter().flat_map(|value| [(i, value.0), (i, value.1)])); + self.iter_closed().enumerate().skip(i + 1).for_each(|(j, curve)| { + intersections_vec.extend( + filtered_all_segment_intersections(curve, other, accuracy, minimum_separation) + .iter() + .filter(|&value| (j != i + 1 || value.0 > err || (1. - value.1) > err) && (j != num_curves - 1 || i != 0 || value.1 > err || (1. - value.0) > err)) + .flat_map(|value| [(j, value.0), (i, value.1)]), + ); + }); + }); + + intersections_vec.sort_by(|a, b| a.partial_cmp(b).unwrap()); + + intersections_vec + } + + /// Return the area centroid, together with the area, of the `Subpath` always considering it as a closed subpath. The area will always be a positive value. + /// + /// The area centroid is the center of mass for the area of a solid shape's interior. + /// An infinitely flat material forming the subpath's closed shape would balance at this point. + /// + /// It will return `None` if no manipulator is present. If the area is less than `error`, it will return `Some((DVec2::NAN, 0.))`. + /// + /// Because the calculation of area and centroid for self-intersecting path requires finding the intersections, the following parameters are used: + /// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. + /// - `minimum_separation` - the minimum difference two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. + /// + /// If the comparison condition is not satisfied, the function takes the larger `t`-value of the two. + /// + /// **NOTE**: if an intersection were to occur within an `error` distance away from an anchor point, the algorithm will filter that intersection out. + pub fn area_centroid_and_area(&self, error: Option, minimum_separation: Option) -> Option<(DVec2, f64)> { + let all_intersections = self.all_self_intersections(error, minimum_separation); + let mut current_sign: f64 = 1.; + + let (x_sum, y_sum, area) = self + .iter_closed() + .enumerate() + .map(|(index, bezier)| { + let (f_x, f_y) = pathseg_to_parametric_polynomial(bezier); + let (f_x, f_y) = (f_x.as_size::<10>().unwrap(), f_y.as_size::<10>().unwrap()); + let f_y_prime = f_y.derivative(); + let f_x_prime = f_x.derivative(); + let f_xy = &f_x * &f_y; + + let mut x_part = &f_xy * &f_x_prime; + let mut y_part = &f_xy * &f_y_prime; + let mut area_part = &f_x * &f_y_prime; + x_part.antiderivative_mut(); + y_part.antiderivative_mut(); + area_part.antiderivative_mut(); + + let mut curve_sum_x = -current_sign * x_part.eval(0.); + let mut curve_sum_y = -current_sign * y_part.eval(0.); + let mut curve_sum_area = -current_sign * area_part.eval(0.); + for (_, t) in all_intersections.iter().filter(|(i, _)| *i == index) { + curve_sum_x += 2. * current_sign * x_part.eval(*t); + curve_sum_y += 2. * current_sign * y_part.eval(*t); + curve_sum_area += 2. * current_sign * area_part.eval(*t); + current_sign *= -1.; + } + curve_sum_x += current_sign * x_part.eval(1.); + curve_sum_y += current_sign * y_part.eval(1.); + curve_sum_area += current_sign * area_part.eval(1.); + + (-curve_sum_x, curve_sum_y, curve_sum_area) + }) + .reduce(|(x1, y1, area1), (x2, y2, area2)| (x1 + x2, y1 + y2, area1 + area2))?; + + if area.abs() < error.unwrap_or(MAX_ABSOLUTE_DIFFERENCE) { + return Some((DVec2::NAN, 0.)); + } + + Some((DVec2::new(x_sum / area, y_sum / area), area.abs())) + } + + /// Return the approximation of the length centroid, together with the length, of the `Subpath`. + /// + /// The length centroid is the center of mass for the arc length of the solid shape's perimeter. + /// An infinitely thin wire forming the subpath's closed shape would balance at this point. + /// + /// It will return `None` if no manipulator is present. + /// - `accuracy` is used to approximate the curve. + /// - `always_closed` is to consider the subpath as closed always. + pub fn length_centroid_and_length(&self, accuracy: Option, always_closed: bool) -> Option<(DVec2, f64)> { + if always_closed { self.iter_closed() } else { self.iter() } + .map(|bezier| pathseg_length_centroid_and_length(bezier, accuracy)) + .map(|(centroid, length)| (centroid * length, length)) + .reduce(|(centroid_part1, length1), (centroid_part2, length2)| (centroid_part1 + centroid_part2, length1 + length2)) + .map(|(centroid_part, length)| (centroid_part / length, length)) + .map(|(centroid_part, length)| (DVec2::new(centroid_part.x, centroid_part.y), length)) + } +} diff --git a/node-graph/gcore/src/subpath/manipulators.rs b/node-graph/gcore/src/subpath/manipulators.rs new file mode 100644 index 0000000000..6dad21d6d1 --- /dev/null +++ b/node-graph/gcore/src/subpath/manipulators.rs @@ -0,0 +1,52 @@ +// use super::consts::MAX_ABSOLUTE_DIFFERENCE; +// use super::utils::{SubpathTValue}; +use super::*; + +impl Subpath { + /// Get whether the subpath is closed. + pub fn closed(&self) -> bool { + self.closed + } + + /// Set whether the subpath is closed. + pub fn set_closed(&mut self, new_closed: bool) { + self.closed = new_closed; + } + + /// Access a [ManipulatorGroup] from a PointId. + pub fn manipulator_from_id(&self, id: PointId) -> Option<&ManipulatorGroup> { + self.manipulator_groups.iter().find(|manipulator_group| manipulator_group.id == id) + } + + /// Access a mutable [ManipulatorGroup] from a PointId. + pub fn manipulator_mut_from_id(&mut self, id: PointId) -> Option<&mut ManipulatorGroup> { + self.manipulator_groups.iter_mut().find(|manipulator_group| manipulator_group.id == id) + } + + /// Access the index of a [ManipulatorGroup] from a PointId. + pub fn manipulator_index_from_id(&self, id: PointId) -> Option { + self.manipulator_groups.iter().position(|manipulator_group| manipulator_group.id == id) + } + + /// Insert a manipulator group at an index. + pub fn insert_manipulator_group(&mut self, index: usize, group: ManipulatorGroup) { + assert!(group.is_finite(), "Inserting non finite manipulator group"); + self.manipulator_groups.insert(index, group) + } + + /// Push a manipulator group to the end. + pub fn push_manipulator_group(&mut self, group: ManipulatorGroup) { + assert!(group.is_finite(), "Pushing non finite manipulator group"); + self.manipulator_groups.push(group) + } + + /// Get a mutable reference to the last manipulator + pub fn last_manipulator_group_mut(&mut self) -> Option<&mut ManipulatorGroup> { + self.manipulator_groups.last_mut() + } + + /// Remove a manipulator group at an index. + pub fn remove_manipulator_group(&mut self, index: usize) -> ManipulatorGroup { + self.manipulator_groups.remove(index) + } +} diff --git a/libraries/bezier-rs/src/subpath/mod.rs b/node-graph/gcore/src/subpath/mod.rs similarity index 76% rename from libraries/bezier-rs/src/subpath/mod.rs rename to node-graph/gcore/src/subpath/mod.rs index c349e01e7c..1e50e32f40 100644 --- a/libraries/bezier-rs/src/subpath/mod.rs +++ b/node-graph/gcore/src/subpath/mod.rs @@ -1,3 +1,4 @@ +mod consts; mod core; mod lookup; mod manipulators; @@ -5,8 +6,8 @@ mod solvers; mod structs; mod transform; -use crate::Bezier; pub use core::*; +use kurbo::PathSeg; use std::fmt::{Debug, Formatter, Result}; use std::ops::{Index, IndexMut}; pub use structs::*; @@ -14,24 +15,19 @@ pub use structs::*; /// Structure used to represent a path composed of [Bezier] curves. #[derive(Clone, PartialEq, Hash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct Subpath { +pub struct Subpath { manipulator_groups: Vec>, pub closed: bool, } -#[cfg(feature = "dyn-any")] -unsafe impl dyn_any::StaticType for Subpath { - type Static = Subpath; -} - /// Iteration structure for iterating across each curve of a `Subpath`, using an intermediate `Bezier` representation. -pub struct SubpathIter<'a, PointId: crate::Identifier> { +pub struct SubpathIter<'a, PointId: Identifier> { index: usize, subpath: &'a Subpath, is_always_closed: bool, } -impl Index for Subpath { +impl Index for Subpath { type Output = ManipulatorGroup; fn index(&self, index: usize) -> &Self::Output { @@ -40,15 +36,15 @@ impl Index for Subpath { } } -impl IndexMut for Subpath { +impl IndexMut for Subpath { fn index_mut(&mut self, index: usize) -> &mut Self::Output { assert!(index < self.len(), "Index out of bounds in trait IndexMut of SubPath."); &mut self.manipulator_groups[index] } } -impl Iterator for SubpathIter<'_, PointId> { - type Item = Bezier; +impl Iterator for SubpathIter<'_, PointId> { + type Item = PathSeg; // Returns the Bezier representation of each `Subpath` segment, defined between a pair of adjacent manipulator points. fn next(&mut self) -> Option { @@ -68,7 +64,7 @@ impl Iterator for SubpathIter<'_, PointId> { } } -impl Debug for Subpath { +impl Debug for Subpath { fn fmt(&self, f: &mut Formatter<'_>) -> Result { f.debug_struct("Subpath").field("closed", &self.closed).field("manipulator_groups", &self.manipulator_groups).finish() } diff --git a/node-graph/gcore/src/subpath/solvers.rs b/node-graph/gcore/src/subpath/solvers.rs new file mode 100644 index 0000000000..409e336a93 --- /dev/null +++ b/node-graph/gcore/src/subpath/solvers.rs @@ -0,0 +1,83 @@ +use crate::subpath::{Identifier, Subpath}; +use crate::vector::algorithms::bezpath_algorithms::bezpath_is_inside_bezpath; +use crate::vector::misc::dvec2_to_point; +use glam::DVec2; +use kurbo::{Affine, BezPath, Shape}; + +impl Subpath { + pub fn contains_point(&self, point: DVec2) -> bool { + self.to_bezpath().contains(dvec2_to_point(point)) + } + + pub fn to_bezpath(&self) -> BezPath { + let mut bezpath = kurbo::BezPath::new(); + let mut out_handle; + + let Some(first) = self.manipulator_groups.first() else { return bezpath }; + bezpath.move_to(dvec2_to_point(first.anchor)); + out_handle = first.out_handle; + + for manipulator in self.manipulator_groups.iter().skip(1) { + match (out_handle, manipulator.in_handle) { + (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(manipulator.anchor)), + (None, None) => bezpath.line_to(dvec2_to_point(manipulator.anchor)), + (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), + (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(manipulator.anchor)), + } + out_handle = manipulator.out_handle; + } + + if self.closed { + match (out_handle, first.in_handle) { + (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(first.anchor)), + (None, None) => bezpath.line_to(dvec2_to_point(first.anchor)), + (None, Some(handle)) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), + (Some(handle), None) => bezpath.quad_to(dvec2_to_point(handle), dvec2_to_point(first.anchor)), + } + bezpath.close_path(); + } + bezpath + } + + /// Returns `true` if this subpath is completely inside the `other` subpath. + pub fn is_inside_subpath(&self, other: &Subpath, accuracy: Option, minimum_separation: Option) -> bool { + bezpath_is_inside_bezpath(&self.to_bezpath(), &other.to_bezpath(), accuracy, minimum_separation) + } + + /// Return the min and max corners that represent the bounding box of the subpath. Return `None` if the subpath is empty. + pub fn bounding_box(&self) -> Option<[DVec2; 2]> { + self.iter() + .map(|bezier| bezier.bounding_box()) + .map(|bbox| [DVec2::new(bbox.min_x(), bbox.min_y()), DVec2::new(bbox.max_x(), bbox.max_y())]) + .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) + } + + /// Return the min and max corners that represent the bounding box of the subpath, after a given affine transform. + pub fn bounding_box_with_transform(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> { + self.iter() + .map(|bezier| (Affine::new(transform.to_cols_array()) * bezier).bounding_box()) + .map(|bbox| [DVec2::new(bbox.min_x(), bbox.min_y()), DVec2::new(bbox.max_x(), bbox.max_y())]) + .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) + } + + /// Return the min and max corners that represent the loose bounding box of the subpath (bounding box of all handles and anchors). + pub fn loose_bounding_box(&self) -> Option<[DVec2; 2]> { + self.manipulator_groups + .iter() + .flat_map(|group| [group.in_handle, group.out_handle, Some(group.anchor)]) + .flatten() + .map(|pos| [pos, pos]) + .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) + } + + /// Return the min and max corners that represent the loose bounding box of the subpath, after a given affine transform. + pub fn loose_bounding_box_with_transform(&self, transform: glam::DAffine2) -> Option<[DVec2; 2]> { + self.manipulator_groups + .iter() + .flat_map(|group| [group.in_handle, group.out_handle, Some(group.anchor)]) + .flatten() + .map(|pos| transform.transform_point2(pos)) + .map(|pos| [pos, pos]) + .reduce(|bbox1, bbox2| [bbox1[0].min(bbox2[0]), bbox1[1].max(bbox2[1])]) + } +} diff --git a/node-graph/gcore/src/subpath/structs.rs b/node-graph/gcore/src/subpath/structs.rs new file mode 100644 index 0000000000..d5f868be2b --- /dev/null +++ b/node-graph/gcore/src/subpath/structs.rs @@ -0,0 +1,415 @@ +use crate::vector::algorithms::intersection::filtered_segment_intersections; +use crate::vector::misc::{dvec2_to_point, handles_to_segment}; +use glam::{DAffine2, DVec2}; +use kurbo::{CubicBez, Line, PathSeg, QuadBez, Shape}; +use std::fmt::{Debug, Formatter, Result}; +use std::hash::Hash; + +/// An id type used for each [ManipulatorGroup]. +pub trait Identifier: Sized + Clone + PartialEq + Hash + 'static { + fn new() -> Self; +} + +/// Structure used to represent a single anchor with up to two optional associated handles along a `Subpath` +#[derive(Copy, Clone, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct ManipulatorGroup { + pub anchor: DVec2, + pub in_handle: Option, + pub out_handle: Option, + pub id: PointId, +} + +// TODO: Remove once we no longer need to hash floats in Graphite +impl Hash for ManipulatorGroup { + fn hash(&self, state: &mut H) { + self.anchor.to_array().iter().for_each(|x| x.to_bits().hash(state)); + self.in_handle.is_some().hash(state); + if let Some(in_handle) = self.in_handle { + in_handle.to_array().iter().for_each(|x| x.to_bits().hash(state)); + } + self.out_handle.is_some().hash(state); + if let Some(out_handle) = self.out_handle { + out_handle.to_array().iter().for_each(|x| x.to_bits().hash(state)); + } + self.id.hash(state); + } +} + +impl Debug for ManipulatorGroup { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + f.debug_struct("ManipulatorGroup") + .field("anchor", &self.anchor) + .field("in_handle", &self.in_handle) + .field("out_handle", &self.out_handle) + .finish() + } +} + +impl ManipulatorGroup { + /// Construct a new manipulator group from an anchor, in handle and out handle + pub fn new(anchor: DVec2, in_handle: Option, out_handle: Option) -> Self { + let id = PointId::new(); + Self { anchor, in_handle, out_handle, id } + } + + /// Construct a new manipulator point with just an anchor position + pub fn new_anchor(anchor: DVec2) -> Self { + Self::new(anchor, Some(anchor), Some(anchor)) + } + + pub fn new_anchor_linear(anchor: DVec2) -> Self { + Self::new(anchor, None, None) + } + + /// Construct a new manipulator group from an anchor, in handle, out handle and an id + pub fn new_with_id(anchor: DVec2, in_handle: Option, out_handle: Option, id: PointId) -> Self { + Self { anchor, in_handle, out_handle, id } + } + + /// Construct a new manipulator point with just an anchor position and an id + pub fn new_anchor_with_id(anchor: DVec2, id: PointId) -> Self { + Self::new_with_id(anchor, Some(anchor), Some(anchor), id) + } + + /// Create a bezier curve that starts at the current manipulator group and finishes in the `end_group` manipulator group. + pub fn to_bezier(&self, end_group: &ManipulatorGroup) -> PathSeg { + let start = self.anchor; + let end = end_group.anchor; + let out_handle = self.out_handle; + let in_handle = end_group.in_handle; + + match (out_handle, in_handle) { + (Some(handle1), Some(handle2)) => PathSeg::Cubic(CubicBez::new(dvec2_to_point(start), dvec2_to_point(handle1), dvec2_to_point(handle2), dvec2_to_point(end))), + (Some(handle), None) | (None, Some(handle)) => PathSeg::Quad(QuadBez::new(dvec2_to_point(start), dvec2_to_point(handle), dvec2_to_point(end))), + (None, None) => PathSeg::Line(Line::new(dvec2_to_point(start), dvec2_to_point(end))), + } + } + + /// Apply a transformation to all of the [ManipulatorGroup] points + pub fn apply_transform(&mut self, affine_transform: DAffine2) { + self.anchor = affine_transform.transform_point2(self.anchor); + self.in_handle = self.in_handle.map(|in_handle| affine_transform.transform_point2(in_handle)); + self.out_handle = self.out_handle.map(|out_handle| affine_transform.transform_point2(out_handle)); + } + + /// Are all handles at finite positions + pub fn is_finite(&self) -> bool { + self.anchor.is_finite() && self.in_handle.is_none_or(|handle| handle.is_finite()) && self.out_handle.is_none_or(|handle| handle.is_finite()) + } + + /// Reverse directions of handles + pub fn flip(mut self) -> Self { + std::mem::swap(&mut self.in_handle, &mut self.out_handle); + self + } + + pub fn has_in_handle(&self) -> bool { + self.in_handle.map(|handle| Self::has_handle(self.anchor, handle)).unwrap_or(false) + } + + pub fn has_out_handle(&self) -> bool { + self.out_handle.map(|handle| Self::has_handle(self.anchor, handle)).unwrap_or(false) + } + + fn has_handle(anchor: DVec2, handle: DVec2) -> bool { + !((handle.x - anchor.x).abs() < f64::EPSILON && (handle.y - anchor.y).abs() < f64::EPSILON) + } +} + +#[derive(Copy, Clone)] +pub enum AppendType { + IgnoreStart, + SmoothJoin(f64), +} + +#[derive(Copy, Clone, Eq, PartialEq, Hash)] +pub enum ArcType { + Open, + Closed, + PieSlice, +} + +/// Representation of the handle point(s) in a bezier segment. +#[derive(Copy, Clone, PartialEq, Debug)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub enum BezierHandles { + Linear, + /// Handles for a quadratic curve. + Quadratic { + /// Point representing the location of the single handle. + handle: DVec2, + }, + /// Handles for a cubic curve. + Cubic { + /// Point representing the location of the handle associated to the start point. + handle_start: DVec2, + /// Point representing the location of the handle associated to the end point. + handle_end: DVec2, + }, +} + +impl std::hash::Hash for BezierHandles { + fn hash(&self, state: &mut H) { + std::mem::discriminant(self).hash(state); + match self { + BezierHandles::Linear => {} + BezierHandles::Quadratic { handle } => handle.to_array().map(|v| v.to_bits()).hash(state), + BezierHandles::Cubic { handle_start, handle_end } => [handle_start, handle_end].map(|handle| handle.to_array().map(|v| v.to_bits())).hash(state), + } + } +} + +impl BezierHandles { + pub fn is_cubic(&self) -> bool { + matches!(self, Self::Cubic { .. }) + } + + pub fn is_finite(&self) -> bool { + match self { + BezierHandles::Linear => true, + BezierHandles::Quadratic { handle } => handle.is_finite(), + BezierHandles::Cubic { handle_start, handle_end } => handle_start.is_finite() && handle_end.is_finite(), + } + } + + /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. + pub fn start(&self) -> Option { + match *self { + BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } => Some(handle_start), + _ => None, + } + } + + /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. + pub fn end(&self) -> Option { + match *self { + BezierHandles::Cubic { handle_end, .. } => Some(handle_end), + _ => None, + } + } + + pub fn move_start(&mut self, delta: DVec2) { + if let BezierHandles::Cubic { handle_start, .. } | BezierHandles::Quadratic { handle: handle_start } = self { + *handle_start += delta + } + } + + pub fn move_end(&mut self, delta: DVec2) { + if let BezierHandles::Cubic { handle_end, .. } = self { + *handle_end += delta + } + } + + /// Returns a Bezier curve that results from applying the transformation function to each handle point in the Bezier. + #[must_use] + pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Self { + match *self { + BezierHandles::Linear => Self::Linear, + BezierHandles::Quadratic { handle } => { + let handle = transformation_function(handle); + Self::Quadratic { handle } + } + BezierHandles::Cubic { handle_start, handle_end } => { + let handle_start = transformation_function(handle_start); + let handle_end = transformation_function(handle_end); + Self::Cubic { handle_start, handle_end } + } + } + } + + #[must_use] + pub fn reversed(self) -> Self { + match self { + BezierHandles::Cubic { handle_start, handle_end } => Self::Cubic { + handle_start: handle_end, + handle_end: handle_start, + }, + _ => self, + } + } +} + +/// Representation of a bezier curve with 2D points. +#[derive(Copy, Clone, PartialEq)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct Bezier { + /// Start point of the bezier curve. + pub start: DVec2, + /// End point of the bezier curve. + pub end: DVec2, + /// Handles of the bezier curve. + pub handles: BezierHandles, +} + +impl Debug for Bezier { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + let mut debug_struct = f.debug_struct("Bezier"); + let mut debug_struct_ref = debug_struct.field("start", &self.start); + debug_struct_ref = match self.handles { + BezierHandles::Linear => debug_struct_ref, + BezierHandles::Quadratic { handle } => debug_struct_ref.field("handle", &handle), + BezierHandles::Cubic { handle_start, handle_end } => debug_struct_ref.field("handle_start", &handle_start).field("handle_end", &handle_end), + }; + debug_struct_ref.field("end", &self.end).finish() + } +} + +/// Functionality for the getters and setters of the various points in a Bezier +impl Bezier { + /// Set the coordinates of the start point. + pub fn set_start(&mut self, s: DVec2) { + self.start = s; + } + + /// Set the coordinates of the end point. + pub fn set_end(&mut self, e: DVec2) { + self.end = e; + } + + /// Set the coordinates of the first handle point. This represents the only handle in a quadratic segment. If used on a linear segment, it will be changed to a quadratic. + pub fn set_handle_start(&mut self, h1: DVec2) { + match self.handles { + BezierHandles::Linear => { + self.handles = BezierHandles::Quadratic { handle: h1 }; + } + BezierHandles::Quadratic { ref mut handle } => { + *handle = h1; + } + BezierHandles::Cubic { ref mut handle_start, .. } => { + *handle_start = h1; + } + }; + } + + /// Set the coordinates of the second handle point. This will convert both linear and quadratic segments into cubic ones. For a linear segment, the first handle will be set to the start point. + pub fn set_handle_end(&mut self, h2: DVec2) { + match self.handles { + BezierHandles::Linear => { + self.handles = BezierHandles::Cubic { + handle_start: self.start, + handle_end: h2, + }; + } + BezierHandles::Quadratic { handle } => { + self.handles = BezierHandles::Cubic { handle_start: handle, handle_end: h2 }; + } + BezierHandles::Cubic { ref mut handle_end, .. } => { + *handle_end = h2; + } + }; + } + + /// Get the coordinates of the bezier segment's start point. + pub fn start(&self) -> DVec2 { + self.start + } + + /// Get the coordinates of the bezier segment's end point. + pub fn end(&self) -> DVec2 { + self.end + } + + /// Get the coordinates of the bezier segment's first handle point. This represents the only handle in a quadratic segment. + pub fn handle_start(&self) -> Option { + self.handles.start() + } + + /// Get the coordinates of the second handle point. This will return `None` for a quadratic segment. + pub fn handle_end(&self) -> Option { + self.handles.end() + } + + /// Get an iterator over the coordinates of all points in a vector. + /// - For a linear segment, the order of the points will be: `start`, `end`. + /// - For a quadratic segment, the order of the points will be: `start`, `handle`, `end`. + /// - For a cubic segment, the order of the points will be: `start`, `handle_start`, `handle_end`, `end`. + pub fn get_points(&self) -> impl Iterator + use<> { + match self.handles { + BezierHandles::Linear => [self.start, self.end, DVec2::ZERO, DVec2::ZERO].into_iter().take(2), + BezierHandles::Quadratic { handle } => [self.start, handle, self.end, DVec2::ZERO].into_iter().take(3), + BezierHandles::Cubic { handle_start, handle_end } => [self.start, handle_start, handle_end, self.end].into_iter().take(4), + } + } + + // TODO: Consider removing this function + /// Create a linear bezier using the provided coordinates as the start and end points. + pub fn from_linear_coordinates(x1: f64, y1: f64, x2: f64, y2: f64) -> Self { + Bezier { + start: DVec2::new(x1, y1), + handles: BezierHandles::Linear, + end: DVec2::new(x2, y2), + } + } + + /// Create a linear bezier using the provided DVec2s as the start and end points. + pub fn from_linear_dvec2(p1: DVec2, p2: DVec2) -> Self { + Bezier { + start: p1, + handles: BezierHandles::Linear, + end: p2, + } + } + + // TODO: Consider removing this function + /// Create a quadratic bezier using the provided coordinates as the start, handle, and end points. + pub fn from_quadratic_coordinates(x1: f64, y1: f64, x2: f64, y2: f64, x3: f64, y3: f64) -> Self { + Bezier { + start: DVec2::new(x1, y1), + handles: BezierHandles::Quadratic { handle: DVec2::new(x2, y2) }, + end: DVec2::new(x3, y3), + } + } + + /// Create a quadratic bezier using the provided DVec2s as the start, handle, and end points. + pub fn from_quadratic_dvec2(p1: DVec2, p2: DVec2, p3: DVec2) -> Self { + Bezier { + start: p1, + handles: BezierHandles::Quadratic { handle: p2 }, + end: p3, + } + } + + // TODO: Consider removing this function + /// Create a cubic bezier using the provided coordinates as the start, handles, and end points. + #[allow(clippy::too_many_arguments)] + pub fn from_cubic_coordinates(x1: f64, y1: f64, x2: f64, y2: f64, x3: f64, y3: f64, x4: f64, y4: f64) -> Self { + Bezier { + start: DVec2::new(x1, y1), + handles: BezierHandles::Cubic { + handle_start: DVec2::new(x2, y2), + handle_end: DVec2::new(x3, y3), + }, + end: DVec2::new(x4, y4), + } + } + + /// Create a cubic bezier using the provided DVec2s as the start, handles, and end points. + pub fn from_cubic_dvec2(p1: DVec2, p2: DVec2, p3: DVec2, p4: DVec2) -> Self { + Bezier { + start: p1, + handles: BezierHandles::Cubic { handle_start: p2, handle_end: p3 }, + end: p4, + } + } + + /// Returns a Bezier curve that results from applying the transformation function to each point in the Bezier. + pub fn apply_transformation(&self, transformation_function: impl Fn(DVec2) -> DVec2) -> Bezier { + Self { + start: transformation_function(self.start), + end: transformation_function(self.end), + handles: self.handles.apply_transformation(transformation_function), + } + } + + pub fn intersections(&self, other: &Bezier, accuracy: Option, minimum_separation: Option) -> Vec { + let this = handles_to_segment(self.start, self.handles, self.end); + let other = handles_to_segment(other.start, other.handles, other.end); + filtered_segment_intersections(this, other, accuracy, minimum_separation) + } + + pub fn winding(&self, point: DVec2) -> i32 { + let this = handles_to_segment(self.start, self.handles, self.end); + this.winding(dvec2_to_point(point)) + } +} diff --git a/node-graph/gcore/src/subpath/transform.rs b/node-graph/gcore/src/subpath/transform.rs new file mode 100644 index 0000000000..c4476a7388 --- /dev/null +++ b/node-graph/gcore/src/subpath/transform.rs @@ -0,0 +1,62 @@ +use super::structs::Identifier; +use super::*; +use glam::{DAffine2, DVec2}; + +/// Functionality that transforms Subpaths, such as split, reduce, offset, etc. +impl Subpath { + /// Returns [ManipulatorGroup]s with a reversed winding order. + fn reverse_manipulator_groups(manipulator_groups: &[ManipulatorGroup]) -> Vec> { + manipulator_groups + .iter() + .rev() + .map(|group| ManipulatorGroup { + anchor: group.anchor, + in_handle: group.out_handle, + out_handle: group.in_handle, + id: PointId::new(), + }) + .collect::>>() + } + + /// Returns a [Subpath] with a reversed winding order. + /// Note that a reversed closed subpath will start on the same manipulator group and simply wind the other direction + pub fn reverse(&self) -> Subpath { + let mut reversed = Subpath::reverse_manipulator_groups(self.manipulator_groups()); + if self.closed { + reversed.rotate_right(1); + }; + Subpath { + manipulator_groups: reversed, + closed: self.closed, + } + } + + /// Apply a transformation to all of the [ManipulatorGroup]s in the [Subpath]. + pub fn apply_transform(&mut self, affine_transform: DAffine2) { + for manipulator_group in &mut self.manipulator_groups { + manipulator_group.apply_transform(affine_transform); + } + } + + /// Returns a subpath that results from rotating this subpath around the origin by the given angle (in radians). + pub fn rotate(&self, angle: f64) -> Subpath { + let mut rotated_subpath = self.clone(); + + let affine_transform: DAffine2 = DAffine2::from_angle(angle); + rotated_subpath.apply_transform(affine_transform); + + rotated_subpath + } + + /// Returns a subpath that results from rotating this subpath around the provided point by the given angle (in radians). + pub fn rotate_about_point(&self, angle: f64, pivot: DVec2) -> Subpath { + // Translate before and after the rotation to account for the pivot + let translate: DAffine2 = DAffine2::from_translation(pivot); + let rotate: DAffine2 = DAffine2::from_angle(angle); + let translate_inverse = translate.inverse(); + + let mut rotated_subpath = self.clone(); + rotated_subpath.apply_transform(translate * rotate * translate_inverse); + rotated_subpath + } +} diff --git a/node-graph/gcore/src/table.rs b/node-graph/gcore/src/table.rs new file mode 100644 index 0000000000..32a2e680e0 --- /dev/null +++ b/node-graph/gcore/src/table.rs @@ -0,0 +1,338 @@ +use crate::bounds::{BoundingBox, RenderBoundingBox}; +use crate::transform::ApplyTransform; +use crate::uuid::NodeId; +use crate::Graphic; +use crate::{AlphaBlending, math::quad::Quad}; +use dyn_any::StaticType; +use glam::DAffine2; +use std::hash::Hash; + +pub type Mask = Option; + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +pub struct Table { + #[serde(alias = "instances", alias = "instance")] + element: Vec, + mask: Vec, + transform: Vec, + alpha_blending: Vec, + source_node_id: Vec>, +} + +impl Table { + pub fn new() -> Self { + Self::default() + } + + pub fn with_capacity(capacity: usize) -> Self { + Self { + element: Vec::with_capacity(capacity), + mask: Vec::with_capacity(capacity), + transform: Vec::with_capacity(capacity), + alpha_blending: Vec::with_capacity(capacity), + source_node_id: Vec::with_capacity(capacity), + } + } + + pub fn new_from_element(element: T) -> Self { + Self { + element: vec![element], + mask: vec![None], + transform: vec![DAffine2::IDENTITY], + alpha_blending: vec![AlphaBlending::default()], + source_node_id: vec![None], + } + } + + pub fn new_from_row(row: TableRow) -> Self { + Self { + element: vec![row.element], + mask: vec![row.mask], + transform: vec![row.transform], + alpha_blending: vec![row.alpha_blending], + source_node_id: vec![row.source_node_id], + } + } + + pub fn push(&mut self, row: TableRow) { + self.element.push(row.element); + self.mask.push(row.mask); + self.transform.push(row.transform); + self.alpha_blending.push(row.alpha_blending); + self.source_node_id.push(row.source_node_id); + } + + pub fn extend(&mut self, table: Table) { + self.element.extend(table.element); + self.mask.extend(table.mask); + self.transform.extend(table.transform); + self.alpha_blending.extend(table.alpha_blending); + self.source_node_id.extend(table.source_node_id); + } + + pub fn get(&self, index: usize) -> Option> { + if index >= self.element.len() { + return None; + } + + Some(TableRowRef { + element: &self.element[index], + mask: &self.mask[index], + transform: &self.transform[index], + alpha_blending: &self.alpha_blending[index], + source_node_id: &self.source_node_id[index], + }) + } + + pub fn get_mut(&mut self, index: usize) -> Option> { + if index >= self.element.len() { + return None; + } + + Some(TableRowMut { + element: &mut self.element[index], + mask: &mut self.mask[index], + transform: &mut self.transform[index], + alpha_blending: &mut self.alpha_blending[index], + source_node_id: &mut self.source_node_id[index], + }) + } + + pub fn len(&self) -> usize { + self.element.len() + } + + pub fn is_empty(&self) -> bool { + self.element.is_empty() + } + + /// Borrows a [`Table`] and returns an iterator of [`TableRowRef`]s, each containing references to the data of the respective row from the table. + pub fn iter(&self) -> impl DoubleEndedIterator> + Clone { + self.element + .iter() + .zip(self.mask.iter()) + .zip(self.transform.iter()) + .zip(self.alpha_blending.iter()) + .zip(self.source_node_id.iter()) + .map(|((((element, mask), transform), alpha_blending), source_node_id)| TableRowRef { + element, + mask, + transform, + alpha_blending, + source_node_id, + }) + } + + /// Mutably borrows a [`Table`] and returns an iterator of [`TableRowMut`]s, each containing mutable references to the data of the respective row from the table. + pub fn iter_mut(&mut self) -> impl DoubleEndedIterator> { + self.element + .iter_mut() + .zip(self.mask.iter_mut()) + .zip(self.transform.iter_mut()) + .zip(self.alpha_blending.iter_mut()) + .zip(self.source_node_id.iter_mut()) + .map(|((((element, mask), transform), alpha_blending), source_node_id)| TableRowMut { + element, + mask, + transform, + alpha_blending, + source_node_id, + }) + } +} + +impl BoundingBox for Table { + fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { + let mut combined_bounds = None; + + for row in self.iter() { + match row.element.bounding_box(transform * *row.transform, include_stroke) { + RenderBoundingBox::None => continue, + RenderBoundingBox::Infinite => return RenderBoundingBox::Infinite, + RenderBoundingBox::Rectangle(bounds) => match combined_bounds { + Some(existing) => combined_bounds = Some(Quad::combine_bounds(existing, bounds)), + None => combined_bounds = Some(bounds), + }, + } + } + + match combined_bounds { + Some(bounds) => RenderBoundingBox::Rectangle(bounds), + None => RenderBoundingBox::None, + } + } +} + +impl IntoIterator for Table { + type Item = TableRow; + type IntoIter = TableRowIter; + + /// Consumes a [`Table`] and returns an iterator of [`TableRow`]s, each containing the owned data of the respective row from the original table. + fn into_iter(self) -> Self::IntoIter { + TableRowIter { + element: self.element.into_iter(), + mask: self.mask.into_iter(), + transform: self.transform.into_iter(), + alpha_blending: self.alpha_blending.into_iter(), + source_node_id: self.source_node_id.into_iter(), + } + } +} + +pub struct TableRowIter { + element: std::vec::IntoIter, + mask: std::vec::IntoIter, + transform: std::vec::IntoIter, + alpha_blending: std::vec::IntoIter, + source_node_id: std::vec::IntoIter>, +} +impl Iterator for TableRowIter { + type Item = TableRow; + + fn next(&mut self) -> Option { + let element = self.element.next()?; + let mask = self.mask.next()?; + let transform = self.transform.next()?; + let alpha_blending = self.alpha_blending.next()?; + let source_node_id = self.source_node_id.next()?; + + Some(TableRow { + element, + mask, + transform, + alpha_blending, + source_node_id, + }) + } +} + +impl Default for Table { + fn default() -> Self { + Self { + element: Vec::new(), + mask: Vec::new(), + transform: Vec::new(), + alpha_blending: Vec::new(), + source_node_id: Vec::new(), + } + } +} + +impl Hash for Table { + fn hash(&self, state: &mut H) { + for element in &self.element { + element.hash(state); + } + } +} + +impl ApplyTransform for Table { + fn apply_transform(&mut self, modification: &DAffine2) { + for transform in &mut self.transform { + *transform *= *modification; + } + } + + fn left_apply_transform(&mut self, modification: &DAffine2) { + for transform in &mut self.transform { + *transform = *modification * *transform; + } + } +} + +impl PartialEq for Table { + fn eq(&self, other: &Self) -> bool { + self.element.len() == other.element.len() && { self.element.iter().zip(other.element.iter()).all(|(a, b)| a == b) } + } +} + +unsafe impl StaticType for Table { + type Static = Table; +} + +impl FromIterator> for Table { + fn from_iter>>(iter: I) -> Self { + let iter = iter.into_iter(); + let (lower, _) = iter.size_hint(); + let mut table = Self::with_capacity(lower); + for row in iter { + table.push(row); + } + table + } +} + +#[derive(Clone, Default, Debug, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct TableRow { + #[serde(alias = "instance")] + pub element: T, + pub mask: Mask, + pub transform: DAffine2, + pub alpha_blending: AlphaBlending, + pub source_node_id: Option, +} + +impl TableRow { + pub fn new_from_element(element: T) -> Self { + Self { + element, + mask: None, + transform: DAffine2::IDENTITY, + alpha_blending: AlphaBlending::default(), + source_node_id: None, + } + } + + pub fn as_ref(&self) -> TableRowRef<'_, T> { + TableRowRef { + element: &self.element, + mask: &self.mask, + transform: &self.transform, + alpha_blending: &self.alpha_blending, + source_node_id: &self.source_node_id, + } + } + + pub fn as_mut(&mut self) -> TableRowMut<'_, T> { + TableRowMut { + element: &mut self.element, + mask: &mut self.mask, + transform: &mut self.transform, + alpha_blending: &mut self.alpha_blending, + source_node_id: &mut self.source_node_id, + } + } +} + +#[derive(Copy, Clone, Debug, PartialEq)] +pub struct TableRowRef<'a, T> { + pub element: &'a T, + pub mask: &'a Mask, + pub transform: &'a DAffine2, + pub alpha_blending: &'a AlphaBlending, + pub source_node_id: &'a Option, +} + +impl TableRowRef<'_, T> { + pub fn into_cloned(self) -> TableRow + where + T: Clone, + { + TableRow { + element: self.element.clone(), + mask: self.mask.clone(), + transform: *self.transform, + alpha_blending: *self.alpha_blending, + source_node_id: *self.source_node_id, + } + } +} + +#[derive(Debug)] +pub struct TableRowMut<'a, T> { + pub element: &'a mut T, + pub mask: &'a mut Mask, + pub transform: &'a mut DAffine2, + pub alpha_blending: &'a mut AlphaBlending, + pub source_node_id: &'a mut Option, +} diff --git a/node-graph/gcore/src/text.rs b/node-graph/gcore/src/text.rs index 485cb2a884..3337a1488c 100644 --- a/node-graph/gcore/src/text.rs +++ b/node-graph/gcore/src/text.rs @@ -1,5 +1,31 @@ mod font_cache; mod to_path; +use dyn_any::DynAny; pub use font_cache::*; pub use to_path::*; + +/// Alignment of lines of type within a text block. +#[repr(C)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)] +#[widget(Radio)] +pub enum TextAlign { + #[default] + Left, + Center, + Right, + #[label("Justify")] + JustifyLeft, + // TODO: JustifyCenter, JustifyRight, JustifyAll +} + +impl From for parley::Alignment { + fn from(val: TextAlign) -> Self { + match val { + TextAlign::Left => parley::Alignment::Left, + TextAlign::Center => parley::Alignment::Middle, + TextAlign::Right => parley::Alignment::Right, + TextAlign::JustifyLeft => parley::Alignment::Justified, + } + } +} diff --git a/node-graph/gcore/src/text/to_path.rs b/node-graph/gcore/src/text/to_path.rs index 880a05fe8e..d1b9b6f188 100644 --- a/node-graph/gcore/src/text/to_path.rs +++ b/node-graph/gcore/src/text/to_path.rs @@ -1,10 +1,11 @@ -use crate::instances::Instance; -use crate::vector::{PointId, VectorData, VectorDataTable}; -use bezier_rs::{ManipulatorGroup, Subpath}; +use super::TextAlign; +use crate::subpath::{ManipulatorGroup, Subpath}; +use crate::table::{Table, TableRow}; +use crate::vector::{PointId, Vector}; use core::cell::RefCell; use glam::{DAffine2, DVec2}; use parley::fontique::Blob; -use parley::{Alignment, AlignmentOptions, FontContext, GlyphRun, Layout, LayoutContext, LineHeight, PositionedLayoutItem, StyleProperty}; +use parley::{AlignmentOptions, FontContext, GlyphRun, Layout, LayoutContext, LineHeight, PositionedLayoutItem, StyleProperty}; use skrifa::GlyphId; use skrifa::instance::{LocationRef, NormalizedCoord, Size}; use skrifa::outline::{DrawSettings, OutlinePen}; @@ -23,7 +24,7 @@ struct PathBuilder { current_subpath: Subpath, origin: DVec2, glyph_subpaths: Vec>, - vector_table: VectorDataTable, + vector_table: Table, scale: f64, id: PointId, } @@ -50,15 +51,15 @@ impl PathBuilder { } if per_glyph_instances { - self.vector_table.push(Instance { - instance: VectorData::from_subpaths(core::mem::take(&mut self.glyph_subpaths), false), + self.vector_table.push(TableRow { + element: Vector::from_subpaths(core::mem::take(&mut self.glyph_subpaths), false), transform: DAffine2::from_translation(glyph_offset), ..Default::default() }); } else { for subpath in self.glyph_subpaths.drain(..) { - // Unwrapping here is ok because `self.vector_table` is initialized with a single `VectorData` - self.vector_table.get_mut(0).unwrap().instance.append_subpath(subpath, false); + // Unwrapping here is ok because `self.vector_table` is initialized with a single `Vector` table element + self.vector_table.get_mut(0).unwrap().element.append_subpath(subpath, false); } } } @@ -103,6 +104,7 @@ pub struct TypesettingConfig { pub max_width: Option, pub max_height: Option, pub tilt: f64, + pub align: TextAlign, } impl Default for TypesettingConfig { @@ -114,6 +116,7 @@ impl Default for TypesettingConfig { max_width: None, max_height: None, tilt: 0., + align: TextAlign::default(), } } } @@ -197,24 +200,20 @@ fn layout_text(str: &str, font_data: Option>, typesetting: TypesettingC let mut layout: Layout<()> = builder.build(str); layout.break_all_lines(typesetting.max_width.map(|mw| mw as f32)); - layout.align(typesetting.max_width.map(|max_w| max_w as f32), Alignment::Left, AlignmentOptions::default()); + layout.align(typesetting.max_width.map(|max_w| max_w as f32), typesetting.align.into(), AlignmentOptions::default()); Some(layout) } -pub fn to_path(str: &str, font_data: Option>, typesetting: TypesettingConfig, per_glyph_instances: bool) -> VectorDataTable { +pub fn to_path(str: &str, font_data: Option>, typesetting: TypesettingConfig, per_glyph_instances: bool) -> Table { let Some(layout) = layout_text(str, font_data, typesetting) else { - return VectorDataTable::new(VectorData::default()); + return Table::new_from_element(Vector::default()); }; let mut path_builder = PathBuilder { current_subpath: Subpath::new(Vec::new(), false), glyph_subpaths: Vec::new(), - vector_table: if per_glyph_instances { - VectorDataTable::default() - } else { - VectorDataTable::new(VectorData::default()) - }, + vector_table: if per_glyph_instances { Table::new() } else { Table::new_from_element(Vector::default()) }, scale: layout.scale() as f64, id: PointId::ZERO, origin: DVec2::default(), @@ -229,7 +228,7 @@ pub fn to_path(str: &str, font_data: Option>, typesetting: TypesettingC } if path_builder.vector_table.is_empty() { - path_builder.vector_table = VectorDataTable::new(VectorData::default()); + path_builder.vector_table = Table::new_from_element(Vector::default()); } path_builder.vector_table diff --git a/node-graph/gcore/src/transform.rs b/node-graph/gcore/src/transform.rs index 4d5f5b5def..141fa69c6c 100644 --- a/node-graph/gcore/src/transform.rs +++ b/node-graph/gcore/src/transform.rs @@ -2,7 +2,7 @@ use crate::Artboard; use crate::math::bbox::AxisAlignedBbox; pub use crate::vector::ReferencePoint; use core::f64; -use glam::{DAffine2, DMat2, DVec2}; +use glam::{DAffine2, DMat2, DVec2, UVec2}; pub trait Transform { fn transform(&self) -> DAffine2; @@ -89,7 +89,7 @@ pub struct Footprint { /// Inverse of the transform which will be applied to the node output during the rendering process pub transform: DAffine2, /// Resolution of the target output area in pixels - pub resolution: glam::UVec2, + pub resolution: UVec2, /// Quality of the render, this may be used by caching nodes to decide if the cached render is sufficient pub quality: RenderQuality, } @@ -103,7 +103,7 @@ impl Default for Footprint { impl Footprint { pub const DEFAULT: Self = Self { transform: DAffine2::IDENTITY, - resolution: glam::UVec2::new(1920, 1080), + resolution: UVec2::new(1920, 1080), quality: RenderQuality::Full, }; @@ -112,7 +112,7 @@ impl Footprint { matrix2: DMat2::from_diagonal(DVec2::splat(f64::INFINITY)), translation: DVec2::ZERO, }, - resolution: glam::UVec2::new(0, 0), + resolution: UVec2::ZERO, quality: RenderQuality::Full, }; diff --git a/node-graph/gcore/src/transform_nodes.rs b/node-graph/gcore/src/transform_nodes.rs index fc9fd887a6..f6d7e8fcca 100644 --- a/node-graph/gcore/src/transform_nodes.rs +++ b/node-graph/gcore/src/transform_nodes.rs @@ -1,10 +1,12 @@ -use crate::instances::Instances; -use crate::raster_types::{CPU, GPU, RasterDataTable}; +use crate::gradient::GradientStops; +use crate::raster_types::{CPU, GPU, Raster}; +use crate::table::Table; use crate::transform::{ApplyTransform, Footprint, Transform}; -use crate::vector::VectorDataTable; -use crate::{CloneVarArgs, Context, Ctx, ExtractAll, GraphicGroupTable, OwnedContextImpl}; +use crate::vector::Vector; +use crate::{CloneVarArgs, Context, Ctx, ExtractAll, Graphic, OwnedContextImpl}; use core::f64; use glam::{DAffine2, DVec2}; +use graphene_core_shaders::color::Color; #[node_macro::node(category(""))] async fn transform( @@ -12,10 +14,12 @@ async fn transform( #[implementations( Context -> DAffine2, Context -> DVec2, - Context -> VectorDataTable, - Context -> GraphicGroupTable, - Context -> RasterDataTable, - Context -> RasterDataTable, + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table>, + Context -> Table, + Context -> Table, )] value: impl Node, Output = T>, translate: DVec2, @@ -43,10 +47,10 @@ async fn transform( #[node_macro::node(category(""))] fn replace_transform( _: impl Ctx, - #[implementations(VectorDataTable, RasterDataTable, GraphicGroupTable)] mut data: Instances, + #[implementations(Table, Table>, Table, Table, Table)] mut data: Table, #[implementations(DAffine2)] transform: TransformInput, -) -> Instances { - for data_transform in data.instance_mut_iter() { +) -> Table { + for data_transform in data.iter_mut() { *data_transform.transform = transform.transform(); } data @@ -56,14 +60,16 @@ fn replace_transform( async fn extract_transform( _: impl Ctx, #[implementations( - GraphicGroupTable, - VectorDataTable, - RasterDataTable, - RasterDataTable, + Table, + Table, + Table>, + Table>, + Table, + Table, )] - vector_data: Instances, + vector: Table, ) -> DAffine2 { - vector_data.instance_ref_iter().next().map(|vector_data| *vector_data.transform).unwrap_or_default() + vector.iter().next().map(|row| *row.transform).unwrap_or_default() } #[node_macro::node(category("Math: Transform"))] @@ -90,10 +96,12 @@ fn decompose_scale(_: impl Ctx, transform: DAffine2) -> DVec2 { async fn boundless_footprint( ctx: impl Ctx + CloneVarArgs + ExtractAll, #[implementations( - Context -> VectorDataTable, - Context -> GraphicGroupTable, - Context -> RasterDataTable, - Context -> RasterDataTable, + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table>, + Context -> Table, + Context -> Table, Context -> String, Context -> f64, )] @@ -108,10 +116,12 @@ async fn boundless_footprint( async fn freeze_real_time( ctx: impl Ctx + CloneVarArgs + ExtractAll, #[implementations( - Context -> VectorDataTable, - Context -> GraphicGroupTable, - Context -> RasterDataTable, - Context -> RasterDataTable, + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table>, + Context -> Table, + Context -> Table, Context -> String, Context -> f64, )] diff --git a/node-graph/gcore/src/types.rs b/node-graph/gcore/src/types.rs index 48ee2d804c..b95b869496 100644 --- a/node-graph/gcore/src/types.rs +++ b/node-graph/gcore/src/types.rs @@ -1,6 +1,7 @@ use std::any::TypeId; pub use std::borrow::Cow; +use std::fmt::{Display, Formatter}; use std::ops::Deref; #[macro_export] @@ -160,6 +161,12 @@ impl Deref for ProtoNodeIdentifier { } } +impl Display for ProtoNodeIdentifier { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.debug_tuple("ProtoNodeIdentifier").field(&self.name).finish() + } +} + fn migrate_type_descriptor_names<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { use serde::Deserialize; @@ -167,14 +174,21 @@ fn migrate_type_descriptor_names<'de, D: serde::Deserializer<'de>>(deserializer: let name = match name.as_str() { "f32" => "f64".to_string(), "graphene_core::transform::Footprint" => "std::option::Option>".to_string(), - "graphene_core::graphic_element::GraphicGroup" => "graphene_core::instances::Instances".to_string(), - "graphene_core::vector::vector_data::VectorData" => "graphene_core::instances::Instances".to_string(), + "graphene_core::graphic_element::GraphicGroup" => "graphene_core::table::Table".to_string(), "graphene_core::raster::image::ImageFrame" | "graphene_core::raster::image::ImageFrame" | "graphene_core::instances::Instances>" - | "graphene_core::instances::Instances>" => { - "graphene_core::instances::Instances>".to_string() + | "graphene_core::instances::Instances>" + | "graphene_core::instances::Instances>" => { + "graphene_core::table::Table>".to_string() } + "graphene_core::vector::vector_data::VectorData" + | "graphene_core::instances::Instances" + | "graphene_core::table::Table" + | "graphene_core::table::Table" => "graphene_core::table::Table".to_string(), + "graphene_core::instances::Instances" => "graphene_core::table::Table".to_string(), + "graphene_core::vector::vector_data::modification::VectorModification" => "graphene_core::vector::vector_modification::VectorModification".to_string(), + "graphene_core::table::Table" => "graphene_core::table::Table".to_string(), _ => name, }; @@ -223,7 +237,6 @@ pub enum Type { /// A wrapper around the Rust type id for any concrete Rust type. Allows us to do equality comparisons, like checking if a String == a String. Concrete(TypeDescriptor), /// Runtime type information for a function. Given some input, gives some output. - /// See the example and explanation in the `ComposeNode` implementation within the node registry for more info. Fn(Box, Box), /// Represents a future which promises to return the inner type. Future(Box), @@ -360,7 +373,7 @@ impl std::fmt::Debug for Type { Self::Future(ty) => format!("{ty:?}"), }; let result = result.replace("Option>", "Context"); - write!(f, "{}", result) + write!(f, "{result}") } } @@ -373,6 +386,6 @@ impl std::fmt::Display for Type { Type::Future(ty) => ty.to_string(), }; let result = result.replace("Option>", "Context"); - write!(f, "{}", result) + write!(f, "{result}") } } diff --git a/node-graph/gcore/src/value.rs b/node-graph/gcore/src/value.rs index 3c3ff94c74..3cf1c0f6a6 100644 --- a/node-graph/gcore/src/value.rs +++ b/node-graph/gcore/src/value.rs @@ -60,8 +60,7 @@ impl<'i, T: 'i> Node<'i, ()> for RefCellMutNode { type Output = RefMut<'i, T>; #[inline(always)] fn eval(&'i self, _input: ()) -> Self::Output { - let a = self.0.borrow_mut(); - a + self.0.borrow_mut() } } @@ -120,7 +119,6 @@ impl<'i, T: Clone + 'i> Node<'i, ()> for DebugClonedNode { type Output = T; #[inline(always)] fn eval(&'i self, _input: ()) -> Self::Output { - #[cfg(not(target_arch = "spirv"))] // KEEP THIS `debug!()` - It acts as the output for the debug node itself log::debug!("DebugClonedNode::eval"); diff --git a/node-graph/gcore/src/vector/algorithms/bezpath_algorithms.rs b/node-graph/gcore/src/vector/algorithms/bezpath_algorithms.rs index 109ef31e8a..a0723b3434 100644 --- a/node-graph/gcore/src/vector/algorithms/bezpath_algorithms.rs +++ b/node-graph/gcore/src/vector/algorithms/bezpath_algorithms.rs @@ -1,18 +1,22 @@ +use super::intersection::bezpath_intersections; use super::poisson_disk::poisson_disk_sample; +use super::util::pathseg_tangent; +use crate::math::polynomial::pathseg_to_parametric_polynomial; use crate::vector::algorithms::offset_subpath::MAX_ABSOLUTE_DIFFERENCE; -use crate::vector::misc::{PointSpacingType, dvec2_to_point}; -use glam::DVec2; -use kurbo::{BezPath, CubicBez, DEFAULT_ACCURACY, Line, ParamCurve, ParamCurveDeriv, PathEl, PathSeg, Point, QuadBez, Rect, Shape}; +use crate::vector::misc::{PointSpacingType, dvec2_to_point, point_to_dvec2}; +use glam::{DMat2, DVec2}; +use kurbo::common::{solve_cubic, solve_quadratic}; +use kurbo::{BezPath, CubicBez, DEFAULT_ACCURACY, Line, ParamCurve, ParamCurveDeriv, PathEl, PathSeg, Point, QuadBez, Rect, Shape, Vec2}; +use std::f64::consts::{FRAC_PI_2, PI}; -/// Splits the [`BezPath`] at `t` value which lie in the range of [0, 1]. +/// Splits the [`BezPath`] at segment index at `t` value which lie in the range of [0, 1]. /// Returns [`None`] if the given [`BezPath`] has no segments or `t` is within f64::EPSILON of 0 or 1. -pub fn split_bezpath(bezpath: &BezPath, t: f64, euclidian: bool) -> Option<(BezPath, BezPath)> { +pub fn split_bezpath_at_segment(bezpath: &BezPath, segment_index: usize, t: f64) -> Option<(BezPath, BezPath)> { if t <= f64::EPSILON || (1. - t) <= f64::EPSILON || bezpath.segments().count() == 0 { return None; } // Get the segment which lies at the split. - let (segment_index, t) = t_value_to_parametric(bezpath, t, euclidian, None); let segment = bezpath.get_seg(segment_index + 1).unwrap(); // Divide the segment. @@ -53,14 +57,27 @@ pub fn split_bezpath(bezpath: &BezPath, t: f64, euclidian: bool) -> Option<(BezP Some((first_bezpath, second_bezpath)) } -pub fn position_on_bezpath(bezpath: &BezPath, t: f64, euclidian: bool, segments_length: Option<&[f64]>) -> Point { - let (segment_index, t) = t_value_to_parametric(bezpath, t, euclidian, segments_length); +/// Splits the [`BezPath`] at a `t` value which lies in the range of [0, 1]. +/// Returns [`None`] if the given [`BezPath`] has no segments. +pub fn split_bezpath(bezpath: &BezPath, t_value: TValue) -> Option<(BezPath, BezPath)> { + if bezpath.segments().count() == 0 { + return None; + } + + // Get the segment which lies at the split. + let (segment_index, t) = eval_bezpath(bezpath, t_value, None); + split_bezpath_at_segment(bezpath, segment_index, t) +} + +pub fn evaluate_bezpath(bezpath: &BezPath, t_value: TValue, segments_length: Option<&[f64]>) -> Point { + let (segment_index, t) = eval_bezpath(bezpath, t_value, segments_length); bezpath.get_seg(segment_index + 1).unwrap().eval(t) } -pub fn tangent_on_bezpath(bezpath: &BezPath, t: f64, euclidian: bool, segments_length: Option<&[f64]>) -> Point { - let (segment_index, t) = t_value_to_parametric(bezpath, t, euclidian, segments_length); +pub fn tangent_on_bezpath(bezpath: &BezPath, t_value: TValue, segments_length: Option<&[f64]>) -> Point { + let (segment_index, t) = eval_bezpath(bezpath, t_value, segments_length); let segment = bezpath.get_seg(segment_index + 1).unwrap(); + match segment { PathSeg::Line(line) => line.deriv().eval(t), PathSeg::Quad(quad_bez) => quad_bez.deriv().eval(t), @@ -166,23 +183,173 @@ pub fn sample_polyline_on_bezpath( Some(sample_bezpath) } -pub fn t_value_to_parametric(bezpath: &BezPath, t: f64, euclidian: bool, segments_length: Option<&[f64]>) -> (usize, f64) { - if euclidian { - let (segment_index, t) = bezpath_t_value_to_parametric(bezpath, BezPathTValue::GlobalEuclidean(t), segments_length); - let segment = bezpath.get_seg(segment_index + 1).unwrap(); - return (segment_index, eval_pathseg_euclidean(segment, t, DEFAULT_ACCURACY)); +#[derive(Debug, Clone, Copy)] +pub enum TValue { + Parametric(f64), + Euclidean(f64), +} + +/// Default LUT step size in `compute_lookup_table` function. +pub const DEFAULT_LUT_STEP_SIZE: usize = 10; + +/// Return a selection of equidistant points on the bezier curve. +/// If no value is provided for `steps`, then the function will default `steps` to be 10. +pub fn pathseg_compute_lookup_table(segment: PathSeg, steps: Option, eucliean: bool) -> impl Iterator { + let steps = steps.unwrap_or(DEFAULT_LUT_STEP_SIZE); + + (0..=steps).map(move |t| { + let tvalue = if eucliean { + TValue::Euclidean(t as f64 / steps as f64) + } else { + TValue::Parametric(t as f64 / steps as f64) + }; + let t = eval_pathseg(segment, tvalue); + point_to_dvec2(segment.eval(t)) + }) +} + +/// Returns an `Iterator` containing all possible parametric `t`-values at the given `x`-coordinate. +pub fn pathseg_find_tvalues_for_x(segment: PathSeg, x: f64) -> impl Iterator + use<> { + match segment { + PathSeg::Line(Line { p0, p1 }) => { + // If the transformed linear bezier is on the x-axis, `a` and `b` will both be zero and `solve_linear` will return no roots + let a = p1.x - p0.x; + let b = p0.x - x; + + // Find the roots of the linear equation `ax + b`. + // There exist roots when `a` is not 0 + if a.abs() > MAX_ABSOLUTE_DIFFERENCE { [Some(-b / a), None, None] } else { [None; 3] } + } + PathSeg::Quad(QuadBez { p0, p1, p2 }) => { + let a = p2.x - 2.0 * p1.x + p0.x; + let b = 2.0 * (p1.x - p0.x); + let c = p0.x - x; + let r = solve_quadratic(c, b, a); + [r.first().copied(), r.get(1).copied(), None] + } + PathSeg::Cubic(CubicBez { p0, p1, p2, p3 }) => { + let a = p3.x - 3.0 * p2.x + 3.0 * p1.x - p0.x; + let b = 3.0 * (p2.x - 2.0 * p1.x + p0.x); + let c = 3.0 * (p1.x - p0.x); + let d = p0.x - x; + let r = solve_cubic(d, c, b, a); + [r.first().copied(), r.get(1).copied(), r.get(2).copied()] + } + } + .into_iter() + .flatten() + .filter(|&t| (0.0..1.).contains(&t)) +} + +/// Find the `t`-value(s) such that the normal(s) at `t` pass through the specified point. +pub fn pathseg_normals_to_point(segment: PathSeg, point: Point) -> Vec { + // We solve deriv(t) dot (self(t) - point) = 0. + let (mut x, mut y) = pathseg_to_parametric_polynomial(segment); + let x = x.coefficients_mut(); + let y = y.coefficients_mut(); + x[0] -= point.x; + y[0] -= point.y; + let poly = poly_cool::Poly::new([ + x[0] * x[1] + y[0] * y[1], + x[1] * x[1] + y[1] * y[1] + 2. * (x[0] * x[2] + y[0] * y[2]), + 3. * (x[2] * x[1] + y[2] * y[1]) + 3. * (x[0] * x[3] + y[0] * y[3]), + 4. * (x[3] * x[1] + y[3] * y[1]) + 2. * (x[2] * x[2] + y[2] * y[2]), + 5. * (x[3] * x[2] + y[3] * y[2]), + 3. * (x[3] * x[3] + y[3] * y[3]), + ]); + poly.roots_between(0., 1., 1e-8).to_vec() +} + +/// Find the `t`-value(s) such that the tangent(s) at `t` pass through the given point. +pub fn pathseg_tangents_to_point(segment: PathSeg, point: Point) -> Vec { + segment.to_cubic().tangents_to_point(point).to_vec() +} + +/// Return the subsegment for the given [TValue] range. Returns None if parametric value of `t1` is greater than `t2`. +pub fn trim_pathseg(segment: PathSeg, t1: TValue, t2: TValue) -> Option { + let t1 = eval_pathseg(segment, t1); + let t2 = eval_pathseg(segment, t2); + + if t1 > t2 { None } else { Some(segment.subsegment(t1..t2)) } +} + +pub fn eval_pathseg(segment: PathSeg, t_value: TValue) -> f64 { + match t_value { + TValue::Parametric(t) => t, + TValue::Euclidean(t) => eval_pathseg_euclidean(segment, t, DEFAULT_ACCURACY), + } +} + +/// Return an approximation of the length centroid, together with the length, of the bezier curve. +/// +/// The length centroid is the center of mass for the arc length of the Bezier segment. +/// An infinitely thin wire forming the Bezier segment's shape would balance at this point. +/// +/// - `accuracy` is used to approximate the curve. +pub(crate) fn pathseg_length_centroid_and_length(segment: PathSeg, accuracy: Option) -> (Vec2, f64) { + match segment { + PathSeg::Line(line) => ((line.start().to_vec2() + line.end().to_vec2()) / 2., (line.start().to_vec2() - line.end().to_vec2()).length()), + PathSeg::Quad(quad_bez) => { + let QuadBez { p0, p1, p2 } = quad_bez; + // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles + fn recurse(a0: Vec2, a1: Vec2, a2: Vec2, accuracy: f64, level: u8) -> (f64, Vec2) { + let lower = (a2 - a1).length(); + let upper = (a1 - a0).length() + (a2 - a1).length(); + if upper - lower <= 2. * accuracy || level >= 8 { + let length = (lower + upper) / 2.; + return (length, length * (a0 + a1 + a2) / 3.); + } + + let b1 = 0.5 * (a0 + a1); + let c1 = 0.5 * (a1 + a2); + let b2 = 0.5 * (b1 + c1); + + let (length1, centroid_part1) = recurse(a0, b1, b2, 0.5 * accuracy, level + 1); + let (length2, centroid_part2) = recurse(b2, c1, a2, 0.5 * accuracy, level + 1); + (length1 + length2, centroid_part1 + centroid_part2) + } + + let (length, centroid_parts) = recurse(p0.to_vec2(), p1.to_vec2(), p2.to_vec2(), accuracy.unwrap_or_default(), 0); + (centroid_parts / length, length) + } + PathSeg::Cubic(cubic_bez) => { + let CubicBez { p0, p1, p2, p3 } = cubic_bez; + + // Use Casteljau subdivision, noting that the length is more than the straight line distance from start to end but less than the straight line distance through the handles + fn recurse(a0: Vec2, a1: Vec2, a2: Vec2, a3: Vec2, accuracy: f64, level: u8) -> (f64, Vec2) { + let lower = (a3 - a0).length(); + let upper = (a1 - a0).length() + (a2 - a1).length() + (a3 - a2).length(); + if upper - lower <= 2. * accuracy || level >= 8 { + let length = (lower + upper) / 2.; + return (length, length * (a0 + a1 + a2 + a3) / 4.); + } + + let b1 = 0.5 * (a0 + a1); + let t0 = 0.5 * (a1 + a2); + let c1 = 0.5 * (a2 + a3); + let b2 = 0.5 * (b1 + t0); + let c2 = 0.5 * (t0 + c1); + let b3 = 0.5 * (b2 + c2); + + let (length1, centroid_part1) = recurse(a0, b1, b2, b3, 0.5 * accuracy, level + 1); + let (length2, centroid_part2) = recurse(b3, c2, c1, a3, 0.5 * accuracy, level + 1); + (length1 + length2, centroid_part1 + centroid_part2) + } + + let (length, centroid_parts) = recurse(p0.to_vec2(), p1.to_vec2(), p2.to_vec2(), p3.to_vec2(), accuracy.unwrap_or_default(), 0); + (centroid_parts / length, length) + } } - bezpath_t_value_to_parametric(bezpath, BezPathTValue::GlobalParametric(t), segments_length) } /// Finds the t value of point on the given path segment i.e fractional distance along the segment's total length. /// It uses a binary search to find the value `t` such that the ratio `length_up_to_t / total_length` approximates the input `distance`. -pub fn eval_pathseg_euclidean(path_segment: PathSeg, distance: f64, accuracy: f64) -> f64 { +pub fn eval_pathseg_euclidean(segment: PathSeg, distance: f64, accuracy: f64) -> f64 { let mut low_t = 0.; let mut mid_t = 0.5; let mut high_t = 1.; - let total_length = path_segment.perimeter(accuracy); + let total_length = segment.perimeter(accuracy); if !total_length.is_finite() || total_length <= f64::EPSILON { return 0.; @@ -191,7 +358,7 @@ pub fn eval_pathseg_euclidean(path_segment: PathSeg, distance: f64, accuracy: f6 let distance = distance.clamp(0., 1.); while high_t - low_t > accuracy { - let current_length = path_segment.subsegment(0.0..mid_t).perimeter(accuracy); + let current_length = segment.subsegment(0.0..mid_t).perimeter(accuracy); let current_distance = current_length / total_length; if current_distance > distance { @@ -208,7 +375,7 @@ pub fn eval_pathseg_euclidean(path_segment: PathSeg, distance: f64, accuracy: f6 /// Converts from a bezpath (composed of multiple segments) to a point along a certain segment represented. /// The returned tuple represents the segment index and the `t` value along that segment. /// Both the input global `t` value and the output `t` value are in euclidean space, meaning there is a constant rate of change along the arc length. -fn global_euclidean_to_local_euclidean(bezpath: &BezPath, global_t: f64, lengths: &[f64], total_length: f64) -> (usize, f64) { +fn eval_bazpath_to_euclidean(bezpath: &BezPath, global_t: f64, lengths: &[f64], total_length: f64) -> (usize, f64) { let mut accumulator = 0.; for (index, length) in lengths.iter().enumerate() { let length_ratio = length / total_length; @@ -220,19 +387,14 @@ fn global_euclidean_to_local_euclidean(bezpath: &BezPath, global_t: f64, lengths (bezpath.segments().count() - 1, 1.) } -enum BezPathTValue { - GlobalEuclidean(f64), - GlobalParametric(f64), -} - -/// Convert a [BezPathTValue] to a parametric `(segment_index, t)` tuple. -/// - Asserts that `t` values contained within the `SubpathTValue` argument lie in the range [0, 1]. -fn bezpath_t_value_to_parametric(bezpath: &BezPath, t: BezPathTValue, precomputed_segments_length: Option<&[f64]>) -> (usize, f64) { +/// Convert a [TValue] to a parametric `(segment_index, t)` tuple. +/// - Asserts that `t` values contained within the `TValue` argument lie in the range [0, 1]. +fn eval_bezpath(bezpath: &BezPath, t: TValue, precomputed_segments_length: Option<&[f64]>) -> (usize, f64) { let segment_count = bezpath.segments().count(); assert!(segment_count >= 1); match t { - BezPathTValue::GlobalEuclidean(t) => { + TValue::Euclidean(t) => { let computed_segments_length; let segments_length = if let Some(segments_length) = precomputed_segments_length { @@ -244,16 +406,18 @@ fn bezpath_t_value_to_parametric(bezpath: &BezPath, t: BezPathTValue, precompute let total_length = segments_length.iter().sum(); - global_euclidean_to_local_euclidean(bezpath, t, segments_length, total_length) + let (segment_index, t) = eval_bazpath_to_euclidean(bezpath, t, segments_length, total_length); + let segment = bezpath.get_seg(segment_index + 1).unwrap(); + (segment_index, eval_pathseg_euclidean(segment, t, DEFAULT_ACCURACY)) } - BezPathTValue::GlobalParametric(global_t) => { - assert!((0.0..=1.).contains(&global_t)); + TValue::Parametric(t) => { + assert!((0.0..=1.).contains(&t)); - if global_t == 1. { + if t == 1. { return (segment_count - 1, 1.); } - let scaled_t = global_t * segment_count as f64; + let scaled_t = t * segment_count as f64; let segment_index = scaled_t.floor() as usize; let t = scaled_t - segment_index as f64; @@ -328,3 +492,185 @@ pub fn is_linear(segment: &PathSeg) -> bool { PathSeg::Cubic(CubicBez { p0, p1, p2, p3 }) => is_colinear(p0, p1, p3) && is_colinear(p0, p2, p3), } } + +// TODO: If a segment curls back on itself tightly enough it could intersect again at the portion that should be trimmed. This could cause the Subpaths to be clipped +// TODO: at the incorrect location. This can be avoided by first trimming the two Subpaths at any extrema, effectively ignoring loopbacks. +/// Helper function to clip overlap of two intersecting open BezPaths. Returns an Option because intersections may not exist for certain arrangements and distances. +/// Assumes that the BezPaths represents simple Bezier segments, and clips the BezPaths at the last intersection of the first BezPath, and first intersection of the last BezPath. +pub fn clip_simple_bezpaths(bezpath1: &BezPath, bezpath2: &BezPath) -> Option<(BezPath, BezPath)> { + // Split the first subpath at its last intersection + let subpath_1_intersections = bezpath_intersections(bezpath1, bezpath2, None, None); + if subpath_1_intersections.is_empty() { + return None; + } + let (segment_index, t) = *subpath_1_intersections.last()?; + let (clipped_subpath1, _) = split_bezpath_at_segment(bezpath1, segment_index, t)?; + + // Split the second subpath at its first intersection + let subpath_2_intersections = bezpath_intersections(bezpath2, bezpath1, None, None); + if subpath_2_intersections.is_empty() { + return None; + } + let (segment_index, t) = subpath_2_intersections[0]; + let (_, clipped_subpath2) = split_bezpath_at_segment(bezpath2, segment_index, t)?; + + Some((clipped_subpath1, clipped_subpath2)) +} + +/// Returns the [`PathEl`] that is needed for a miter join if it is possible. +/// +/// `miter_limit` defines a limit for the ratio between the miter length and the stroke width. +/// Alternatively, this can be interpreted as limiting the angle that the miter can form. +/// When the limit is exceeded, no [`PathEl`] will be returned. +/// This value should be greater than 0. If not, the default of 4 will be used. +pub fn miter_line_join(bezpath1: &BezPath, bezpath2: &BezPath, miter_limit: Option) -> Option<[PathEl; 2]> { + let miter_limit = match miter_limit { + Some(miter_limit) if miter_limit > f64::EPSILON => miter_limit, + _ => 4., + }; + // TODO: Besides returning None using the `?` operator, is there a more appropriate way to handle a `None` result from `get_segment`? + let in_segment = bezpath1.segments().last()?; + let out_segment = bezpath2.segments().next()?; + + let in_tangent = pathseg_tangent(in_segment, 1.); + let out_tangent = pathseg_tangent(out_segment, 0.); + + if in_tangent == DVec2::ZERO || out_tangent == DVec2::ZERO { + // Avoid panic from normalizing zero vectors + // TODO: Besides returning None, is there a more appropriate way to handle this? + return None; + } + + let angle = (in_tangent * -1.).angle_to(out_tangent).abs(); + + if angle.to_degrees() < miter_limit { + return None; + } + + let p1 = in_segment.end(); + let p2 = point_to_dvec2(p1) + in_tangent.normalize(); + let line1 = Line::new(p1, dvec2_to_point(p2)); + + let p1 = out_segment.start(); + let p2 = point_to_dvec2(p1) + out_tangent.normalize(); + let line2 = Line::new(p1, dvec2_to_point(p2)); + + // If we don't find the intersection point to draw the miter join, we instead default to a bevel join. + // Otherwise, we return the element to create the join. + let intersection = line1.crossing_point(line2)?; + + Some([PathEl::LineTo(intersection), PathEl::LineTo(out_segment.start())]) +} + +/// Computes the [`PathEl`] to form a circular join from `left` to `right`, along a circle around `center`. +/// By default, the angle is assumed to be 180 degrees. +pub fn compute_circular_subpath_details(left: DVec2, arc_point: DVec2, right: DVec2, center: DVec2, angle: Option) -> [PathEl; 2] { + let center_to_arc_point = arc_point - center; + + // Based on https://pomax.github.io/bezierinfo/#circles_cubic + let handle_offset_factor = if let Some(angle) = angle { 4. / 3. * (angle / 4.).tan() } else { 0.551784777779014 }; + + let p1 = dvec2_to_point(left - (left - center).perp() * handle_offset_factor); + let p2 = dvec2_to_point(arc_point + center_to_arc_point.perp() * handle_offset_factor); + let p3 = dvec2_to_point(arc_point); + + let first_half = PathEl::CurveTo(p1, p2, p3); + + let p1 = dvec2_to_point(arc_point - center_to_arc_point.perp() * handle_offset_factor); + let p2 = dvec2_to_point(right + (right - center).perp() * handle_offset_factor); + let p3 = dvec2_to_point(right); + + let second_half = PathEl::CurveTo(p1, p2, p3); + + [first_half, second_half] +} + +/// Returns two [`PathEl`] to create a round join with the provided center. +pub fn round_line_join(bezpath1: &BezPath, bezpath2: &BezPath, center: DVec2) -> [PathEl; 2] { + let left = point_to_dvec2(bezpath1.segments().last().unwrap().end()); + let right = point_to_dvec2(bezpath2.segments().next().unwrap().start()); + + let center_to_right = right - center; + let center_to_left = left - center; + + let in_segment = bezpath1.segments().last(); + let in_tangent = in_segment.map(|in_segment| pathseg_tangent(in_segment, 1.)); + + let mut angle = center_to_right.angle_to(center_to_left) / 2.; + let mut arc_point = center + DMat2::from_angle(angle).mul_vec2(center_to_right); + + if in_tangent.map(|in_tangent| (arc_point - left).angle_to(in_tangent).abs()).unwrap_or_default() > FRAC_PI_2 { + angle = angle - PI * (if angle < 0. { -1. } else { 1. }); + arc_point = center + DMat2::from_angle(angle).mul_vec2(center_to_right); + } + + compute_circular_subpath_details(left, arc_point, right, center, Some(angle)) +} + +/// Returns `true` if the `bezpath1` is completely inside the `bezpath2`. +/// NOTE: `bezpath2` must be a closed path to get correct results. +pub fn bezpath_is_inside_bezpath(bezpath1: &BezPath, bezpath2: &BezPath, accuracy: Option, minimum_separation: Option) -> bool { + // Eliminate any possibility of one being inside the other, if either of them are empty + if bezpath1.is_empty() || bezpath2.is_empty() { + return false; + } + + let inner_bbox = bezpath1.bounding_box(); + let outer_bbox = bezpath2.bounding_box(); + + // Eliminate bezpath1 if its bounding box is not completely inside the bezpath2's bounding box. + // Reasoning: + // If the inner bezpath bounding box is larger than the outer bezpath bounding box in any direction + // then the inner bezpath is intersecting with or outside the outer bezpath. + if !outer_bbox.contains_rect(inner_bbox) && outer_bbox.intersect(inner_bbox).is_zero_area() { + return false; + } + + // Eliminate bezpath1 if any of its anchor points are outside the bezpath2. + if !bezpath1.elements().iter().filter_map(|el| el.end_point()).all(|point| bezpath2.contains(point)) { + return false; + } + + // Eliminate this subpath if it intersects with the other subpath. + if !bezpath_intersections(bezpath1, bezpath2, accuracy, minimum_separation).is_empty() { + return false; + } + + // At this point: + // (1) This subpath's bounding box is inside the other subpath's bounding box, + // (2) Its anchors are inside the other subpath, and + // (3) It is not intersecting with the other subpath. + // Hence, this subpath is completely inside the given other subpath. + true +} + +#[cfg(test)] +mod tests { + // TODO: add more intersection tests + + use super::bezpath_is_inside_bezpath; + use kurbo::{BezPath, DEFAULT_ACCURACY, Line, Point, Rect, Shape}; + + #[test] + fn is_inside_subpath() { + let boundary_polygon = Rect::new(100., 100., 500., 500.).to_path(DEFAULT_ACCURACY); + + let mut curve_intersection = BezPath::new(); + curve_intersection.move_to(Point::new(189., 289.)); + curve_intersection.quad_to(Point::new(9., 286.), Point::new(45., 410.)); + assert!(!bezpath_is_inside_bezpath(&curve_intersection, &boundary_polygon, None, None)); + + let mut curve_outside = BezPath::new(); + curve_outside.move_to(Point::new(115., 37.)); + curve_outside.quad_to(Point::new(51.4, 91.8), Point::new(76.5, 242.)); + assert!(!bezpath_is_inside_bezpath(&curve_outside, &boundary_polygon, None, None)); + + let mut curve_inside = BezPath::new(); + curve_inside.move_to(Point::new(210.1, 133.5)); + curve_inside.curve_to(Point::new(150.2, 436.9), Point::new(436., 285.), Point::new(247.6, 240.7)); + assert!(bezpath_is_inside_bezpath(&curve_inside, &boundary_polygon, None, None)); + + let line_inside = Line::new(Point::new(101., 101.5), Point::new(150.2, 499.)).to_path(DEFAULT_ACCURACY); + assert!(bezpath_is_inside_bezpath(&line_inside, &boundary_polygon, None, None)); + } +} diff --git a/node-graph/gcore/src/vector/algorithms/contants.rs b/node-graph/gcore/src/vector/algorithms/contants.rs new file mode 100644 index 0000000000..021e49be22 --- /dev/null +++ b/node-graph/gcore/src/vector/algorithms/contants.rs @@ -0,0 +1,6 @@ +/// Minimum allowable separation between adjacent `t` values when calculating curve intersections +pub const MIN_SEPARATION_VALUE: f64 = 5. * 1e-3; + +/// Constant used to determine if `f64`s are equivalent. +#[cfg(test)] +pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; diff --git a/node-graph/gcore/src/vector/algorithms/instance.rs b/node-graph/gcore/src/vector/algorithms/instance.rs index 2dd23150d2..54c9db0f17 100644 --- a/node-graph/gcore/src/vector/algorithms/instance.rs +++ b/node-graph/gcore/src/vector/algorithms/instance.rs @@ -1,33 +1,37 @@ -use crate::instances::{InstanceRef, Instances}; -use crate::raster_types::{CPU, RasterDataTable}; -use crate::vector::VectorDataTable; -use crate::{CloneVarArgs, Context, Ctx, ExtractAll, ExtractIndex, ExtractVarArgs, GraphicElement, GraphicGroupTable, OwnedContextImpl}; +use crate::gradient::GradientStops; +use crate::raster_types::{CPU, Raster}; +use crate::table::{Table, TableRowRef}; +use crate::vector::Vector; +use crate::{CloneVarArgs, Context, Ctx, ExtractAll, ExtractIndex, ExtractVarArgs, Graphic, OwnedContextImpl}; use glam::DVec2; +use graphene_core_shaders::color::Color; #[node_macro::node(name("Instance on Points"), category("Instancing"), path(graphene_core::vector))] -async fn instance_on_points + Default + Send + Clone + 'static>( +async fn instance_on_points + Default + Send + Clone + 'static>( ctx: impl ExtractAll + CloneVarArgs + Sync + Ctx, - points: VectorDataTable, + points: Table, #[implementations( - Context -> GraphicGroupTable, - Context -> VectorDataTable, - Context -> RasterDataTable + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table, + Context -> Table, )] - instance: impl Node<'n, Context<'static>, Output = Instances>, + instance: impl Node<'n, Context<'static>, Output = Table>, reverse: bool, -) -> Instances { - let mut result_table = Instances::::default(); +) -> Table { + let mut result_table = Table::new(); - for InstanceRef { instance: points, transform, .. } in points.instance_ref_iter() { + for TableRowRef { element: points, transform, .. } in points.iter() { let mut iteration = async |index, point| { let transformed_point = transform.transform_point2(point); let new_ctx = OwnedContextImpl::from(ctx.clone()).with_index(index).with_vararg(Box::new(transformed_point)); let generated_instance = instance.eval(new_ctx.into_context()).await; - for mut instanced in generated_instance.instance_iter() { - instanced.transform.translation = transformed_point; - result_table.push(instanced); + for mut generated_row in generated_instance.into_iter() { + generated_row.transform.translation = transformed_point; + result_table.push(generated_row); } }; @@ -47,20 +51,22 @@ async fn instance_on_points + Default + Send + Clone + ' } #[node_macro::node(category("Instancing"), path(graphene_core::vector))] -async fn instance_repeat + Default + Send + Clone + 'static>( +async fn instance_repeat + Default + Send + Clone + 'static>( ctx: impl ExtractAll + CloneVarArgs + Ctx, #[implementations( - Context -> GraphicGroupTable, - Context -> VectorDataTable, - Context -> RasterDataTable + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table, + Context -> Table, )] - instance: impl Node<'n, Context<'static>, Output = Instances>, + instance: impl Node<'n, Context<'static>, Output = Table>, #[default(1)] count: u64, reverse: bool, -) -> Instances { +) -> Table { let count = count.max(1) as usize; - let mut result_table = Instances::::default(); + let mut result_table = Table::new(); for index in 0..count { let index = if reverse { count - index - 1 } else { index }; @@ -68,8 +74,8 @@ async fn instance_repeat + Default + Send + Clone + 'sta let new_ctx = OwnedContextImpl::from(ctx.clone()).with_index(index); let generated_instance = instance.eval(new_ctx.into_context()).await; - for instanced in generated_instance.instance_iter() { - result_table.push(instanced); + for generated_row in generated_instance.into_iter() { + result_table.push(generated_row); } } @@ -99,8 +105,8 @@ mod test { use super::*; use crate::Node; use crate::extract_xy::{ExtractXyNode, XY}; - use crate::vector::VectorData; - use bezier_rs::Subpath; + use crate::subpath::Subpath; + use crate::vector::Vector; use glam::DVec2; use std::pin::Pin; @@ -128,11 +134,11 @@ mod test { ); let positions = [DVec2::new(40., 20.), DVec2::ONE, DVec2::new(-42., 9.), DVec2::new(10., 345.)]; - let points = VectorDataTable::new(VectorData::from_subpath(Subpath::from_anchors_linear(positions, false))); - let repeated = super::instance_on_points(owned, points, &rect, false).await; - assert_eq!(repeated.len(), positions.len()); - for (position, instanced) in positions.into_iter().zip(repeated.instance_ref_iter()) { - let bounds = instanced.instance.bounding_box_with_transform(*instanced.transform).unwrap(); + let points = Table::new_from_element(Vector::from_subpath(Subpath::from_anchors_linear(positions, false))); + let generated = super::instance_on_points(owned, points, &rect, false).await; + assert_eq!(generated.len(), positions.len()); + for (position, generated_row) in positions.into_iter().zip(generated.iter()) { + let bounds = generated_row.element.bounding_box_with_transform(*generated_row.transform).unwrap(); assert!(position.abs_diff_eq((bounds[0] + bounds[1]) / 2., 1e-10)); assert_eq!((bounds[1] - bounds[0]).x, position.y); } diff --git a/node-graph/gcore/src/vector/algorithms/intersection.rs b/node-graph/gcore/src/vector/algorithms/intersection.rs new file mode 100644 index 0000000000..7a80e5cc60 --- /dev/null +++ b/node-graph/gcore/src/vector/algorithms/intersection.rs @@ -0,0 +1,496 @@ +use super::contants::MIN_SEPARATION_VALUE; +use kurbo::{BezPath, DEFAULT_ACCURACY, ParamCurve, PathSeg, Shape}; +use lyon_geom::{CubicBezierSegment, Point}; + +/// Converts a kurbo cubic bezier to a lyon_geom CubicBezierSegment +fn kurbo_cubic_to_lyon(cubic: kurbo::CubicBez) -> CubicBezierSegment { + CubicBezierSegment { + from: Point::new(cubic.p0.x, cubic.p0.y), + ctrl1: Point::new(cubic.p1.x, cubic.p1.y), + ctrl2: Point::new(cubic.p2.x, cubic.p2.y), + to: Point::new(cubic.p3.x, cubic.p3.y), + } +} + +/// Fast cubic-cubic intersection using lyon_geom's analytical approach +fn cubic_cubic_intersections_lyon(cubic1: kurbo::CubicBez, cubic2: kurbo::CubicBez) -> Vec<(f64, f64)> { + let lyon_cubic1 = kurbo_cubic_to_lyon(cubic1); + let lyon_cubic2 = kurbo_cubic_to_lyon(cubic2); + + lyon_cubic1.cubic_intersections_t(&lyon_cubic2).to_vec() +} + +/// Calculates the intersection points the bezpath has with a given segment and returns a list of `(usize, f64)` tuples, +/// where the `usize` represents the index of the segment in the bezpath, and the `f64` represents the `t`-value local to +/// that segment where the intersection occurred. +/// +/// `minimum_separation` is the minimum difference that two adjacent `t`-values must have when comparing adjacent `t`-values in sorted order. +pub fn bezpath_and_segment_intersections(bezpath: &BezPath, segment: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { + bezpath + .segments() + .enumerate() + .flat_map(|(index, this_segment)| { + filtered_segment_intersections(this_segment, segment, accuracy, minimum_separation) + .into_iter() + .map(|t| (index, t)) + .collect::>() + }) + .collect() +} + +/// Calculates the intersection points the bezpath has with another given bezpath and returns a list of parametric `t`-values. +pub fn bezpath_intersections(bezpath1: &BezPath, bezpath2: &BezPath, accuracy: Option, minimum_separation: Option) -> Vec<(usize, f64)> { + let mut intersection_t_values: Vec<(usize, f64)> = bezpath2 + .segments() + .flat_map(|bezier| bezpath_and_segment_intersections(bezpath1, bezier, accuracy, minimum_separation)) + .collect(); + + intersection_t_values.sort_by(|a, b| a.partial_cmp(b).unwrap()); + intersection_t_values +} + +/// Calculates the intersection points the segment has with another given segment and returns a list of parametric `t`-values with given accuracy. +pub fn segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option) -> Vec<(f64, f64)> { + let accuracy = accuracy.unwrap_or(DEFAULT_ACCURACY); + + match (segment1, segment2) { + (PathSeg::Line(line), segment2) => segment2.intersect_line(line).iter().map(|i| (i.line_t, i.segment_t)).collect(), + (segment1, PathSeg::Line(line)) => segment1.intersect_line(line).iter().map(|i| (i.segment_t, i.line_t)).collect(), + // Fast path for cubic-cubic intersections using lyon_geom + (PathSeg::Cubic(cubic1), PathSeg::Cubic(cubic2)) => cubic_cubic_intersections_lyon(cubic1, cubic2), + (segment1, segment2) => { + let mut intersections = Vec::new(); + segment_intersections_inner(segment1, 0., 1., segment2, 0., 1., accuracy, &mut intersections); + intersections + } + } +} + +pub fn subsegment_intersections(segment1: PathSeg, min_t1: f64, max_t1: f64, segment2: PathSeg, min_t2: f64, max_t2: f64, accuracy: Option) -> Vec<(f64, f64)> { + let accuracy = accuracy.unwrap_or(DEFAULT_ACCURACY); + + match (segment1, segment2) { + (PathSeg::Line(line), segment2) => segment2.intersect_line(line).iter().map(|i| (i.line_t, i.segment_t)).collect(), + (segment1, PathSeg::Line(line)) => segment1.intersect_line(line).iter().map(|i| (i.segment_t, i.line_t)).collect(), + // Fast path for cubic-cubic intersections using lyon_geom with subsegment parameters + (PathSeg::Cubic(cubic1), PathSeg::Cubic(cubic2)) => { + let sub_cubic1 = cubic1.subsegment(min_t1..max_t1); + let sub_cubic2 = cubic2.subsegment(min_t2..max_t2); + + cubic_cubic_intersections_lyon(sub_cubic1, sub_cubic2) + .into_iter() + // Convert subsegment t-values back to original segment t-values + .map(|(t1, t2)| { + let original_t1 = min_t1 + t1 * (max_t1 - min_t1); + let original_t2 = min_t2 + t2 * (max_t2 - min_t2); + (original_t1, original_t2) + }) + .collect() + } + (segment1, segment2) => { + let mut intersections = Vec::new(); + segment_intersections_inner(segment1, min_t1, max_t1, segment2, min_t2, max_t2, accuracy, &mut intersections); + intersections + } + } +} + +fn approx_bounding_box(path_seg: PathSeg) -> kurbo::Rect { + use kurbo::Rect; + match path_seg { + PathSeg::Line(line) => kurbo::Rect::from_points(line.p0, line.p1), + PathSeg::Quad(quad_bez) => { + let r1 = Rect::from_points(quad_bez.p0, quad_bez.p1); + let r2 = Rect::from_points(quad_bez.p1, quad_bez.p2); + r1.union(r2) + } + PathSeg::Cubic(cubic_bez) => { + let r1 = Rect::from_points(cubic_bez.p0, cubic_bez.p1); + let r2 = Rect::from_points(cubic_bez.p2, cubic_bez.p3); + r1.union(r2) + } + } +} + +/// Implements [https://pomax.github.io/bezierinfo/#curveintersection] to find intersection between two Bezier segments +/// by splitting the segment recursively until the size of the subsegment's bounding box is smaller than the accuracy. +#[allow(clippy::too_many_arguments)] +fn segment_intersections_inner(segment1: PathSeg, min_t1: f64, max_t1: f64, segment2: PathSeg, min_t2: f64, max_t2: f64, accuracy: f64, intersections: &mut Vec<(f64, f64)>) { + let bbox1 = approx_bounding_box(segment1.subsegment(min_t1..max_t1)); + let bbox2 = approx_bounding_box(segment2.subsegment(min_t2..max_t2)); + + if intersections.len() > 50 { + return; + } + + let mid_t1 = (min_t1 + max_t1) / 2.; + let mid_t2 = (min_t2 + max_t2) / 2.; + + // Check if the bounding boxes overlap + if bbox1.overlaps(bbox2) { + // If bounding boxes overlap and they are small enough, we have found an intersection + if bbox1.width().abs() < accuracy && bbox1.height().abs() < accuracy && bbox2.width().abs() < accuracy && bbox2.height().abs() < accuracy { + // Use the middle `t` value, append the corresponding `t` value + intersections.push((mid_t1, mid_t2)); + return; + } + + // Split curves in half + let (seg11, seg12) = segment1.subdivide(); + let (seg21, seg22) = segment2.subdivide(); + + // Repeat checking the intersection with the combinations of the two halves of each curve + segment_intersections_inner(seg11, min_t1, mid_t1, seg21, min_t2, mid_t2, accuracy, intersections); + segment_intersections_inner(seg11, min_t1, mid_t1, seg22, mid_t2, max_t2, accuracy, intersections); + segment_intersections_inner(seg12, mid_t1, max_t1, seg21, min_t2, mid_t2, accuracy, intersections); + segment_intersections_inner(seg12, mid_t1, max_t1, seg22, mid_t2, max_t2, accuracy, intersections); + } +} + +// TODO: Use an `impl Iterator` return type instead of a `Vec` +/// Returns a list of filtered parametric `t` values that correspond to intersection points between the current bezier segment and the provided one +/// such that the difference between adjacent `t` values in sorted order is greater than some minimum separation value. If the difference +/// between 2 adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. +/// The returned `t` values are with respect to the current bezier segment, not the provided parameter. +/// If the provided segment is linear, then zero intersection points will be returned along colinear segments. +/// +/// `accuracy` defines, for intersections where the provided bezier segment is non-linear, the maximum size of the bounding boxes to be considered an intersection point. +/// +/// `minimum_separation` is the minimum difference between adjacent `t` values in sorted order. +pub fn filtered_segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec { + let mut intersection_t_values = segment_intersections(segment1, segment2, accuracy); + intersection_t_values.sort_by(|a, b| a.partial_cmp(b).unwrap()); + + intersection_t_values.iter().map(|x| x.0).fold(Vec::new(), |mut accumulator, t| { + if !accumulator.is_empty() && (accumulator.last().unwrap() - t).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) { + accumulator.pop(); + } + accumulator.push(t); + accumulator + }) +} + +// TODO: Use an `impl Iterator` return type instead of a `Vec` +/// Returns a list of pairs of filtered parametric `t` values that correspond to intersection points between the current bezier curve and the provided +/// one such that the difference between adjacent `t` values in sorted order is greater than some minimum separation value. If the difference between +/// two adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. +/// The first value in pair is with respect to the current bezier and the second value in pair is with respect to the provided parameter. +/// If the provided curve is linear, then zero intersection points will be returned along colinear segments. +/// +/// `error`, for intersections where the provided bezier is non-linear, defines the threshold for bounding boxes to be considered an intersection point. +/// +/// `minimum_separation` is the minimum difference between adjacent `t` values in sorted order +pub fn filtered_all_segment_intersections(segment1: PathSeg, segment2: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(f64, f64)> { + let mut intersection_t_values = segment_intersections(segment1, segment2, accuracy); + intersection_t_values.sort_by(|a, b| (a.0 + a.1).partial_cmp(&(b.0 + b.1)).unwrap()); + + intersection_t_values.iter().fold(Vec::new(), |mut accumulator, t| { + if !accumulator.is_empty() + && (accumulator.last().unwrap().0 - t.0).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) + && (accumulator.last().unwrap().1 - t.1).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) + { + accumulator.pop(); + } + accumulator.push(*t); + accumulator + }) +} + +/// Helper function to compute intersections between lists of subcurves. +/// This function uses the algorithm implemented in `intersections_between_subcurves`. +fn intersections_between_vectors_of_path_segments(subcurves1: &[(f64, f64, PathSeg)], subcurves2: &[(f64, f64, PathSeg)], accuracy: Option) -> Vec<(f64, f64)> { + let segment_pairs = subcurves1.iter().flat_map(move |(t11, t12, curve1)| { + subcurves2 + .iter() + .filter_map(move |(t21, t22, curve2)| curve1.bounding_box().overlaps(curve2.bounding_box()).then_some((t11, t12, curve1, t21, t22, curve2))) + }); + + segment_pairs + .flat_map(|(&t11, &t12, &curve1, &t21, &t22, &curve2)| subsegment_intersections(curve1, t11, t12, curve2, t21, t22, accuracy)) + .collect::>() +} + +fn pathseg_self_intersection(segment: PathSeg, accuracy: Option) -> Vec<(f64, f64)> { + let cubic_bez = match segment { + PathSeg::Line(_) | PathSeg::Quad(_) => return vec![], + PathSeg::Cubic(cubic_bez) => cubic_bez, + }; + + // Get 2 copies of the reduced curves + let quads1 = cubic_bez.to_quads(DEFAULT_ACCURACY).map(|(t1, t2, quad_bez)| (t1, t2, PathSeg::Quad(quad_bez))).collect::>(); + let quads2 = quads1.clone(); + + let num_curves = quads1.len(); + + // Adjacent reduced curves cannot intersect + if num_curves <= 2 { + return vec![]; + } + + // For each curve, look for intersections with every curve that is at least 2 indices away + quads1 + .iter() + .take(num_curves - 2) + .enumerate() + .flat_map(|(index, &subsegment)| intersections_between_vectors_of_path_segments(&[subsegment], &quads2[index + 2..], accuracy)) + .collect() +} + +/// Returns a list of parametric `t` values that correspond to the self intersection points of the current bezier curve. For each intersection point, the returned `t` value is the smaller of the two that correspond to the point. +/// If the difference between 2 adjacent `t` values is less than the minimum difference, the filtering takes the larger `t` value and discards the smaller `t` value. +/// - `error` - For intersections with non-linear beziers, `error` defines the threshold for bounding boxes to be considered an intersection point. +/// - `minimum_separation` - The minimum difference between adjacent `t` values in sorted order +pub fn pathseg_self_intersections(segment: PathSeg, accuracy: Option, minimum_separation: Option) -> Vec<(f64, f64)> { + let mut intersection_t_values = pathseg_self_intersection(segment, accuracy); + intersection_t_values.sort_by(|a, b| (a.0 + a.1).partial_cmp(&(b.0 + b.1)).unwrap()); + + intersection_t_values.iter().fold(Vec::new(), |mut accumulator, t| { + if !accumulator.is_empty() + && (accumulator.last().unwrap().0 - t.0).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) + && (accumulator.last().unwrap().1 - t.1).abs() < minimum_separation.unwrap_or(MIN_SEPARATION_VALUE) + { + accumulator.pop(); + } + accumulator.push(*t); + accumulator + }) +} + +#[cfg(test)] +mod tests { + use super::{bezpath_and_segment_intersections, filtered_segment_intersections}; + use crate::vector::algorithms::{ + contants::MAX_ABSOLUTE_DIFFERENCE, + util::{compare_points, compare_vec_of_points, dvec2_compare}, + }; + + use kurbo::{BezPath, CubicBez, Line, ParamCurve, PathEl, PathSeg, Point, QuadBez}; + + #[test] + fn test_intersect_line_segment_quadratic() { + let p1 = Point::new(30., 50.); + let p2 = Point::new(140., 30.); + let p3 = Point::new(160., 170.); + + // Intersection at edge of curve + let bezier = PathSeg::Quad(QuadBez::new(p1, p2, p3)); + let line1 = PathSeg::Line(Line::new(Point::new(20., 50.), Point::new(40., 50.))); + let intersections1 = filtered_segment_intersections(bezier, line1, None, None); + assert!(intersections1.len() == 1); + assert!(compare_points(bezier.eval(intersections1[0]), p1)); + + // Intersection in the middle of curve + let line2 = PathSeg::Line(Line::new(Point::new(150., 150.), Point::new(30., 30.))); + let intersections2 = filtered_segment_intersections(bezier, line2, None, None); + assert!(compare_points(bezier.eval(intersections2[0]), Point::new(47.77355, 47.77354))); + } + + #[test] + fn test_intersect_curve_cubic_edge_case() { + // M34 107 C40 40 120 120 102 29 + + let p1 = Point::new(34., 107.); + let p2 = Point::new(40., 40.); + let p3 = Point::new(120., 120.); + let p4 = Point::new(102., 29.); + let cubic_segment = PathSeg::Cubic(CubicBez::new(p1, p2, p3, p4)); + + let linear_segment = PathSeg::Line(Line::new(Point::new(150., 150.), Point::new(20., 20.))); + let intersections = filtered_segment_intersections(cubic_segment, linear_segment, None, None); + + assert_eq!(intersections.len(), 1); + } + + #[test] + fn test_intersect_curve() { + let p0 = Point::new(30., 30.); + let p1 = Point::new(60., 140.); + let p2 = Point::new(150., 30.); + let p3 = Point::new(160., 160.); + + let cubic_segment = PathSeg::Cubic(CubicBez::new(p0, p1, p2, p3)); + + let p0 = Point::new(175., 140.); + let p1 = Point::new(20., 20.); + let p2 = Point::new(120., 20.); + + let quadratic_segment = PathSeg::Quad(QuadBez::new(p0, p1, p2)); + + let intersections1 = filtered_segment_intersections(cubic_segment, quadratic_segment, None, None); + let intersections2 = filtered_segment_intersections(quadratic_segment, cubic_segment, None, None); + + let intersections1_points: Vec = intersections1.iter().map(|&t| cubic_segment.eval(t)).collect(); + let intersections2_points: Vec = intersections2.iter().map(|&t| quadratic_segment.eval(t)).rev().collect(); + + assert!(compare_vec_of_points(intersections1_points, intersections2_points, 2.)); + } + + #[test] + fn intersection_linear_multiple_subpath_curves_test_one() { + // M 35 125 C 40 40 120 120 43 43 Q 175 90 145 150 Q 70 185 35 125 Z + + let cubic_start = Point::new(35., 125.); + let cubic_handle_1 = Point::new(40., 40.); + let cubic_handle_2 = Point::new(120., 120.); + let cubic_end = Point::new(43., 43.); + + let quadratic_1_handle = Point::new(175., 90.); + let quadratic_end = Point::new(145., 150.); + + let quadratic_2_handle = Point::new(70., 185.); + + let cubic_segment = PathSeg::Cubic(CubicBez::new(cubic_start, cubic_handle_1, cubic_handle_2, cubic_end)); + let quadratic_segment = PathSeg::Quad(QuadBez::new(cubic_end, quadratic_1_handle, quadratic_end)); + + let bezpath = BezPath::from_vec(vec![ + PathEl::MoveTo(cubic_start), + PathEl::CurveTo(cubic_handle_1, cubic_handle_2, cubic_end), + PathEl::QuadTo(quadratic_1_handle, quadratic_end), + PathEl::QuadTo(quadratic_2_handle, cubic_start), + PathEl::ClosePath, + ]); + + let linear_segment = PathSeg::Line(Line::new(Point::new(150., 150.), Point::new(20., 20.))); + + let cubic_intersections = filtered_segment_intersections(cubic_segment, linear_segment, None, None); + let quadratic_1_intersections = filtered_segment_intersections(quadratic_segment, linear_segment, None, None); + let bezpath_intersections = bezpath_and_segment_intersections(&bezpath, linear_segment, None, None); + + assert!( + dvec2_compare( + cubic_segment.eval(cubic_intersections[0]), + bezpath.segments().nth(bezpath_intersections[0].0).unwrap().eval(bezpath_intersections[0].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + + assert!( + dvec2_compare( + quadratic_segment.eval(quadratic_1_intersections[0]), + bezpath.segments().nth(bezpath_intersections[1].0).unwrap().eval(bezpath_intersections[1].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + + assert!( + dvec2_compare( + quadratic_segment.eval(quadratic_1_intersections[1]), + bezpath.segments().nth(bezpath_intersections[2].0).unwrap().eval(bezpath_intersections[2].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + } + + #[test] + fn intersection_linear_multiple_subpath_curves_test_two() { + // M34 107 C40 40 120 120 102 29 Q175 90 129 171 Q70 185 34 107 Z + // M150 150 L 20 20 + + let cubic_start = Point::new(34., 107.); + let cubic_handle_1 = Point::new(40., 40.); + let cubic_handle_2 = Point::new(120., 120.); + let cubic_end = Point::new(102., 29.); + + let quadratic_1_handle = Point::new(175., 90.); + let quadratic_end = Point::new(129., 171.); + + let quadratic_2_handle = Point::new(70., 185.); + + let cubic_segment = PathSeg::Cubic(CubicBez::new(cubic_start, cubic_handle_1, cubic_handle_2, cubic_end)); + let quadratic_segment = PathSeg::Quad(QuadBez::new(cubic_end, quadratic_1_handle, quadratic_end)); + + let bezpath = BezPath::from_vec(vec![ + PathEl::MoveTo(cubic_start), + PathEl::CurveTo(cubic_handle_1, cubic_handle_2, cubic_end), + PathEl::QuadTo(quadratic_1_handle, quadratic_end), + PathEl::QuadTo(quadratic_2_handle, cubic_start), + PathEl::ClosePath, + ]); + + let line = PathSeg::Line(Line::new(Point::new(150., 150.), Point::new(20., 20.))); + + let cubic_intersections = filtered_segment_intersections(cubic_segment, line, None, None); + let quadratic_1_intersections = filtered_segment_intersections(quadratic_segment, line, None, None); + let bezpath_intersections = bezpath_and_segment_intersections(&bezpath, line, None, None); + + assert!( + dvec2_compare( + cubic_segment.eval(cubic_intersections[0]), + bezpath.segments().nth(bezpath_intersections[0].0).unwrap().eval(bezpath_intersections[0].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + + assert!( + dvec2_compare( + quadratic_segment.eval(quadratic_1_intersections[0]), + bezpath.segments().nth(bezpath_intersections[1].0).unwrap().eval(bezpath_intersections[1].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + } + + #[test] + fn intersection_linear_multiple_subpath_curves_test_three() { + // M35 125 C40 40 120 120 44 44 Q175 90 145 150 Q70 185 35 125 Z + + let cubic_start = Point::new(35., 125.); + let cubic_handle_1 = Point::new(40., 40.); + let cubic_handle_2 = Point::new(120., 120.); + let cubic_end = Point::new(44., 44.); + + let quadratic_1_handle = Point::new(175., 90.); + let quadratic_end = Point::new(145., 150.); + + let quadratic_2_handle = Point::new(70., 185.); + + let cubic_segment = PathSeg::Cubic(CubicBez::new(cubic_start, cubic_handle_1, cubic_handle_2, cubic_end)); + let quadratic_segment = PathSeg::Quad(QuadBez::new(cubic_end, quadratic_1_handle, quadratic_end)); + + let bezpath = BezPath::from_vec(vec![ + PathEl::MoveTo(cubic_start), + PathEl::CurveTo(cubic_handle_1, cubic_handle_2, cubic_end), + PathEl::QuadTo(quadratic_1_handle, quadratic_end), + PathEl::QuadTo(quadratic_2_handle, cubic_start), + PathEl::ClosePath, + ]); + + let line = PathSeg::Line(Line::new(Point::new(150., 150.), Point::new(20., 20.))); + + let cubic_intersections = filtered_segment_intersections(cubic_segment, line, None, None); + let quadratic_1_intersections = filtered_segment_intersections(quadratic_segment, line, None, None); + let bezpath_intersections = bezpath_and_segment_intersections(&bezpath, line, None, None); + + assert!( + dvec2_compare( + cubic_segment.eval(cubic_intersections[0]), + bezpath.segments().nth(bezpath_intersections[0].0).unwrap().eval(bezpath_intersections[0].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + + assert!( + dvec2_compare( + quadratic_segment.eval(quadratic_1_intersections[0]), + bezpath.segments().nth(bezpath_intersections[1].0).unwrap().eval(bezpath_intersections[1].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + + assert!( + dvec2_compare( + quadratic_segment.eval(quadratic_1_intersections[1]), + bezpath.segments().nth(bezpath_intersections[2].0).unwrap().eval(bezpath_intersections[2].1), + MAX_ABSOLUTE_DIFFERENCE + ) + .all() + ); + } +} diff --git a/node-graph/gcore/src/vector/algorithms/merge_by_distance.rs b/node-graph/gcore/src/vector/algorithms/merge_by_distance.rs index 7cd5adc4c5..195cae25e4 100644 --- a/node-graph/gcore/src/vector/algorithms/merge_by_distance.rs +++ b/node-graph/gcore/src/vector/algorithms/merge_by_distance.rs @@ -1,6 +1,8 @@ -use crate::vector::{PointDomain, PointId, SegmentDomain, VectorData, VectorDataIndex}; +use crate::vector::{PointDomain, PointId, SegmentDomain, SegmentId, Vector}; use glam::{DAffine2, DVec2}; +use petgraph::graph::{EdgeIndex, NodeIndex, UnGraph}; use petgraph::prelude::UnGraphMap; +use rustc_hash::FxHashMap; use rustc_hash::FxHashSet; pub trait MergeByDistanceExt { @@ -9,10 +11,10 @@ pub trait MergeByDistanceExt { fn merge_by_distance_spatial(&mut self, transform: DAffine2, distance: f64); } -impl MergeByDistanceExt for VectorData { +impl MergeByDistanceExt for Vector { fn merge_by_distance_topological(&mut self, distance: f64) { // Treat self as an undirected graph - let indices = VectorDataIndex::build_from(self); + let indices = VectorIndex::build_from(self); // TODO: We lose information on the winding order by using an undirected graph. Switch to a directed graph and fix the algorithm to handle that. // Graph containing only short edges, referencing the data graph @@ -207,8 +209,94 @@ impl MergeByDistanceExt for VectorData { } } - // Create new vector data + // Create new vector geometry self.point_domain = new_point_domain; self.segment_domain = new_segment_domain; } } + +/// All the fixed fields of a point from the point domain. +pub(crate) struct Point { + pub id: PointId, + pub position: DVec2, +} + +/// Useful indexes to speed up various operations on [`Vector`]. +/// +/// Important: It is the user's responsibility to ensure the indexes remain valid after mutations to the data. +pub struct VectorIndex { + /// Points and segments form a graph. Store it here in a form amenable to graph algorithms. + /// + /// Currently, segment data is not stored as it is not used, but it could easily be added. + pub(crate) point_graph: UnGraph, + pub(crate) segment_to_edge: FxHashMap, + /// Get the offset from the point ID. + pub(crate) point_to_offset: FxHashMap, + // TODO: faces +} + +impl VectorIndex { + /// Construct a [`VectorIndex`] by building indexes from the given [`Vector`]. Takes `O(n)` time. + pub fn build_from(data: &Vector) -> Self { + let point_to_offset = data.point_domain.ids().iter().copied().enumerate().map(|(a, b)| (b, a)).collect::>(); + + let mut point_to_node = FxHashMap::default(); + let mut segment_to_edge = FxHashMap::default(); + + let mut graph = UnGraph::new_undirected(); + + for (point_id, position) in data.point_domain.iter() { + let idx = graph.add_node(Point { id: point_id, position }); + point_to_node.insert(point_id, idx); + } + + for (segment_id, start_offset, end_offset, ..) in data.segment_domain.iter() { + let start_id = data.point_domain.ids()[start_offset]; + let end_id = data.point_domain.ids()[end_offset]; + let edge = graph.add_edge(point_to_node[&start_id], point_to_node[&end_id], ()); + + segment_to_edge.insert(segment_id, edge); + } + + Self { + point_graph: graph, + segment_to_edge, + point_to_offset, + } + } + + /// Fetch the length of given segment's chord. Takes `O(1)` time. + /// + /// # Panics + /// + /// Will panic if no segment with the given ID is found. + pub fn segment_chord_length(&self, id: SegmentId) -> f64 { + let edge_idx = self.segment_to_edge[&id]; + let (start, end) = self.point_graph.edge_endpoints(edge_idx).unwrap(); + let start_position = self.point_graph.node_weight(start).unwrap().position; + let end_position = self.point_graph.node_weight(end).unwrap().position; + (start_position - end_position).length() + } + + /// Get the ends of a segment. Takes `O(1)` time. + /// + /// The IDs will be ordered [smallest, largest] so they can be used to find other segments with the same endpoints, regardless of direction. + /// + /// # Panics + /// + /// This function will panic if the ID is not present. + pub fn segment_ends(&self, id: SegmentId) -> [NodeIndex; 2] { + let (start, end) = self.point_graph.edge_endpoints(self.segment_to_edge[&id]).unwrap(); + if start < end { [start, end] } else { [end, start] } + } + + /// Get the physical location of a point. Takes `O(1)` time. + /// + /// # Panics + /// + /// Will panic if `id` isn't in the data. + pub fn point_position(&self, id: PointId, data: &Vector) -> DVec2 { + let offset = self.point_to_offset[&id]; + data.point_domain.positions()[offset] + } +} diff --git a/node-graph/gcore/src/vector/algorithms/mod.rs b/node-graph/gcore/src/vector/algorithms/mod.rs index ed44f25590..b9284f327d 100644 --- a/node-graph/gcore/src/vector/algorithms/mod.rs +++ b/node-graph/gcore/src/vector/algorithms/mod.rs @@ -1,6 +1,9 @@ pub mod bezpath_algorithms; +mod contants; pub mod instance; +pub mod intersection; pub mod merge_by_distance; pub mod offset_subpath; pub mod poisson_disk; pub mod spline; +pub mod util; diff --git a/node-graph/gcore/src/vector/algorithms/offset_subpath.rs b/node-graph/gcore/src/vector/algorithms/offset_subpath.rs index 2041ebdefa..776a06a1db 100644 --- a/node-graph/gcore/src/vector/algorithms/offset_subpath.rs +++ b/node-graph/gcore/src/vector/algorithms/offset_subpath.rs @@ -1,173 +1,137 @@ -use crate::vector::PointId; -use bezier_rs::{Bezier, BezierHandles, Join, Subpath, TValue}; +use super::bezpath_algorithms::{clip_simple_bezpaths, miter_line_join, round_line_join}; +use crate::vector::misc::point_to_dvec2; +use kurbo::{BezPath, Join, ParamCurve, PathEl, PathSeg}; /// Value to control smoothness and mathematical accuracy to offset a cubic Bezier. const CUBIC_REGULARIZATION_ACCURACY: f64 = 0.5; /// Accuracy of fitting offset curve to Bezier paths. const CUBIC_TO_BEZPATH_ACCURACY: f64 = 1e-3; /// Constant used to determine if `f64`s are equivalent. -pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-3; +pub const MAX_ABSOLUTE_DIFFERENCE: f64 = 1e-7; -fn segment_to_bezier(seg: kurbo::PathSeg) -> Bezier { - match seg { - kurbo::PathSeg::Line(line) => Bezier::from_linear_coordinates(line.p0.x, line.p0.y, line.p1.x, line.p1.y), - kurbo::PathSeg::Quad(quad_bez) => Bezier::from_quadratic_coordinates(quad_bez.p0.x, quad_bez.p0.y, quad_bez.p1.x, quad_bez.p1.y, quad_bez.p1.x, quad_bez.p1.y), - kurbo::PathSeg::Cubic(cubic_bez) => Bezier::from_cubic_coordinates( - cubic_bez.p0.x, - cubic_bez.p0.y, - cubic_bez.p1.x, - cubic_bez.p1.y, - cubic_bez.p2.x, - cubic_bez.p2.y, - cubic_bez.p3.x, - cubic_bez.p3.y, - ), - } -} - -// TODO: Replace the implementation to use only Kurbo API. -/// Reduces the segments of the subpath into simple subcurves, then offset each subcurve a set `distance` away. +/// Reduces the segments of the bezpath into simple subcurves, then offset each subcurve a set `distance` away. /// The intersections of segments of the subpath are joined using the method specified by the `join` argument. -pub fn offset_subpath(subpath: &Subpath, distance: f64, join: Join) -> Subpath { +pub fn offset_bezpath(bezpath: &BezPath, distance: f64, join: Join, miter_limit: Option) -> BezPath { // An offset at a distance 0 from the curve is simply the same curve. // An offset of a single point is not defined. - if distance == 0. || subpath.len() <= 1 || subpath.len_segments() < 1 { - return subpath.clone(); + if distance == 0. || bezpath.get_seg(1).is_none() { + return bezpath.clone(); } - let mut subpaths = subpath - .iter() - .filter(|bezier| !bezier.is_point()) + let mut bezpaths = bezpath + .segments() .map(|bezier| bezier.to_cubic()) - .map(|cubic| { - let Bezier { start, end, handles } = cubic; - let BezierHandles::Cubic { handle_start, handle_end } = handles else { unreachable!()}; - - let cubic_bez = kurbo::CubicBez::new((start.x, start.y), (handle_start.x, handle_start.y), (handle_end.x, handle_end.y), (end.x, end.y)); + .map(|cubic_bez| { let cubic_offset = kurbo::offset::CubicOffset::new_regularized(cubic_bez, distance, CUBIC_REGULARIZATION_ACCURACY); - let offset_bezpath = kurbo::fit_to_bezpath(&cubic_offset, CUBIC_TO_BEZPATH_ACCURACY); - let beziers = offset_bezpath.segments().fold(Vec::new(), |mut acc, seg| { - acc.push(segment_to_bezier(seg)); - acc - }); - - Subpath::from_beziers(&beziers, false) + kurbo::fit_to_bezpath(&cubic_offset, CUBIC_TO_BEZPATH_ACCURACY) }) - .filter(|subpath| subpath.len() >= 2) // In some cases the reduced and scaled bรฉzier is marked by is_point (so the subpath is empty). - .collect::>>(); - - let mut drop_common_point = vec![true; subpath.len()]; + .filter(|bezpath| bezpath.get_seg(1).is_some()) // In some cases the reduced and scaled bรฉzier is marked by is_point (so the subpath is empty). + .collect::>(); // Clip or join consecutive Subpaths - for i in 0..subpaths.len() - 1 { + for i in 0..bezpaths.len() - 1 { let j = i + 1; - let subpath1 = &subpaths[i]; - let subpath2 = &subpaths[j]; + let bezpath1 = &bezpaths[i]; + let bezpath2 = &bezpaths[j]; - let last_segment = subpath1.get_segment(subpath1.len_segments() - 1).unwrap(); - let first_segment = subpath2.get_segment(0).unwrap(); + let last_segment_end = point_to_dvec2(bezpath1.segments().last().unwrap().end()); + let first_segment_start = point_to_dvec2(bezpath2.segments().next().unwrap().start()); // If the anchors are approximately equal, there is no need to clip / join the segments - if last_segment.end().abs_diff_eq(first_segment.start(), MAX_ABSOLUTE_DIFFERENCE) { + if last_segment_end.abs_diff_eq(first_segment_start, MAX_ABSOLUTE_DIFFERENCE) { continue; } - // Calculate the angle formed between two consecutive Subpaths - let out_tangent = subpath.get_segment(i).unwrap().tangent(TValue::Parametric(1.)); - let in_tangent = subpath.get_segment(j).unwrap().tangent(TValue::Parametric(0.)); - let angle = out_tangent.angle_to(in_tangent); - // The angle is concave. The Subpath overlap and must be clipped let mut apply_join = true; - if (angle > 0. && distance > 0.) || (angle < 0. && distance < 0.) { - // If the distance is large enough, there may still be no intersections. Also, if the angle is close enough to zero, - // subpath intersections may find no intersections. In this case, the points are likely close enough that we can approximate - // the points as being on top of one another. - if let Some((clipped_subpath1, clipped_subpath2)) = Subpath::clip_simple_subpaths(subpath1, subpath2) { - subpaths[i] = clipped_subpath1; - subpaths[j] = clipped_subpath2; - apply_join = false; - } + + if let Some((clipped_subpath1, clipped_subpath2)) = clip_simple_bezpaths(bezpath1, bezpath2) { + bezpaths[i] = clipped_subpath1; + bezpaths[j] = clipped_subpath2; + apply_join = false; } // The angle is convex. The Subpath must be joined using the specified join type if apply_join { - drop_common_point[j] = false; match join { - Join::Bevel => {} - Join::Miter(miter_limit) => { - let miter_manipulator_group = subpaths[i].miter_line_join(&subpaths[j], miter_limit); - if let Some(miter_manipulator_group) = miter_manipulator_group { - subpaths[i].manipulator_groups_mut().push(miter_manipulator_group); + Join::Bevel => { + let element = PathEl::LineTo(bezpaths[j].segments().next().unwrap().start()); + bezpaths[i].push(element); + } + Join::Miter => { + let element = miter_line_join(&bezpaths[i], &bezpaths[j], miter_limit); + if let Some(element) = element { + bezpaths[i].push(element[0]); + bezpaths[i].push(element[1]); + } else { + let element = PathEl::LineTo(bezpaths[j].segments().next().unwrap().start()); + bezpaths[i].push(element); } } Join::Round => { - let (out_handle, round_point, in_handle) = subpaths[i].round_line_join(&subpaths[j], subpath.manipulator_groups()[j].anchor); - let last_index = subpaths[i].manipulator_groups().len() - 1; - subpaths[i].manipulator_groups_mut()[last_index].out_handle = Some(out_handle); - subpaths[i].manipulator_groups_mut().push(round_point); - subpaths[j].manipulator_groups_mut()[0].in_handle = Some(in_handle); + let center = point_to_dvec2(bezpath.get_seg(i + 1).unwrap().end()); + let elements = round_line_join(&bezpaths[i], &bezpaths[j], center); + bezpaths[i].push(elements[0]); + bezpaths[i].push(elements[1]); } } } } // Clip any overlap in the last segment - if subpath.closed { - let out_tangent = subpath.get_segment(subpath.len_segments() - 1).unwrap().tangent(TValue::Parametric(1.)); - let in_tangent = subpath.get_segment(0).unwrap().tangent(TValue::Parametric(0.)); - let angle = out_tangent.angle_to(in_tangent); - + let is_bezpath_closed = bezpath.elements().last().is_some_and(|element| *element == PathEl::ClosePath); + if is_bezpath_closed { let mut apply_join = true; - if (angle > 0. && distance > 0.) || (angle < 0. && distance < 0.) { - if let Some((clipped_subpath1, clipped_subpath2)) = Subpath::clip_simple_subpaths(&subpaths[subpaths.len() - 1], &subpaths[0]) { - // Merge the clipped subpaths - let last_index = subpaths.len() - 1; - subpaths[last_index] = clipped_subpath1; - subpaths[0] = clipped_subpath2; - apply_join = false; - } + if let Some((clipped_subpath1, clipped_subpath2)) = clip_simple_bezpaths(&bezpaths[bezpaths.len() - 1], &bezpaths[0]) { + // Merge the clipped subpaths + let last_index = bezpaths.len() - 1; + bezpaths[last_index] = clipped_subpath1; + bezpaths[0] = clipped_subpath2; + apply_join = false; } + if apply_join { - drop_common_point[0] = false; match join { - Join::Bevel => {} - Join::Miter(miter_limit) => { - let last_subpath_index = subpaths.len() - 1; - let miter_manipulator_group = subpaths[last_subpath_index].miter_line_join(&subpaths[0], miter_limit); - if let Some(miter_manipulator_group) = miter_manipulator_group { - subpaths[last_subpath_index].manipulator_groups_mut().push(miter_manipulator_group); + Join::Bevel => { + let last_subpath_index = bezpaths.len() - 1; + let element = PathEl::LineTo(bezpaths[0].segments().next().unwrap().start()); + bezpaths[last_subpath_index].push(element); + } + Join::Miter => { + let last_subpath_index = bezpaths.len() - 1; + let element = miter_line_join(&bezpaths[last_subpath_index], &bezpaths[0], miter_limit); + if let Some(element) = element { + bezpaths[last_subpath_index].push(element[0]); + bezpaths[last_subpath_index].push(element[1]); + } else { + let element = PathEl::LineTo(bezpaths[0].segments().next().unwrap().start()); + bezpaths[last_subpath_index].push(element); } } Join::Round => { - let last_subpath_index = subpaths.len() - 1; - let (out_handle, round_point, in_handle) = subpaths[last_subpath_index].round_line_join(&subpaths[0], subpath.manipulator_groups()[0].anchor); - let last_index = subpaths[last_subpath_index].manipulator_groups().len() - 1; - subpaths[last_subpath_index].manipulator_groups_mut()[last_index].out_handle = Some(out_handle); - subpaths[last_subpath_index].manipulator_groups_mut().push(round_point); - subpaths[0].manipulator_groups_mut()[0].in_handle = Some(in_handle); + let last_subpath_index = bezpaths.len() - 1; + let center = point_to_dvec2(bezpath.get_seg(1).unwrap().start()); + let elements = round_line_join(&bezpaths[last_subpath_index], &bezpaths[0], center); + bezpaths[last_subpath_index].push(elements[0]); + bezpaths[last_subpath_index].push(elements[1]); } } } } - // Merge the subpaths. Drop points which overlap with one another. - let mut manipulator_groups = subpaths[0].manipulator_groups().to_vec(); - for i in 1..subpaths.len() { - if drop_common_point[i] { - let last_group = manipulator_groups.pop().unwrap(); - let mut manipulators_copy = subpaths[i].manipulator_groups().to_vec(); - manipulators_copy[0].in_handle = last_group.in_handle; - - manipulator_groups.append(&mut manipulators_copy); - } else { - manipulator_groups.append(&mut subpaths[i].manipulator_groups().to_vec()); + // Merge the bezpaths and its segments. Drop points which overlap with one another. + let segments = bezpaths.iter().flat_map(|bezpath| bezpath.segments().collect::>()).collect::>(); + let mut offset_bezpath = segments.iter().fold(BezPath::new(), |mut acc, segment| { + if acc.elements().is_empty() { + acc.move_to(segment.start()); } - } - if subpath.closed && drop_common_point[0] { - let last_group = manipulator_groups.pop().unwrap(); - manipulator_groups[0].in_handle = last_group.in_handle; + acc.push(segment.as_path_el()); + acc + }); + + if is_bezpath_closed { + offset_bezpath.close_path(); } - Subpath::new(manipulator_groups, subpath.closed) + offset_bezpath } diff --git a/node-graph/gcore/src/vector/algorithms/util.rs b/node-graph/gcore/src/vector/algorithms/util.rs new file mode 100644 index 0000000000..0c2eacf7ce --- /dev/null +++ b/node-graph/gcore/src/vector/algorithms/util.rs @@ -0,0 +1,44 @@ +use glam::DVec2; +use kurbo::{ParamCurve, ParamCurveDeriv, PathSeg}; + +pub fn pathseg_tangent(segment: PathSeg, t: f64) -> DVec2 { + // NOTE: .deriv() method gives inaccurate result when it is 1. + let t = if t == 1. { 1. - f64::EPSILON } else { t }; + + let tangent = match segment { + PathSeg::Line(line) => line.deriv().eval(t), + PathSeg::Quad(quad_bez) => quad_bez.deriv().eval(t), + PathSeg::Cubic(cubic_bez) => cubic_bez.deriv().eval(t), + }; + + DVec2::new(tangent.x, tangent.y) +} + +// Compare two f64s with some maximum absolute difference to account for floating point errors +#[cfg(test)] +pub fn compare_f64s(f1: f64, f2: f64) -> bool { + (f1 - f2).abs() < super::contants::MAX_ABSOLUTE_DIFFERENCE +} + +/// Compare points by allowing some maximum absolute difference to account for floating point errors +#[cfg(test)] +pub fn compare_points(p1: kurbo::Point, p2: kurbo::Point) -> bool { + let (p1, p2) = (crate::vector::misc::point_to_dvec2(p1), crate::vector::misc::point_to_dvec2(p2)); + p1.abs_diff_eq(p2, super::contants::MAX_ABSOLUTE_DIFFERENCE) +} + +/// Compare vectors of points by allowing some maximum absolute difference to account for floating point errors +#[cfg(test)] +pub fn compare_vec_of_points(a: Vec, b: Vec, max_absolute_difference: f64) -> bool { + a.len() == b.len() + && a.into_iter() + .zip(b) + .map(|(p1, p2)| (crate::vector::misc::point_to_dvec2(p1), crate::vector::misc::point_to_dvec2(p2))) + .all(|(p1, p2)| p1.abs_diff_eq(p2, max_absolute_difference)) +} + +/// Compare the two values in a `DVec2` independently with a provided max absolute value difference. +#[cfg(test)] +pub fn dvec2_compare(a: kurbo::Point, b: kurbo::Point, max_abs_diff: f64) -> glam::BVec2 { + glam::BVec2::new((a.x - b.x).abs() < max_abs_diff, (a.y - b.y).abs() < max_abs_diff) +} diff --git a/node-graph/gcore/src/vector/click_target.rs b/node-graph/gcore/src/vector/click_target.rs index 4ea81c3cd2..6ab7c1860a 100644 --- a/node-graph/gcore/src/vector/click_target.rs +++ b/node-graph/gcore/src/vector/click_target.rs @@ -1,8 +1,12 @@ +use super::algorithms::{bezpath_algorithms::bezpath_is_inside_bezpath, intersection::filtered_segment_intersections}; +use super::misc::dvec2_to_point; use crate::math::math_ext::QuadExt; use crate::math::quad::Quad; +use crate::subpath::Subpath; use crate::vector::PointId; -use bezier_rs::Subpath; +use crate::vector::misc::point_to_dvec2; use glam::{DAffine2, DMat2, DVec2}; +use kurbo::{Affine, BezPath, ParamCurve, PathSeg, Shape}; #[derive(Copy, Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] pub struct FreePoint { @@ -99,7 +103,7 @@ impl ClickTarget { } /// Does the click target intersect the path - pub fn intersect_path>(&self, mut bezier_iter: impl FnMut() -> It, layer_transform: DAffine2) -> bool { + pub fn intersect_path>(&self, mut bezier_iter: impl FnMut() -> It, layer_transform: DAffine2) -> bool { // Check if the matrix is not invertible let mut layer_transform = layer_transform; if layer_transform.matrix2.determinant().abs() <= f64::EPSILON { @@ -107,25 +111,27 @@ impl ClickTarget { } let inverse = layer_transform.inverse(); - let mut bezier_iter = || bezier_iter().map(|bezier| bezier.apply_transformation(|point| inverse.transform_point2(point))); + let mut bezier_iter = || bezier_iter().map(|bezier| Affine::new(inverse.to_cols_array()) * bezier); match self.target_type() { ClickTargetType::Subpath(subpath) => { // Check if outlines intersect - let outline_intersects = |path_segment: bezier_rs::Bezier| bezier_iter().any(|line| !path_segment.intersections(&line, None, None).is_empty()); + let outline_intersects = |path_segment: PathSeg| bezier_iter().any(|line| !filtered_segment_intersections(path_segment, line, None, None).is_empty()); if subpath.iter().any(outline_intersects) { return true; } // Check if selection is entirely within the shape - if subpath.closed() && bezier_iter().next().is_some_and(|bezier| subpath.contains_point(bezier.start)) { + if subpath.closed() && bezier_iter().next().is_some_and(|bezier| subpath.contains_point(point_to_dvec2(bezier.start()))) { return true; } + let mut selection = BezPath::from_path_segments(bezier_iter()); + selection.close_path(); + // Check if shape is entirely within selection - let any_point_from_subpath = subpath.manipulator_groups().first().map(|group| group.anchor); - any_point_from_subpath.is_some_and(|shape_point| bezier_iter().map(|bezier| bezier.winding(shape_point)).sum::() != 0) + bezpath_is_inside_bezpath(&subpath.to_bezpath(), &selection, None, None) } - ClickTargetType::FreePoint(point) => bezier_iter().map(|bezier: bezier_rs::Bezier| bezier.winding(point.position)).sum::() != 0, + ClickTargetType::FreePoint(point) => bezier_iter().map(|bezier: PathSeg| bezier.winding(dvec2_to_point(point.position))).sum::() != 0, } } @@ -144,7 +150,7 @@ impl ClickTarget { // Allows for selecting lines // TODO: actual intersection of stroke let inflated_quad = Quad::from_box(target_bounds); - self.intersect_path(|| inflated_quad.bezier_lines(), layer_transform) + self.intersect_path(|| inflated_quad.to_lines(), layer_transform) } /// Does the click target intersect the point (not accounting for stroke size) diff --git a/node-graph/gcore/src/vector/generator_nodes.rs b/node-graph/gcore/src/vector/generator_nodes.rs index 6211e2d1b1..7a2ad1b246 100644 --- a/node-graph/gcore/src/vector/generator_nodes.rs +++ b/node-graph/gcore/src/vector/generator_nodes.rs @@ -2,21 +2,23 @@ use super::misc::{ArcType, AsU64, GridType}; use super::{PointId, SegmentId, StrokeId}; use crate::Ctx; use crate::registry::types::{Angle, PixelSize}; -use crate::vector::{HandleId, VectorData, VectorDataTable}; -use bezier_rs::Subpath; +use crate::subpath; +use crate::table::Table; +use crate::vector::Vector; +use crate::vector::misc::HandleId; use glam::DVec2; trait CornerRadius { - fn generate(self, size: DVec2, clamped: bool) -> VectorDataTable; + fn generate(self, size: DVec2, clamped: bool) -> Table; } impl CornerRadius for f64 { - fn generate(self, size: DVec2, clamped: bool) -> VectorDataTable { + fn generate(self, size: DVec2, clamped: bool) -> Table { let clamped_radius = if clamped { self.clamp(0., size.x.min(size.y).max(0.) / 2.) } else { self }; - VectorDataTable::new(VectorData::from_subpath(Subpath::new_rounded_rect(size / -2., size / 2., [clamped_radius; 4]))) + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_rounded_rect(size / -2., size / 2., [clamped_radius; 4]))) } } impl CornerRadius for [f64; 4] { - fn generate(self, size: DVec2, clamped: bool) -> VectorDataTable { + fn generate(self, size: DVec2, clamped: bool) -> Table { let clamped_radius = if clamped { // Algorithm follows the CSS spec: @@ -32,7 +34,7 @@ impl CornerRadius for [f64; 4] { } else { self }; - VectorDataTable::new(VectorData::from_subpath(Subpath::new_rounded_rect(size / -2., size / 2., clamped_radius))) + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_rounded_rect(size / -2., size / 2., clamped_radius))) } } @@ -43,9 +45,9 @@ fn circle( #[unit(" px")] #[default(50.)] radius: f64, -) -> VectorDataTable { +) -> Table { let radius = radius.abs(); - VectorDataTable::new(VectorData::from_subpath(Subpath::new_ellipse(DVec2::splat(-radius), DVec2::splat(radius)))) + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_ellipse(DVec2::splat(-radius), DVec2::splat(radius)))) } #[node_macro::node(category("Vector: Shape"))] @@ -60,15 +62,15 @@ fn arc( #[range((0., 360.))] sweep_angle: Angle, arc_type: ArcType, -) -> VectorDataTable { - VectorDataTable::new(VectorData::from_subpath(Subpath::new_arc( +) -> Table { + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_arc( radius, start_angle / 360. * std::f64::consts::TAU, sweep_angle / 360. * std::f64::consts::TAU, match arc_type { - ArcType::Open => bezier_rs::ArcType::Open, - ArcType::Closed => bezier_rs::ArcType::Closed, - ArcType::PieSlice => bezier_rs::ArcType::PieSlice, + ArcType::Open => subpath::ArcType::Open, + ArcType::Closed => subpath::ArcType::Closed, + ArcType::PieSlice => subpath::ArcType::PieSlice, }, ))) } @@ -83,12 +85,12 @@ fn ellipse( #[unit(" px")] #[default(25)] radius_y: f64, -) -> VectorDataTable { +) -> Table { let radius = DVec2::new(radius_x, radius_y); let corner1 = -radius; let corner2 = radius; - let mut ellipse = VectorData::from_subpath(Subpath::new_ellipse(corner1, corner2)); + let mut ellipse = Vector::from_subpath(subpath::Subpath::new_ellipse(corner1, corner2)); let len = ellipse.segment_domain.ids().len(); for i in 0..len { @@ -97,7 +99,7 @@ fn ellipse( .push([HandleId::end(ellipse.segment_domain.ids()[i]), HandleId::primary(ellipse.segment_domain.ids()[(i + 1) % len])]); } - VectorDataTable::new(ellipse) + Table::new_from_element(ellipse) } #[node_macro::node(category("Vector: Shape"), properties("rectangle_properties"))] @@ -113,7 +115,7 @@ fn rectangle( _individual_corner_radii: bool, // TODO: Move this to the bottom once we have a migration capability #[implementations(f64, [f64; 4])] corner_radius: T, #[default(true)] clamped: bool, -) -> VectorDataTable { +) -> Table { corner_radius.generate(DVec2::new(width, height), clamped) } @@ -128,10 +130,10 @@ fn regular_polygon( #[unit(" px")] #[default(50)] radius: f64, -) -> VectorDataTable { +) -> Table { let points = sides.as_u64(); let radius: f64 = radius * 2.; - VectorDataTable::new(VectorData::from_subpath(Subpath::new_regular_polygon(DVec2::splat(-radius), points, radius))) + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_regular_polygon(DVec2::splat(-radius), points, radius))) } #[node_macro::node(category("Vector: Shape"))] @@ -148,17 +150,17 @@ fn star( #[unit(" px")] #[default(25)] radius_2: f64, -) -> VectorDataTable { +) -> Table { let points = sides.as_u64(); let diameter: f64 = radius_1 * 2.; let inner_diameter = radius_2 * 2.; - VectorDataTable::new(VectorData::from_subpath(Subpath::new_star_polygon(DVec2::splat(-diameter), points, diameter, inner_diameter))) + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_star_polygon(DVec2::splat(-diameter), points, diameter, inner_diameter))) } #[node_macro::node(category("Vector: Shape"))] -fn line(_: impl Ctx, _primary: (), #[default(0., 0.)] start: PixelSize, #[default(100., 100.)] end: PixelSize) -> VectorDataTable { - VectorDataTable::new(VectorData::from_subpath(Subpath::new_line(start, end))) +fn line(_: impl Ctx, _primary: (), #[default(0., 0.)] start: PixelSize, #[default(100., 100.)] end: PixelSize) -> Table { + Table::new_from_element(Vector::from_subpath(subpath::Subpath::new_line(start, end))) } trait GridSpacing { @@ -188,11 +190,11 @@ fn grid( #[default(10)] columns: u32, #[default(10)] rows: u32, #[default(30., 30.)] angles: DVec2, -) -> VectorDataTable { +) -> Table { let (x_spacing, y_spacing) = spacing.as_dvec2().into(); let (angle_a, angle_b) = angles.into(); - let mut vector_data = VectorData::default(); + let mut vector = Vector::default(); let mut segment_id = SegmentId::ZERO; let mut point_id = PointId::ZERO; @@ -202,15 +204,15 @@ fn grid( for y in 0..rows { for x in 0..columns { // Add current point to the grid - let current_index = vector_data.point_domain.ids().len(); - vector_data.point_domain.push(point_id.next_id(), DVec2::new(x_spacing * x as f64, y_spacing * y as f64)); + let current_index = vector.point_domain.ids().len(); + vector.point_domain.push(point_id.next_id(), DVec2::new(x_spacing * x as f64, y_spacing * y as f64)); // Helper function to connect points with line segments let mut push_segment = |to_index: Option| { if let Some(other_index) = to_index { - vector_data + vector .segment_domain - .push(segment_id.next_id(), other_index, current_index, bezier_rs::BezierHandles::Linear, StrokeId::ZERO); + .push(segment_id.next_id(), other_index, current_index, subpath::BezierHandles::Linear, StrokeId::ZERO); } }; @@ -232,7 +234,7 @@ fn grid( for y in 0..rows { for x in 0..columns { // Add current point to the grid with offset for odd columns - let current_index = vector_data.point_domain.ids().len(); + let current_index = vector.point_domain.ids().len(); let a_angles_eaten = x.div_ceil(2) as f64; let b_angles_eaten = (x / 2) as f64; @@ -240,14 +242,14 @@ fn grid( let offset_y_fraction = b_angles_eaten * tan_b - a_angles_eaten * tan_a; let position = DVec2::new(spacing.x * x as f64, spacing.y * y as f64 + offset_y_fraction * spacing.x); - vector_data.point_domain.push(point_id.next_id(), position); + vector.point_domain.push(point_id.next_id(), position); // Helper function to connect points with line segments let mut push_segment = |to_index: Option| { if let Some(other_index) = to_index { - vector_data + vector .segment_domain - .push(segment_id.next_id(), other_index, current_index, bezier_rs::BezierHandles::Linear, StrokeId::ZERO); + .push(segment_id.next_id(), other_index, current_index, subpath::BezierHandles::Linear, StrokeId::ZERO); } }; @@ -270,7 +272,7 @@ fn grid( } } - VectorDataTable::new(vector_data) + Table::new_from_element(vector) } #[cfg(test)] @@ -284,10 +286,10 @@ mod tests { // Works properly let grid = grid((), (), GridType::Isometric, 10., 5, 5, (30., 30.).into()); - assert_eq!(grid.instance_ref_iter().next().unwrap().instance.point_domain.ids().len(), 5 * 5); - assert_eq!(grid.instance_ref_iter().next().unwrap().instance.segment_bezier_iter().count(), 4 * 5 + 4 * 9); - for (_, bezier, _, _) in grid.instance_ref_iter().next().unwrap().instance.segment_bezier_iter() { - assert_eq!(bezier.handles, bezier_rs::BezierHandles::Linear); + assert_eq!(grid.iter().next().unwrap().element.point_domain.ids().len(), 5 * 5); + assert_eq!(grid.iter().next().unwrap().element.segment_bezier_iter().count(), 4 * 5 + 4 * 9); + for (_, bezier, _, _) in grid.iter().next().unwrap().element.segment_bezier_iter() { + assert_eq!(bezier.handles, subpath::BezierHandles::Linear); assert!( ((bezier.start - bezier.end).length() - 10.).abs() < 1e-5, "Length of {} should be 10", @@ -299,13 +301,13 @@ mod tests { #[test] fn skew_isometric_grid_test() { let grid = grid((), (), GridType::Isometric, 10., 5, 5, (40., 30.).into()); - assert_eq!(grid.instance_ref_iter().next().unwrap().instance.point_domain.ids().len(), 5 * 5); - assert_eq!(grid.instance_ref_iter().next().unwrap().instance.segment_bezier_iter().count(), 4 * 5 + 4 * 9); - for (_, bezier, _, _) in grid.instance_ref_iter().next().unwrap().instance.segment_bezier_iter() { - assert_eq!(bezier.handles, bezier_rs::BezierHandles::Linear); + assert_eq!(grid.iter().next().unwrap().element.point_domain.ids().len(), 5 * 5); + assert_eq!(grid.iter().next().unwrap().element.segment_bezier_iter().count(), 4 * 5 + 4 * 9); + for (_, bezier, _, _) in grid.iter().next().unwrap().element.segment_bezier_iter() { + assert_eq!(bezier.handles, subpath::BezierHandles::Linear); let vector = bezier.start - bezier.end; let angle = (vector.angle_to(DVec2::X).to_degrees() + 180.) % 180.; - assert!([90., 150., 40.].into_iter().any(|target| (target - angle).abs() < 1e-10), "unexpected angle of {}", angle) + assert!([90., 150., 40.].into_iter().any(|target| (target - angle).abs() < 1e-10), "unexpected angle of {angle}") } } } diff --git a/node-graph/gcore/src/vector/misc.rs b/node-graph/gcore/src/vector/misc.rs index a273cd313c..67a7a55418 100644 --- a/node-graph/gcore/src/vector/misc.rs +++ b/node-graph/gcore/src/vector/misc.rs @@ -1,9 +1,11 @@ -use bezier_rs::{BezierHandles, ManipulatorGroup, Subpath}; +use super::PointId; +use super::algorithms::offset_subpath::MAX_ABSOLUTE_DIFFERENCE; +use crate::subpath::{BezierHandles, ManipulatorGroup}; +use crate::vector::{SegmentId, Vector}; use dyn_any::DynAny; use glam::DVec2; -use kurbo::{BezPath, CubicBez, Line, PathSeg, Point, QuadBez}; - -use super::PointId; +use kurbo::{BezPath, CubicBez, Line, ParamCurve, PathSeg, Point, QuadBez}; +use std::ops::Sub; /// Represents different ways of calculating the centroid. #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)] @@ -67,7 +69,7 @@ pub enum GridType { #[widget(Radio)] pub enum ArcType { #[default] - Open, + Open = 0, Closed, PieSlice, } @@ -113,18 +115,18 @@ pub fn segment_to_handles(segment: &PathSeg) -> BezierHandles { pub fn handles_to_segment(start: DVec2, handles: BezierHandles, end: DVec2) -> PathSeg { match handles { - bezier_rs::BezierHandles::Linear => { + BezierHandles::Linear => { let p0 = dvec2_to_point(start); let p1 = dvec2_to_point(end); PathSeg::Line(Line::new(p0, p1)) } - bezier_rs::BezierHandles::Quadratic { handle } => { + BezierHandles::Quadratic { handle } => { let p0 = dvec2_to_point(start); let p1 = dvec2_to_point(handle); let p2 = dvec2_to_point(end); PathSeg::Quad(QuadBez::new(p0, p1, p2)) } - bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => { + BezierHandles::Cubic { handle_start, handle_end } => { let p0 = dvec2_to_point(start); let p1 = dvec2_to_point(handle_start); let p2 = dvec2_to_point(handle_end); @@ -134,12 +136,6 @@ pub fn handles_to_segment(start: DVec2, handles: BezierHandles, end: DVec2) -> P } } -pub fn subpath_to_kurbo_bezpath(subpath: Subpath) -> BezPath { - let maniputor_groups = subpath.manipulator_groups(); - let closed = subpath.closed(); - bezpath_from_manipulator_groups(maniputor_groups, closed) -} - pub fn bezpath_from_manipulator_groups(manipulator_groups: &[ManipulatorGroup], closed: bool) -> BezPath { let mut bezpath = kurbo::BezPath::new(); let mut out_handle; @@ -169,3 +165,249 @@ pub fn bezpath_from_manipulator_groups(manipulator_groups: &[ManipulatorGroup (Vec>, bool) { + let mut manipulator_groups = Vec::>::new(); + let mut is_closed = false; + + for element in bezpath.elements() { + let manipulator_group = match *element { + kurbo::PathEl::MoveTo(point) => ManipulatorGroup::new(point_to_dvec2(point), None, None), + kurbo::PathEl::LineTo(point) => ManipulatorGroup::new(point_to_dvec2(point), None, None), + kurbo::PathEl::QuadTo(point, point1) => ManipulatorGroup::new(point_to_dvec2(point1), Some(point_to_dvec2(point)), None), + kurbo::PathEl::CurveTo(point, point1, point2) => { + if let Some(last_manipulator_group) = manipulator_groups.last_mut() { + last_manipulator_group.out_handle = Some(point_to_dvec2(point)); + } + ManipulatorGroup::new(point_to_dvec2(point2), Some(point_to_dvec2(point1)), None) + } + kurbo::PathEl::ClosePath => { + if let Some(last_manipulators) = manipulator_groups.pop() + && let Some(first_manipulators) = manipulator_groups.first_mut() + { + first_manipulators.out_handle = last_manipulators.in_handle; + } + is_closed = true; + break; + } + }; + + manipulator_groups.push(manipulator_group); + } + + (manipulator_groups, is_closed) +} + +/// Returns true if the [`PathSeg`] is equivalent to a line. +/// +/// This is different from simply checking if the segment is [`PathSeg::Line`] or [`PathSeg::Quad`] or [`PathSeg::Cubic`]. Bezier curve can also be a line if the control points are colinear to the start and end points. Therefore if the handles exceed the start and end point, it will still be considered as a line. +pub fn is_linear(segment: PathSeg) -> bool { + let is_colinear = |a: Point, b: Point, c: Point| -> bool { ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)).abs() < MAX_ABSOLUTE_DIFFERENCE }; + + match segment { + PathSeg::Line(_) => true, + PathSeg::Quad(QuadBez { p0, p1, p2 }) => is_colinear(p0, p1, p2), + PathSeg::Cubic(CubicBez { p0, p1, p2, p3 }) => is_colinear(p0, p1, p3) && is_colinear(p0, p2, p3), + } +} + +/// Get an vec of all the points in a path segment. +pub fn pathseg_points_vec(segment: PathSeg) -> Vec { + match segment { + PathSeg::Line(line) => [line.p0, line.p1].to_vec(), + PathSeg::Quad(quad_bez) => [quad_bez.p0, quad_bez.p1, quad_bez.p2].to_vec(), + PathSeg::Cubic(cubic_bez) => [cubic_bez.p0, cubic_bez.p1, cubic_bez.p2, cubic_bez.p3].to_vec(), + } +} + +/// Returns true if the corresponding points of the two [`PathSeg`]s are within the provided absolute value difference from each other. +pub fn pathseg_abs_diff_eq(seg1: PathSeg, seg2: PathSeg, max_abs_diff: f64) -> bool { + let seg1 = if is_linear(seg1) { PathSeg::Line(Line::new(seg1.start(), seg1.end())) } else { seg1 }; + let seg2 = if is_linear(seg2) { PathSeg::Line(Line::new(seg2.start(), seg2.end())) } else { seg2 }; + + let seg1_points = pathseg_points_vec(seg1); + let seg2_points = pathseg_points_vec(seg2); + + let cmp = |a: f64, b: f64| a.sub(b).abs() < max_abs_diff; + + seg1_points.len() == seg2_points.len() && seg1_points.into_iter().zip(seg2_points).all(|(a, b)| cmp(a.x, b.x) && cmp(a.y, b.y)) +} + +/// A selectable part of a curve, either an anchor (start or end of a bรฉzier) or a handle (doesn't necessarily go through the bรฉzier but influences curvature). +#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, DynAny, serde::Serialize, serde::Deserialize)] +pub enum ManipulatorPointId { + /// A control anchor - the start or end point of a bรฉzier. + Anchor(PointId), + /// The handle for a bรฉzier - the first handle on a cubic and the only handle on a quadratic. + PrimaryHandle(SegmentId), + /// The end handle on a cubic bรฉzier. + EndHandle(SegmentId), +} + +impl ManipulatorPointId { + /// Attempt to retrieve the manipulator position in layer space (no transformation applied). + #[must_use] + #[track_caller] + pub fn get_position(&self, vector: &Vector) -> Option { + match self { + ManipulatorPointId::Anchor(id) => vector.point_domain.position_from_id(*id), + ManipulatorPointId::PrimaryHandle(id) => vector.segment_from_id(*id).and_then(|bezier| bezier.handle_start()), + ManipulatorPointId::EndHandle(id) => vector.segment_from_id(*id).and_then(|bezier| bezier.handle_end()), + } + } + + pub fn get_anchor_position(&self, vector: &Vector) -> Option { + match self { + ManipulatorPointId::EndHandle(_) | ManipulatorPointId::PrimaryHandle(_) => self.get_anchor(vector).and_then(|id| vector.point_domain.position_from_id(id)), + _ => self.get_position(vector), + } + } + + /// Attempt to get a pair of handles. For an anchor this is the first two handles connected. For a handle it is self and the first opposing handle. + #[must_use] + pub fn get_handle_pair(self, vector: &Vector) -> Option<[HandleId; 2]> { + match self { + ManipulatorPointId::Anchor(point) => vector.all_connected(point).take(2).collect::>().try_into().ok(), + ManipulatorPointId::PrimaryHandle(segment) => { + let point = vector.segment_domain.segment_start_from_id(segment)?; + let current = HandleId::primary(segment); + let other = vector.segment_domain.all_connected(point).find(|&value| value != current); + other.map(|other| [current, other]) + } + ManipulatorPointId::EndHandle(segment) => { + let point = vector.segment_domain.segment_end_from_id(segment)?; + let current = HandleId::end(segment); + let other = vector.segment_domain.all_connected(point).find(|&value| value != current); + other.map(|other| [current, other]) + } + } + } + + /// Finds all the connected handles of a point. + /// For an anchor it is all the connected handles. + /// For a handle it is all the handles connected to its corresponding anchor other than the current handle. + pub fn get_all_connected_handles(self, vector: &Vector) -> Option> { + match self { + ManipulatorPointId::Anchor(point) => { + let connected = vector.all_connected(point).collect::>(); + Some(connected) + } + ManipulatorPointId::PrimaryHandle(segment) => { + let point = vector.segment_domain.segment_start_from_id(segment)?; + let current = HandleId::primary(segment); + let connected = vector.segment_domain.all_connected(point).filter(|&value| value != current).collect::>(); + Some(connected) + } + ManipulatorPointId::EndHandle(segment) => { + let point = vector.segment_domain.segment_end_from_id(segment)?; + let current = HandleId::end(segment); + let connected = vector.segment_domain.all_connected(point).filter(|&value| value != current).collect::>(); + Some(connected) + } + } + } + + /// Attempt to find the closest anchor. If self is already an anchor then it is just self. If it is a start or end handle, then the start or end point is chosen. + #[must_use] + pub fn get_anchor(self, vector: &Vector) -> Option { + match self { + ManipulatorPointId::Anchor(point) => Some(point), + ManipulatorPointId::PrimaryHandle(segment) => vector.segment_start_from_id(segment), + ManipulatorPointId::EndHandle(segment) => vector.segment_end_from_id(segment), + } + } + + /// Attempt to convert self to a [`HandleId`], returning none for an anchor. + #[must_use] + pub fn as_handle(self) -> Option { + match self { + ManipulatorPointId::PrimaryHandle(segment) => Some(HandleId::primary(segment)), + ManipulatorPointId::EndHandle(segment) => Some(HandleId::end(segment)), + ManipulatorPointId::Anchor(_) => None, + } + } + + /// Attempt to convert self to an anchor, returning None for a handle. + #[must_use] + pub fn as_anchor(self) -> Option { + match self { + ManipulatorPointId::Anchor(point) => Some(point), + _ => None, + } + } + + pub fn get_segment(self) -> Option { + match self { + ManipulatorPointId::PrimaryHandle(segment) | ManipulatorPointId::EndHandle(segment) => Some(segment), + _ => None, + } + } +} + +/// The type of handle found on a bรฉzier curve. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DynAny, serde::Serialize, serde::Deserialize)] +pub enum HandleType { + /// The first handle on a cubic bรฉzier or the only handle on a quadratic bรฉzier. + Primary, + /// The second handle on a cubic bรฉzier. + End, +} + +/// Represents a primary or end handle found in a particular segment. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DynAny, serde::Serialize, serde::Deserialize)] +pub struct HandleId { + pub ty: HandleType, + pub segment: SegmentId, +} + +impl std::fmt::Display for HandleId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self.ty { + // I haven't checked if "out" and "in" are reversed, or are accurate translations of the "primary" and "end" terms used in the `HandleType` enum, so this naming is an assumption. + HandleType::Primary => write!(f, "{} out", self.segment.inner()), + HandleType::End => write!(f, "{} in", self.segment.inner()), + } + } +} + +impl HandleId { + /// Construct a handle for the first handle on a cubic bรฉzier or the only handle on a quadratic bรฉzier. + #[must_use] + pub const fn primary(segment: SegmentId) -> Self { + Self { ty: HandleType::Primary, segment } + } + + /// Construct a handle for the end handle on a cubic bรฉzier. + #[must_use] + pub const fn end(segment: SegmentId) -> Self { + Self { ty: HandleType::End, segment } + } + + /// Convert to [`ManipulatorPointId`]. + #[must_use] + pub fn to_manipulator_point(self) -> ManipulatorPointId { + match self.ty { + HandleType::Primary => ManipulatorPointId::PrimaryHandle(self.segment), + HandleType::End => ManipulatorPointId::EndHandle(self.segment), + } + } + + /// Calculate the magnitude of the handle from the anchor. + pub fn length(self, vector: &Vector) -> f64 { + let Some(anchor_position) = self.to_manipulator_point().get_anchor_position(vector) else { + // TODO: This was previously an unwrap which was encountered, so this is a temporary way to avoid a crash + return 0.; + }; + let handle_position = self.to_manipulator_point().get_position(vector); + handle_position.map(|pos| (pos - anchor_position).length()).unwrap_or(f64::MAX) + } + + /// Convert an end handle to the primary handle and a primary handle to an end handle. Note that the new handle may not exist (e.g. for a quadratic bรฉzier). + #[must_use] + pub fn opposite(self) -> Self { + match self.ty { + HandleType::Primary => Self::end(self.segment), + HandleType::End => Self::primary(self.segment), + } + } +} diff --git a/node-graph/gcore/src/vector/mod.rs b/node-graph/gcore/src/vector/mod.rs index 75bcc3b7db..1b920c94a5 100644 --- a/node-graph/gcore/src/vector/mod.rs +++ b/node-graph/gcore/src/vector/mod.rs @@ -4,11 +4,12 @@ pub mod generator_nodes; pub mod misc; mod reference_point; pub mod style; -mod vector_data; +mod vector_attributes; +mod vector_modification; mod vector_nodes; +mod vector_types; -pub use bezier_rs; pub use reference_point::*; pub use style::PathStyle; -pub use vector_data::*; pub use vector_nodes::*; +pub use vector_types::*; diff --git a/node-graph/gcore/src/vector/style.rs b/node-graph/gcore/src/vector/style.rs index c1901ce905..2850401270 100644 --- a/node-graph/gcore/src/vector/style.rs +++ b/node-graph/gcore/src/vector/style.rs @@ -2,6 +2,7 @@ use crate::Color; pub use crate::gradient::*; +use crate::table::Table; use dyn_any::DynAny; use glam::DAffine2; @@ -24,7 +25,7 @@ impl std::fmt::Display for Fill { match self { Self::None => write!(f, "None"), Self::Solid(color) => write!(f, "#{} (Alpha: {}%)", color.to_rgb_hex_srgb(), color.a() * 100.), - Self::Gradient(gradient) => write!(f, "{}", gradient), + Self::Gradient(gradient) => write!(f, "{gradient}"), } } } @@ -120,6 +121,21 @@ impl From> for Fill { } } +impl From> for Fill { + fn from(color: Table) -> Fill { + Fill::solid_or_none(color.into()) + } +} + +impl From> for Fill { + fn from(gradient: Table) -> Fill { + Fill::Gradient(Gradient { + stops: gradient.iter().nth(0).map(|row| row.element.clone()).unwrap_or_default(), + ..Default::default() + }) + } +} + impl From for Fill { fn from(gradient: Gradient) -> Fill { Fill::Gradient(gradient) @@ -309,17 +325,6 @@ impl std::hash::Hash for Stroke { } } -impl From for Stroke { - fn from(color: Color) -> Self { - Self::new(Some(color), 1.) - } -} -impl From> for Stroke { - fn from(color: Option) -> Self { - Self::new(color, 1.) - } -} - impl Stroke { pub const fn new(color: Option, weight: f64) -> Self { Self { @@ -366,6 +371,16 @@ impl Stroke { self.weight } + /// Get the effective stroke weight. + pub fn effective_width(&self) -> f64 { + self.weight + * match self.align { + StrokeAlign::Center => 1., + StrokeAlign::Inside => 0., + StrokeAlign::Outside => 2., + } + } + pub fn dash_lengths(&self) -> String { if self.dash_lengths.is_empty() { "none".to_string() diff --git a/node-graph/gcore/src/vector/vector_data/attributes.rs b/node-graph/gcore/src/vector/vector_attributes.rs similarity index 84% rename from node-graph/gcore/src/vector/vector_data/attributes.rs rename to node-graph/gcore/src/vector/vector_attributes.rs index ea4460c78c..461e3a1abf 100644 --- a/node-graph/gcore/src/vector/vector_data/attributes.rs +++ b/node-graph/gcore/src/vector/vector_attributes.rs @@ -1,8 +1,9 @@ -use crate::vector::misc::dvec2_to_point; -use crate::vector::vector_data::{HandleId, VectorData}; -use bezier_rs::{BezierHandles, ManipulatorGroup}; +use crate::subpath::{Bezier, BezierHandles, Identifier, ManipulatorGroup, Subpath}; +use crate::vector::misc::{HandleId, dvec2_to_point}; +use crate::vector::vector_types::Vector; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; +use kurbo::{CubicBez, Line, PathSeg, QuadBez}; use std::collections::HashMap; use std::hash::{Hash, Hasher}; use std::iter::zip; @@ -47,7 +48,7 @@ macro_rules! create_ids { }; } -create_ids! { InstanceId, PointId, SegmentId, RegionId, StrokeId, FillId } +create_ids! { PointId, SegmentId, RegionId, StrokeId, FillId } /// A no-op hasher that allows writing u64s (the id type). #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] @@ -304,7 +305,7 @@ impl SegmentDomain { &self.stroke } - pub(crate) fn push(&mut self, id: SegmentId, start: usize, end: usize, handles: BezierHandles, stroke: StrokeId) { + pub fn push(&mut self, id: SegmentId, start: usize, end: usize, handles: BezierHandles, stroke: StrokeId) { debug_assert!(!self.id.contains(&id), "Tried to push an existing point to a point domain"); self.id.push(id); @@ -441,11 +442,7 @@ impl SegmentDomain { zip(ids, zip(start_point, zip(end_point, handles))).map(|(id, (start_point, (end_point, handles)))| (id, start_point, end_point, handles)) } - pub(crate) fn pair_handles_and_points_mut_by_index( - &mut self, - index1: usize, - index2: usize, - ) -> (&mut bezier_rs::BezierHandles, &mut usize, &mut usize, &mut bezier_rs::BezierHandles, &mut usize, &mut usize) { + pub(crate) fn pair_handles_and_points_mut_by_index(&mut self, index1: usize, index2: usize) -> (&mut BezierHandles, &mut usize, &mut usize, &mut BezierHandles, &mut usize, &mut usize) { // Use split_at_mut to avoid multiple mutable borrows of the same slice let (handles_first, handles_second) = self.handles.split_at_mut(index2.max(index1)); let (start_first, start_second) = self.start_point.split_at_mut(index2.max(index1)); @@ -672,26 +669,38 @@ impl FoundSubpath { } } -impl VectorData { - /// Construct a [`bezier_rs::Bezier`] curve spanning from the resolved position of the start and end points with the specified handles. - fn segment_to_bezier_with_index(&self, start: usize, end: usize, handles: BezierHandles) -> bezier_rs::Bezier { - let start = self.point_domain.positions()[start]; - let end = self.point_domain.positions()[end]; - bezier_rs::Bezier { start, end, handles } +impl Vector { + /// Construct a [`kurbo::PathSeg`] by resolving the points from their ids. + fn path_segment_from_index(&self, start: usize, end: usize, handles: BezierHandles) -> PathSeg { + let start = dvec2_to_point(self.point_domain.positions()[start]); + let end = dvec2_to_point(self.point_domain.positions()[end]); + + match handles { + BezierHandles::Linear => PathSeg::Line(Line::new(start, end)), + BezierHandles::Quadratic { handle } => PathSeg::Quad(QuadBez::new(start, dvec2_to_point(handle), end)), + BezierHandles::Cubic { handle_start, handle_end } => PathSeg::Cubic(CubicBez::new(start, dvec2_to_point(handle_start), dvec2_to_point(handle_end), end)), + } } - /// Tries to convert a segment with the specified id to a [`bezier_rs::Bezier`], returning None if the id is invalid. - pub fn segment_from_id(&self, id: SegmentId) -> Option { + /// Construct a [`Bezier`] curve spanning from the resolved position of the start and end points with the specified handles. + fn segment_to_bezier_with_index(&self, start: usize, end: usize, handles: BezierHandles) -> Bezier { + let start = self.point_domain.positions()[start]; + let end = self.point_domain.positions()[end]; + Bezier { start, end, handles } + } + + /// Tries to convert a segment with the specified id to a [`Bezier`], returning None if the id is invalid. + pub fn segment_from_id(&self, id: SegmentId) -> Option { self.segment_points_from_id(id).map(|(_, _, bezier)| bezier) } - /// Tries to convert a segment with the specified id to the start and end points and a [`bezier_rs::Bezier`], returning None if the id is invalid. - pub fn segment_points_from_id(&self, id: SegmentId) -> Option<(PointId, PointId, bezier_rs::Bezier)> { + /// Tries to convert a segment with the specified id to the start and end points and a [`Bezier`], returning None if the id is invalid. + pub fn segment_points_from_id(&self, id: SegmentId) -> Option<(PointId, PointId, Bezier)> { Some(self.segment_points_from_index(self.segment_domain.id_to_index(id)?)) } - /// Tries to convert a segment with the specified index to the start and end points and a [`bezier_rs::Bezier`]. - pub fn segment_points_from_index(&self, index: usize) -> (PointId, PointId, bezier_rs::Bezier) { + /// Tries to convert a segment with the specified index to the start and end points and a [`Bezier`]. + pub fn segment_points_from_index(&self, index: usize) -> (PointId, PointId, Bezier) { let start = self.segment_domain.start_point[index]; let end = self.segment_domain.end_point[index]; let start_id = self.point_domain.ids()[start]; @@ -699,8 +708,21 @@ impl VectorData { (start_id, end_id, self.segment_to_bezier_with_index(start, end, self.segment_domain.handles[index])) } - /// Iterator over all of the [`bezier_rs::Bezier`] following the order that they are stored in the segment domain, skipping invalid segments. - pub fn segment_bezier_iter(&self) -> impl Iterator + '_ { + /// Iterator over all of the [`Bezier`] following the order that they are stored in the segment domain, skipping invalid segments. + pub fn segment_iter(&self) -> impl Iterator { + let to_segment = |(((&handles, &id), &start), &end)| (id, self.path_segment_from_index(start, end, handles), self.point_domain.ids()[start], self.point_domain.ids()[end]); + + self.segment_domain + .handles + .iter() + .zip(&self.segment_domain.id) + .zip(self.segment_domain.start_point()) + .zip(self.segment_domain.end_point()) + .map(to_segment) + } + + /// Iterator over all of the [`Bezier`] following the order that they are stored in the segment domain, skipping invalid segments. + pub fn segment_bezier_iter(&self) -> impl Iterator + '_ { let to_bezier = |(((&handles, &id), &start), &end)| (id, self.segment_to_bezier_with_index(start, end, handles), self.point_domain.ids()[start], self.point_domain.ids()[end]); self.segment_domain .handles @@ -782,16 +804,16 @@ impl VectorData { } } - /// Construct a [`bezier_rs::Bezier`] curve from an iterator of segments with (handles, start point, end point) independently of discontinuities. - pub fn subpath_from_segments_ignore_discontinuities(&self, segments: impl Iterator) -> Option> { + /// Construct a [`Bezier`] curve from an iterator of segments with (handles, start point, end point) independently of discontinuities. + pub fn subpath_from_segments_ignore_discontinuities(&self, segments: impl Iterator) -> Option> { let mut first_point = None; - let mut groups = Vec::new(); + let mut manipulators_list = Vec::new(); let mut last: Option<(usize, BezierHandles)> = None; for (handle, start, end) in segments { first_point = Some(first_point.unwrap_or(start)); - groups.push(ManipulatorGroup { + manipulators_list.push(ManipulatorGroup { anchor: self.point_domain.positions()[start], in_handle: last.and_then(|(_, handle)| handle.end()), out_handle: handle.start(), @@ -801,13 +823,13 @@ impl VectorData { last = Some((end, handle)); } - let closed = groups.len() > 1 && last.map(|(point, _)| point) == first_point; + let closed = manipulators_list.len() > 1 && last.map(|(point, _)| point) == first_point; if let Some((end, last_handle)) = last { if closed { - groups[0].in_handle = last_handle.end(); + manipulators_list[0].in_handle = last_handle.end(); } else { - groups.push(ManipulatorGroup { + manipulators_list.push(ManipulatorGroup { anchor: self.point_domain.positions()[end], in_handle: last_handle.end(), out_handle: None, @@ -816,51 +838,11 @@ impl VectorData { } } - Some(bezier_rs::Subpath::new(groups, closed)) + Some(Subpath::new(manipulators_list, closed)) } - /// Construct a [`bezier_rs::Bezier`] curve from an iterator of segments with (handles, start point, end point). Returns None if any ids are invalid or if the segments are not continuous. - fn subpath_from_segments(&self, segments: impl Iterator) -> Option> { - let mut first_point = None; - let mut groups = Vec::new(); - let mut last: Option<(usize, BezierHandles)> = None; - - for (handle, start, end) in segments { - if last.is_some_and(|(previous_end, _)| previous_end != start) { - warn!("subpath_from_segments that were not continuous"); - return None; - } - first_point = Some(first_point.unwrap_or(start)); - - groups.push(ManipulatorGroup { - anchor: self.point_domain.positions()[start], - in_handle: last.and_then(|(_, handle)| handle.end()), - out_handle: handle.start(), - id: self.point_domain.ids()[start], - }); - - last = Some((end, handle)); - } - - let closed = groups.len() > 1 && last.map(|(point, _)| point) == first_point; - - if let Some((end, last_handle)) = last { - if closed { - groups[0].in_handle = last_handle.end(); - } else { - groups.push(ManipulatorGroup { - anchor: self.point_domain.positions()[end], - in_handle: last_handle.end(), - out_handle: None, - id: self.point_domain.ids()[end], - }); - } - } - Some(bezier_rs::Subpath::new(groups, closed)) - } - - /// Construct a [`bezier_rs::Bezier`] curve for each region, skipping invalid regions. - pub fn region_bezier_paths(&self) -> impl Iterator)> + '_ { + /// Construct a [`Bezier`] curve for each region, skipping invalid regions. + pub fn region_manipulator_groups(&self) -> impl Iterator>)> + '_ { self.region_domain .id .iter() @@ -876,7 +858,29 @@ impl VectorData { .zip(self.segment_domain.end_point.get(range)?) .map(|((&handles, &start), &end)| (handles, start, end)); - self.subpath_from_segments(segments_iter).map(|subpath| (id, subpath)) + let mut manipulator_groups = Vec::new(); + let mut in_handle = None; + + for segment in segments_iter { + let (handles, start_point_index, _end_point_index) = segment; + let start_point_id = self.point_domain.id[start_point_index]; + let start_point = self.point_domain.position[start_point_index]; + + let (manipulator_group, next_in_handle) = match handles { + BezierHandles::Linear => (ManipulatorGroup::new_with_id(start_point, in_handle, None, start_point_id), None), + BezierHandles::Quadratic { handle } => (ManipulatorGroup::new_with_id(start_point, in_handle, Some(handle), start_point_id), None), + BezierHandles::Cubic { handle_start, handle_end } => (ManipulatorGroup::new_with_id(start_point, in_handle, Some(handle_start), start_point_id), Some(handle_end)), + }; + + in_handle = next_in_handle; + manipulator_groups.push(manipulator_group); + } + + if let Some(first) = manipulator_groups.first_mut() { + first.in_handle = in_handle; + } + + Some((id, manipulator_groups)) }) } @@ -888,19 +892,19 @@ impl VectorData { } StrokePathIter { - vector_data: self, + vector: self, points, skip: 0, done_one: false, } } - /// Construct a [`bezier_rs::Bezier`] curve for stroke. - pub fn stroke_bezier_paths(&self) -> impl Iterator> { - self.build_stroke_path_iter().map(|(group, closed)| bezier_rs::Subpath::new(group, closed)) + /// Construct a [`Bezier`] curve for stroke. + pub fn stroke_bezier_paths(&self) -> impl Iterator> { + self.build_stroke_path_iter().map(|(manipulators_list, closed)| Subpath::new(manipulators_list, closed)) } - /// Construct and return an iterator of Vec of `(bezier_rs::ManipulatorGroup], bool)` for stroke. + /// Construct and return an iterator of Vec of `(ManipulatorGroup], bool)` for stroke. /// The boolean in the tuple indicates if the path is closed. pub fn stroke_manipulator_groups(&self) -> impl Iterator>, bool)> { self.build_stroke_path_iter() @@ -908,15 +912,15 @@ impl VectorData { /// Construct a [`kurbo::BezPath`] curve for stroke. pub fn stroke_bezpath_iter(&self) -> impl Iterator { - self.build_stroke_path_iter().map(|(group, closed)| { + self.build_stroke_path_iter().map(|(manipulators_list, closed)| { let mut bezpath = kurbo::BezPath::new(); let mut out_handle; - let Some(first) = group.first() else { return bezpath }; + let Some(first) = manipulators_list.first() else { return bezpath }; bezpath.move_to(dvec2_to_point(first.anchor)); out_handle = first.out_handle; - for manipulator in group.iter().skip(1) { + for manipulator in manipulators_list.iter().skip(1) { match (out_handle, manipulator.in_handle) { (Some(handle_start), Some(handle_end)) => bezpath.curve_to(dvec2_to_point(handle_start), dvec2_to_point(handle_end), dvec2_to_point(manipulator.anchor)), (None, None) => bezpath.line_to(dvec2_to_point(manipulator.anchor)), @@ -944,13 +948,11 @@ impl VectorData { self.stroke_bezier_paths().flat_map(|mut path| std::mem::take(path.manipulator_groups_mut())) } - /// Get manipulator by id pub fn manipulator_group_id(&self, id: impl Into) -> Option> { let id = id.into(); - self.manipulator_groups().find(|group| group.id == id) + self.manipulator_groups().find(|manipulators| manipulators.id == id) } - /// Transforms this vector data pub fn transform(&mut self, transform: DAffine2) { self.point_domain.transform(transform); self.segment_domain.transform(transform); @@ -1018,7 +1020,7 @@ impl StrokePathIterPointMetadata { #[derive(Clone)] pub struct StrokePathIter<'a> { - vector_data: &'a VectorData, + vector: &'a Vector, points: Vec, skip: usize, done_one: bool, @@ -1041,36 +1043,36 @@ impl Iterator for StrokePathIter<'_> { // There will always be one (seeing as we checked above) let mut point_index = current_start; - let mut groups = Vec::new(); + let mut manipulators_list = Vec::new(); let mut in_handle = None; let mut closed = false; loop { let Some(val) = self.points[point_index].take_first() else { // Dead end - groups.push(ManipulatorGroup { - anchor: self.vector_data.point_domain.positions()[point_index], + manipulators_list.push(ManipulatorGroup { + anchor: self.vector.point_domain.positions()[point_index], in_handle, out_handle: None, - id: self.vector_data.point_domain.ids()[point_index], + id: self.vector.point_domain.ids()[point_index], }); break; }; - let mut handles = self.vector_data.segment_domain.handles()[val.segment_index]; + let mut handles = self.vector.segment_domain.handles()[val.segment_index]; if val.start_from_end { handles = handles.reversed(); } let next_point_index = if val.start_from_end { - self.vector_data.segment_domain.start_point()[val.segment_index] + self.vector.segment_domain.start_point()[val.segment_index] } else { - self.vector_data.segment_domain.end_point()[val.segment_index] + self.vector.segment_domain.end_point()[val.segment_index] }; - groups.push(ManipulatorGroup { - anchor: self.vector_data.point_domain.positions()[point_index], + manipulators_list.push(ManipulatorGroup { + anchor: self.vector.point_domain.positions()[point_index], in_handle, out_handle: handles.start(), - id: self.vector_data.point_domain.ids()[point_index], + id: self.vector.point_domain.ids()[point_index], }); in_handle = handles.end(); @@ -1079,22 +1081,22 @@ impl Iterator for StrokePathIter<'_> { self.points[next_point_index].take_eq(val.flipped()); if next_point_index == current_start { closed = true; - groups[0].in_handle = in_handle; + manipulators_list[0].in_handle = in_handle; break; } } - Some((groups, closed)) + Some((manipulators_list, closed)) } } -impl bezier_rs::Identifier for PointId { +impl Identifier for PointId { fn new() -> Self { Self::generate() } } -/// Represents the conversion of ids used when concatenating vector data with conflicting ids. +/// Represents the conversion of IDs used when concatenating vector paths with conflicting IDs. pub struct IdMap { pub point_offset: usize, pub point_map: HashMap, diff --git a/node-graph/gcore/src/vector/vector_data/indexed.rs b/node-graph/gcore/src/vector/vector_data/indexed.rs deleted file mode 100644 index e3e1c3cdf9..0000000000 --- a/node-graph/gcore/src/vector/vector_data/indexed.rs +++ /dev/null @@ -1,90 +0,0 @@ -use super::{PointId, SegmentId, VectorData}; -use glam::DVec2; -use petgraph::graph::{EdgeIndex, NodeIndex, UnGraph}; -use rustc_hash::FxHashMap; - -/// All the fixed fields of a point from the point domain. -pub struct Point { - pub id: PointId, - pub position: DVec2, -} - -/// Useful indexes to speed up various operations on `VectorData`. -/// -/// Important: It is the user's responsibility to ensure the indexes remain valid after mutations to the data. -pub struct VectorDataIndex { - /// Points and segments form a graph. Store it here in a form amenable to graph algorithms. - /// - /// Currently, segment data is not stored as it is not used, but it could easily be added. - pub(crate) point_graph: UnGraph, - pub(crate) segment_to_edge: FxHashMap, - /// Get the offset from the point ID. - pub(crate) point_to_offset: FxHashMap, - // TODO: faces -} - -impl VectorDataIndex { - /// Construct a [`VectorDataIndex`] by building indexes from the given [`VectorData`]. Takes `O(n)` time. - pub fn build_from(data: &VectorData) -> Self { - let point_to_offset = data.point_domain.ids().iter().copied().enumerate().map(|(a, b)| (b, a)).collect::>(); - - let mut point_to_node = FxHashMap::default(); - let mut segment_to_edge = FxHashMap::default(); - - let mut graph = UnGraph::new_undirected(); - - for (point_id, position) in data.point_domain.iter() { - let idx = graph.add_node(Point { id: point_id, position }); - point_to_node.insert(point_id, idx); - } - - for (segment_id, start_offset, end_offset, ..) in data.segment_domain.iter() { - let start_id = data.point_domain.ids()[start_offset]; - let end_id = data.point_domain.ids()[end_offset]; - let edge = graph.add_edge(point_to_node[&start_id], point_to_node[&end_id], ()); - - segment_to_edge.insert(segment_id, edge); - } - - Self { - point_graph: graph, - segment_to_edge, - point_to_offset, - } - } - - /// Fetch the length of given segment's chord. Takes `O(1)` time. - /// - /// # Panics - /// - /// Will panic if no segment with the given ID is found. - pub fn segment_chord_length(&self, id: SegmentId) -> f64 { - let edge_idx = self.segment_to_edge[&id]; - let (start, end) = self.point_graph.edge_endpoints(edge_idx).unwrap(); - let start_position = self.point_graph.node_weight(start).unwrap().position; - let end_position = self.point_graph.node_weight(end).unwrap().position; - (start_position - end_position).length() - } - - /// Get the ends of a segment. Takes `O(1)` time. - /// - /// The IDs will be ordered [smallest, largest] so they can be used to find other segments with the same endpoints, regardless of direction. - /// - /// # Panics - /// - /// This function will panic if the ID is not present. - pub fn segment_ends(&self, id: SegmentId) -> [NodeIndex; 2] { - let (start, end) = self.point_graph.edge_endpoints(self.segment_to_edge[&id]).unwrap(); - if start < end { [start, end] } else { [end, start] } - } - - /// Get the physical location of a point. Takes `O(1)` time. - /// - /// # Panics - /// - /// Will panic if `id` isn't in the data. - pub fn point_position(&self, id: PointId, data: &VectorData) -> DVec2 { - let offset = self.point_to_offset[&id]; - data.point_domain.positions()[offset] - } -} diff --git a/node-graph/gcore/src/vector/vector_data/modification.rs b/node-graph/gcore/src/vector/vector_modification.rs similarity index 77% rename from node-graph/gcore/src/vector/vector_data/modification.rs rename to node-graph/gcore/src/vector/vector_modification.rs index a8f0ae9795..6a10588dd4 100644 --- a/node-graph/gcore/src/vector/vector_data/modification.rs +++ b/node-graph/gcore/src/vector/vector_modification.rs @@ -1,14 +1,16 @@ use super::*; use crate::Ctx; -use crate::instances::Instance; +use crate::subpath::BezierHandles; +use crate::table::{Table, TableRow}; use crate::uuid::{NodeId, generate_uuid}; -use bezier_rs::BezierHandles; +use crate::vector::misc::{HandleId, HandleType, point_to_dvec2}; use dyn_any::DynAny; +use glam::{DAffine2, DVec2}; use kurbo::{BezPath, PathEl, Point}; use std::collections::{HashMap, HashSet}; use std::hash::BuildHasher; -/// Represents a procedural change to the [`PointDomain`] in [`VectorData`]. +/// Represents a procedural change to the [`PointDomain`] in [`Vector`]. #[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] pub struct PointModification { add: Vec, @@ -58,12 +60,12 @@ impl PointModification { } } - /// Create a new modification that will convert an empty [`VectorData`] into the target [`VectorData`]. - pub fn create_from_vector(vector_data: &VectorData) -> Self { + /// Create a new modification that will convert an empty [`Vector`] into the target [`Vector`]. + pub fn create_from_vector(vector: &Vector) -> Self { Self { - add: vector_data.point_domain.ids().to_vec(), + add: vector.point_domain.ids().to_vec(), remove: HashSet::new(), - delta: vector_data.point_domain.ids().iter().copied().zip(vector_data.point_domain.positions().iter().cloned()).collect(), + delta: vector.point_domain.ids().iter().copied().zip(vector.point_domain.positions().iter().cloned()).collect(), } } @@ -79,7 +81,7 @@ impl PointModification { } } -/// Represents a procedural change to the [`SegmentDomain`] in [`VectorData`]. +/// Represents a procedural change to the [`SegmentDomain`] in [`Vector`]. #[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] pub struct SegmentModification { add: Vec, @@ -177,11 +179,11 @@ impl SegmentModification { let Some(&stroke) = self.stroke.get(&add_id) else { continue }; let Some(start_index) = point_domain.resolve_id(start) else { - warn!("invalid start id: {:#?}", start); + warn!("invalid start id: {start:#?}"); continue; }; let Some(end_index) = point_domain.resolve_id(end) else { - warn!("invalid end id: {:#?}", end); + warn!("invalid end id: {end:#?}"); continue; }; @@ -206,27 +208,25 @@ impl SegmentModification { assert!( segment_domain.start_point().iter().all(|&index| index < point_domain.ids().len()), - "index should be in range {:#?}", - segment_domain + "index should be in range {segment_domain:#?}" ); assert!( segment_domain.end_point().iter().all(|&index| index < point_domain.ids().len()), - "index should be in range {:#?}", - segment_domain + "index should be in range {segment_domain:#?}" ); } - /// Create a new modification that will convert an empty [`VectorData`] into the target [`VectorData`]. - pub fn create_from_vector(vector_data: &VectorData) -> Self { - let point_id = |(&segment, &index)| (segment, vector_data.point_domain.ids()[index]); + /// Create a new modification that will convert an empty [`Vector`] into the target [`Vector`]. + pub fn create_from_vector(vector: &Vector) -> Self { + let point_id = |(&segment, &index)| (segment, vector.point_domain.ids()[index]); Self { - add: vector_data.segment_domain.ids().to_vec(), + add: vector.segment_domain.ids().to_vec(), remove: HashSet::new(), - start_point: vector_data.segment_domain.ids().iter().zip(vector_data.segment_domain.start_point()).map(point_id).collect(), - end_point: vector_data.segment_domain.ids().iter().zip(vector_data.segment_domain.end_point()).map(point_id).collect(), - handle_primary: vector_data.segment_bezier_iter().map(|(id, b, _, _)| (id, b.handle_start().map(|handle| handle - b.start))).collect(), - handle_end: vector_data.segment_bezier_iter().map(|(id, b, _, _)| (id, b.handle_end().map(|handle| handle - b.end))).collect(), - stroke: vector_data.segment_domain.ids().iter().copied().zip(vector_data.segment_domain.stroke().iter().cloned()).collect(), + start_point: vector.segment_domain.ids().iter().zip(vector.segment_domain.start_point()).map(point_id).collect(), + end_point: vector.segment_domain.ids().iter().zip(vector.segment_domain.end_point()).map(point_id).collect(), + handle_primary: vector.segment_bezier_iter().map(|(id, b, _, _)| (id, b.handle_start().map(|handle| handle - b.start))).collect(), + handle_end: vector.segment_bezier_iter().map(|(id, b, _, _)| (id, b.handle_end().map(|handle| handle - b.end))).collect(), + stroke: vector.segment_domain.ids().iter().copied().zip(vector.segment_domain.stroke().iter().cloned()).collect(), } } @@ -251,7 +251,7 @@ impl SegmentModification { } } -/// Represents a procedural change to the [`RegionDomain`] in [`VectorData`]. +/// Represents a procedural change to the [`RegionDomain`] in [`Vector`]. #[derive(Clone, Debug, Default, PartialEq, serde::Serialize, serde::Deserialize)] pub struct RegionModification { add: Vec, @@ -284,18 +284,18 @@ impl RegionModification { } } - /// Create a new modification that will convert an empty [`VectorData`] into the target [`VectorData`]. - pub fn create_from_vector(vector_data: &VectorData) -> Self { + /// Create a new modification that will convert an empty [`Vector`] into the target [`Vector`]. + pub fn create_from_vector(vector: &Vector) -> Self { Self { - add: vector_data.region_domain.ids().to_vec(), + add: vector.region_domain.ids().to_vec(), remove: HashSet::new(), - segment_range: vector_data.region_domain.ids().iter().copied().zip(vector_data.region_domain.segment_range().iter().cloned()).collect(), - fill: vector_data.region_domain.ids().iter().copied().zip(vector_data.region_domain.fill().iter().cloned()).collect(), + segment_range: vector.region_domain.ids().iter().copied().zip(vector.region_domain.segment_range().iter().cloned()).collect(), + fill: vector.region_domain.ids().iter().copied().zip(vector.region_domain.fill().iter().cloned()).collect(), } } } -/// Represents a procedural change to the [`VectorData`]. +/// Represents a procedural change to the [`Vector`]. #[derive(Clone, Debug, Default, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] pub struct VectorModification { points: PointModification, @@ -327,27 +327,27 @@ pub enum VectorModificationType { } impl VectorModification { - /// Apply this modification to the specified [`VectorData`]. - pub fn apply(&self, vector_data: &mut VectorData) { - self.points.apply(&mut vector_data.point_domain, &mut vector_data.segment_domain); - self.segments.apply(&mut vector_data.segment_domain, &vector_data.point_domain); - self.regions.apply(&mut vector_data.region_domain); + /// Apply this modification to the specified [`Vector`]. + pub fn apply(&self, vector: &mut Vector) { + self.points.apply(&mut vector.point_domain, &mut vector.segment_domain); + self.segments.apply(&mut vector.segment_domain, &vector.point_domain); + self.regions.apply(&mut vector.region_domain); - let valid = |val: &[HandleId; 2]| vector_data.segment_domain.ids().contains(&val[0].segment) && vector_data.segment_domain.ids().contains(&val[1].segment); - vector_data + let valid = |val: &[HandleId; 2]| vector.segment_domain.ids().contains(&val[0].segment) && vector.segment_domain.ids().contains(&val[1].segment); + vector .colinear_manipulators .retain(|val| !self.remove_g1_continuous.contains(val) && !self.remove_g1_continuous.contains(&[val[1], val[0]]) && valid(val)); for handles in &self.add_g1_continuous { - if !vector_data.colinear_manipulators.iter().any(|test| test == handles || test == &[handles[1], handles[0]]) && valid(handles) { - vector_data.colinear_manipulators.push(*handles); + if !vector.colinear_manipulators.iter().any(|test| test == handles || test == &[handles[1], handles[0]]) && valid(handles) { + vector.colinear_manipulators.push(*handles); } } } /// Add a [`VectorModificationType`] to this modification. - pub fn modify(&mut self, vector_data_modification: &VectorModificationType) { - match vector_data_modification { + pub fn modify(&mut self, vector_modification: &VectorModificationType) { + match vector_modification { VectorModificationType::InsertSegment { id, points, handles } => self.segments.push(*id, *points, *handles, StrokeId::ZERO), VectorModificationType::InsertPoint { id, position } => self.points.push(*id, *position), @@ -400,13 +400,13 @@ impl VectorModification { } } - /// Create a new modification that will convert an empty [`VectorData`] into the target [`VectorData`]. - pub fn create_from_vector(vector_data: &VectorData) -> Self { + /// Create a new modification that will convert an empty [`Vector`] into the target [`Vector`]. + pub fn create_from_vector(vector: &Vector) -> Self { Self { - points: PointModification::create_from_vector(vector_data), - segments: SegmentModification::create_from_vector(vector_data), - regions: RegionModification::create_from_vector(vector_data), - add_g1_continuous: vector_data.colinear_manipulators.iter().copied().collect(), + points: PointModification::create_from_vector(vector), + segments: SegmentModification::create_from_vector(vector), + regions: RegionModification::create_from_vector(vector), + add_g1_continuous: vector.colinear_manipulators.iter().copied().collect(), remove_g1_continuous: HashSet::new(), } } @@ -420,38 +420,38 @@ impl Hash for VectorModification { /// Applies a diff modification to a vector path. #[node_macro::node(category(""))] -async fn path_modify(_ctx: impl Ctx, mut vector_data: VectorDataTable, modification: Box, node_path: Vec) -> VectorDataTable { - if vector_data.is_empty() { - vector_data.push(Instance::default()); +async fn path_modify(_ctx: impl Ctx, mut vector: Table, modification: Box, node_path: Vec) -> Table { + if vector.is_empty() { + vector.push(TableRow::default()); } - let vector_data_instance = vector_data.get_mut(0).expect("push should give one item"); - modification.apply(vector_data_instance.instance); + let row = vector.get_mut(0).expect("push should give one item"); + modification.apply(row.element); // Update the source node id let this_node_path = node_path.iter().rev().nth(1).copied(); - *vector_data_instance.source_node_id = vector_data_instance.source_node_id.or(this_node_path); + *row.source_node_id = row.source_node_id.or(this_node_path); - if vector_data.len() > 1 { - warn!("The path modify ran on {} instances of vector data. Only the first can be modified.", vector_data.len()); + if vector.len() > 1 { + warn!("The path modify ran on {} vector rows. Only the first can be modified.", vector.len()); } - vector_data + vector } /// Applies the vector path's local transformation to its geometry and resets it to the identity. #[node_macro::node(category("Vector"))] -async fn apply_transform(_ctx: impl Ctx, mut vector_data: VectorDataTable) -> VectorDataTable { - for vector_data_instance in vector_data.instance_mut_iter() { - let vector_data = vector_data_instance.instance; - let transform = *vector_data_instance.transform; +async fn apply_transform(_ctx: impl Ctx, mut vector: Table) -> Table { + for row in vector.iter_mut() { + let vector = row.element; + let transform = *row.transform; - for (_, point) in vector_data.point_domain.positions_mut() { + for (_, point) in vector.point_domain.positions_mut() { *point = transform.transform_point2(*point); } - *vector_data_instance.transform = DAffine2::IDENTITY; + *row.transform = DAffine2::IDENTITY; } - vector_data + vector } // Do we want to enforce that all serialized/deserialized hashmaps are a vec of tuples? @@ -524,11 +524,11 @@ pub struct AppendBezpath<'a> { last_segment_id: Option, point_id: PointId, segment_id: SegmentId, - vector_data: &'a mut VectorData, + vector: &'a mut Vector, } impl<'a> AppendBezpath<'a> { - fn new(vector_data: &'a mut VectorData) -> Self { + fn new(vector: &'a mut Vector) -> Self { Self { first_point: None, last_point: None, @@ -536,9 +536,9 @@ impl<'a> AppendBezpath<'a> { last_point_index: None, first_segment_id: None, last_segment_id: None, - point_id: vector_data.point_domain.next_id(), - segment_id: vector_data.segment_domain.next_id(), - vector_data, + point_id: vector.point_domain.next_id(), + segment_id: vector.segment_domain.next_id(), + vector, } } @@ -555,28 +555,28 @@ impl<'a> AppendBezpath<'a> { // Create a new segment. let next_segment_id = self.segment_id.next_id(); - self.vector_data + self.vector .segment_domain .push(next_segment_id, self.last_point_index.unwrap(), self.first_point_index.unwrap(), handle, StrokeId::ZERO); // Create a new region. - let next_region_id = self.vector_data.region_domain.next_id(); + let next_region_id = self.vector.region_domain.next_id(); let first_segment_id = self.first_segment_id.unwrap_or(next_segment_id); let last_segment_id = next_segment_id; - self.vector_data.region_domain.push(next_region_id, first_segment_id..=last_segment_id, FillId::ZERO); + self.vector.region_domain.push(next_region_id, first_segment_id..=last_segment_id, FillId::ZERO); } fn append_segment(&mut self, end_point: Point, handle: BezierHandles) { // Append the point. - let next_point_index = self.vector_data.point_domain.ids().len(); + let next_point_index = self.vector.point_domain.ids().len(); let next_point_id = self.point_id.next_id(); - self.vector_data.point_domain.push(next_point_id, point_to_dvec2(end_point)); + self.vector.point_domain.push(next_point_id, point_to_dvec2(end_point)); // Append the segment. let next_segment_id = self.segment_id.next_id(); - self.vector_data + self.vector .segment_domain .push(next_segment_id, self.last_point_index.unwrap(), next_point_index, handle, StrokeId::ZERO); @@ -593,8 +593,8 @@ impl<'a> AppendBezpath<'a> { self.last_point = Some(point); // Append the first point. - let next_point_index = self.vector_data.point_domain.ids().len(); - self.vector_data.point_domain.push(self.point_id.next_id(), point_to_dvec2(point)); + let next_point_index = self.vector.point_domain.ids().len(); + self.vector.point_domain.push(self.point_id.next_id(), point_to_dvec2(point)); // Update the state. self.first_point_index = Some(next_point_index); @@ -610,8 +610,8 @@ impl<'a> AppendBezpath<'a> { self.last_segment_id = None; } - pub fn append_bezpath(vector_data: &'a mut VectorData, bezpath: BezPath) { - let mut this = Self::new(vector_data); + pub fn append_bezpath(vector: &'a mut Vector, bezpath: BezPath) { + let mut this = Self::new(vector); let mut elements = bezpath.elements().iter().peekable(); while let Some(element) = elements.next() { @@ -656,12 +656,11 @@ impl<'a> AppendBezpath<'a> { } } -pub trait VectorDataExt { - /// Appends a Kurbo BezPath to the vector data. +pub trait VectorExt { fn append_bezpath(&mut self, bezpath: BezPath); } -impl VectorDataExt for VectorData { +impl VectorExt for Vector { fn append_bezpath(&mut self, bezpath: BezPath) { AppendBezpath::append_bezpath(self, bezpath); } @@ -685,62 +684,62 @@ impl HandleExt for HandleId { #[cfg(test)] mod tests { + use kurbo::{PathSeg, QuadBez}; + use super::*; + use crate::subpath::{Bezier, Subpath}; + #[test] fn modify_new() { - let vector_data = VectorData::from_subpaths( - [bezier_rs::Subpath::new_ellipse(DVec2::ZERO, DVec2::ONE), bezier_rs::Subpath::new_rect(DVec2::NEG_ONE, DVec2::ZERO)], - false, - ); + let vector = Vector::from_subpaths([Subpath::new_ellipse(DVec2::ZERO, DVec2::ONE), Subpath::new_rect(DVec2::NEG_ONE, DVec2::ZERO)], false); - let modify = VectorModification::create_from_vector(&vector_data); + let modify = VectorModification::create_from_vector(&vector); - let mut new = VectorData::default(); + let mut new = Vector::default(); modify.apply(&mut new); - assert_eq!(vector_data, new); + assert_eq!(vector, new); } #[test] fn modify_existing() { - use bezier_rs::{Bezier, Subpath}; let subpaths = [ Subpath::new_ellipse(DVec2::ZERO, DVec2::ONE), Subpath::new_rect(DVec2::NEG_ONE, DVec2::ZERO), Subpath::from_beziers( &[ - Bezier::from_quadratic_dvec2(DVec2::new(0., 0.), DVec2::new(5., 10.), DVec2::new(10., 0.)), - Bezier::from_quadratic_dvec2(DVec2::new(10., 0.), DVec2::new(15., 10.), DVec2::new(20., 0.)), + PathSeg::Quad(QuadBez::new(Point::new(0., 0.), Point::new(5., 10.), Point::new(10., 0.))), + PathSeg::Quad(QuadBez::new(Point::new(10., 0.), Point::new(15., 10.), Point::new(20., 0.))), ], false, ), ]; - let mut vector_data = VectorData::from_subpaths(subpaths, false); + let mut vector = Vector::from_subpaths(subpaths, false); - let mut modify_new = VectorModification::create_from_vector(&vector_data); + let mut modify_new = VectorModification::create_from_vector(&vector); let mut modify_original = VectorModification::default(); for modification in [&mut modify_new, &mut modify_original] { - let point = vector_data.point_domain.ids()[0]; + let point = vector.point_domain.ids()[0]; modification.modify(&VectorModificationType::ApplyPointDelta { point, delta: DVec2::X * 0.5 }); - let point = vector_data.point_domain.ids()[9]; + let point = vector.point_domain.ids()[9]; modification.modify(&VectorModificationType::ApplyPointDelta { point, delta: DVec2::X }); } - let mut new = VectorData::default(); + let mut new = Vector::default(); modify_new.apply(&mut new); - modify_original.apply(&mut vector_data); + modify_original.apply(&mut vector); - assert_eq!(vector_data, new); - assert_eq!(vector_data.point_domain.positions()[0], DVec2::X); - assert_eq!(vector_data.point_domain.positions()[9], DVec2::new(11., 0.)); + assert_eq!(vector, new); + assert_eq!(vector.point_domain.positions()[0], DVec2::X); + assert_eq!(vector.point_domain.positions()[9], DVec2::new(11., 0.)); assert_eq!( - vector_data.segment_bezier_iter().nth(8).unwrap().1, + vector.segment_bezier_iter().nth(8).unwrap().1, Bezier::from_quadratic_dvec2(DVec2::new(0., 0.), DVec2::new(5., 10.), DVec2::new(11., 0.)) ); assert_eq!( - vector_data.segment_bezier_iter().nth(9).unwrap().1, + vector.segment_bezier_iter().nth(9).unwrap().1, Bezier::from_quadratic_dvec2(DVec2::new(11., 0.), DVec2::new(16., 10.), DVec2::new(20., 0.)) ); } diff --git a/node-graph/gcore/src/vector/vector_nodes.rs b/node-graph/gcore/src/vector/vector_nodes.rs index d54406845d..2a6e68889e 100644 --- a/node-graph/gcore/src/vector/vector_nodes.rs +++ b/node-graph/gcore/src/vector/vector_nodes.rs @@ -1,89 +1,86 @@ -use super::algorithms::bezpath_algorithms::{self, position_on_bezpath, sample_polyline_on_bezpath, split_bezpath, tangent_on_bezpath}; -use super::algorithms::offset_subpath::offset_subpath; +use super::algorithms::bezpath_algorithms::{self, TValue, evaluate_bezpath, sample_polyline_on_bezpath, split_bezpath, tangent_on_bezpath}; +use super::algorithms::offset_subpath::offset_bezpath; use super::algorithms::spline::{solve_spline_first_handle_closed, solve_spline_first_handle_open}; -use super::misc::{CentroidType, point_to_dvec2}; +use super::misc::{CentroidType, bezpath_from_manipulator_groups, bezpath_to_manipulator_groups, point_to_dvec2}; use super::style::{Fill, Gradient, GradientStops, Stroke}; -use super::{PointId, SegmentDomain, SegmentId, StrokeId, VectorData, VectorDataExt, VectorDataTable}; -use crate::bounds::BoundingBox; -use crate::instances::{Instance, InstanceMut, Instances}; -use crate::raster_types::{CPU, GPU, RasterDataTable}; +use super::{PointId, SegmentDomain, SegmentId, StrokeId, Vector, VectorExt}; +use crate::bounds::{BoundingBox, RenderBoundingBox}; +use crate::raster_types::{CPU, GPU, Raster}; use crate::registry::types::{Angle, Fraction, IntegerCount, Length, Multiplier, Percentage, PixelLength, PixelSize, SeedValue}; +use crate::subpath::{BezierHandles, ManipulatorGroup}; +use crate::table::{Table, TableRow, TableRowMut}; use crate::transform::{Footprint, ReferencePoint, Transform}; use crate::vector::PointDomain; -use crate::vector::algorithms::bezpath_algorithms::{eval_pathseg_euclidean, is_linear}; +use crate::vector::algorithms::bezpath_algorithms::eval_pathseg_euclidean; use crate::vector::algorithms::merge_by_distance::MergeByDistanceExt; -use crate::vector::misc::{MergeByDistanceAlgorithm, PointSpacingType}; +use crate::vector::misc::{MergeByDistanceAlgorithm, PointSpacingType, is_linear}; use crate::vector::misc::{handles_to_segment, segment_to_handles}; use crate::vector::style::{PaintOrder, StrokeAlign, StrokeCap, StrokeJoin}; use crate::vector::{FillId, RegionId}; -use crate::{CloneVarArgs, Color, Context, Ctx, ExtractAll, GraphicElement, GraphicGroupTable, OwnedContextImpl}; - -use bezier_rs::{BezierHandles, Join, ManipulatorGroup, Subpath}; +use crate::{CloneVarArgs, Color, Context, Ctx, ExtractAll, Graphic, OwnedContextImpl}; use core::f64::consts::PI; use core::hash::{Hash, Hasher}; use glam::{DAffine2, DVec2}; -use kurbo::{Affine, BezPath, DEFAULT_ACCURACY, ParamCurve, PathEl, PathSeg, Shape}; +use kurbo::{Affine, BezPath, DEFAULT_ACCURACY, Line, ParamCurve, PathEl, PathSeg, Shape}; use rand::{Rng, SeedableRng}; use std::collections::hash_map::DefaultHasher; use std::f64::consts::TAU; -/// Implemented for types that can be converted to an iterator of vector data. -/// Used for the fill and stroke node so they can be used on VectorData or GraphicGroup -trait VectorDataTableIterMut { - fn vector_iter_mut(&mut self) -> impl Iterator>; +/// Implemented for types that can be converted to an iterator of vector rows. +/// Used for the fill and stroke node so they can be used on `Table` or `Table`. +trait VectorTableIterMut { + fn vector_iter_mut(&mut self) -> impl Iterator>; } -impl VectorDataTableIterMut for GraphicGroupTable { - fn vector_iter_mut(&mut self) -> impl Iterator> { +impl VectorTableIterMut for Table { + fn vector_iter_mut(&mut self) -> impl Iterator> { // Grab only the direct children - self.instance_mut_iter() - .filter_map(|element| element.instance.as_vector_data_mut()) - .flat_map(move |vector_data| vector_data.instance_mut_iter()) + self.iter_mut().filter_map(|element| element.element.as_vector_mut()).flat_map(move |vector| vector.iter_mut()) } } -impl VectorDataTableIterMut for VectorDataTable { - fn vector_iter_mut(&mut self) -> impl Iterator> { - self.instance_mut_iter() +impl VectorTableIterMut for Table { + fn vector_iter_mut(&mut self) -> impl Iterator> { + self.iter_mut() } } #[node_macro::node(category("Vector: Style"), path(graphene_core::vector))] async fn assign_colors( _: impl Ctx, - #[implementations(GraphicGroupTable, VectorDataTable)] + /// The content with vector paths to apply the fill and/or stroke style to. + #[implementations(Table, Table)] #[widget(ParsedWidgetOverride::Hidden)] - /// The vector elements, or group of vector elements, to apply the fill and/or stroke style to. - mut vector_group: T, - #[default(true)] + mut content: T, /// Whether to style the fill. + #[default(true)] fill: bool, /// Whether to style the stroke. stroke: bool, - #[widget(ParsedWidgetOverride::Custom = "assign_colors_gradient")] /// The range of colors to select from. + #[widget(ParsedWidgetOverride::Custom = "assign_colors_gradient")] gradient: GradientStops, /// Whether to reverse the gradient. reverse: bool, /// Whether to randomize the color selection for each element from throughout the gradient. randomize: bool, - #[widget(ParsedWidgetOverride::Custom = "assign_colors_seed")] /// The seed used for randomization. /// Seed to determine unique variations on the randomized color selection. + #[widget(ParsedWidgetOverride::Custom = "assign_colors_seed")] seed: SeedValue, - #[widget(ParsedWidgetOverride::Custom = "assign_colors_repeat_every")] /// The number of elements to span across the gradient before repeating. A 0 value will span the entire gradient once. + #[widget(ParsedWidgetOverride::Custom = "assign_colors_repeat_every")] repeat_every: u32, ) -> T where - T: VectorDataTableIterMut + 'n + Send, + T: VectorTableIterMut + 'n + Send, { - let length = vector_group.vector_iter_mut().count(); + let length = content.vector_iter_mut().count(); let gradient = if reverse { gradient.reversed() } else { gradient }; let mut rng = rand::rngs::StdRng::seed_from_u64(seed.into()); - for (i, vector_data) in vector_group.vector_iter_mut().enumerate() { + for (i, vector) in content.vector_iter_mut().enumerate() { let factor = match randomize { true => rng.random::(), false => match repeat_every { @@ -96,83 +93,70 @@ where let color = gradient.evaluate(factor); if fill { - vector_data.instance.style.set_fill(Fill::Solid(color)); + vector.element.style.set_fill(Fill::Solid(color)); } if stroke { - if let Some(stroke) = vector_data.instance.style.stroke().and_then(|stroke| stroke.with_color(&Some(color))) { - vector_data.instance.style.set_stroke(stroke); + if let Some(stroke) = vector.element.style.stroke().and_then(|stroke| stroke.with_color(&Some(color))) { + vector.element.style.set_stroke(stroke); } } } - vector_group + content } #[node_macro::node(category("Vector: Style"), path(graphene_core::vector), properties("fill_properties"))] -async fn fill + 'n + Send, V>( +async fn fill + 'n + Send, V: VectorTableIterMut + 'n + Send>( _: impl Ctx, + /// The content with vector paths to apply the fill style to. #[implementations( - VectorDataTable, - VectorDataTable, - VectorDataTable, - VectorDataTable, - GraphicGroupTable, - GraphicGroupTable, - GraphicGroupTable, - GraphicGroupTable + Table, + Table, + Table, + Table, + Table, + Table, + Table, + Table, )] - /// The vector elements, or group of vector elements, to apply the fill to. - mut vector_data: V, + mut content: V, + /// The fill to paint the path with. #[implementations( Fill, - Option, - Color, + Table, + Table, Gradient, Fill, - Option, - Color, + Table, + Table, Gradient, )] #[default(Color::BLACK)] - /// The fill to paint the path with. fill: F, - _backup_color: Option, + _backup_color: Table, _backup_gradient: Gradient, -) -> V -where - V: VectorDataTableIterMut + 'n + Send, -{ +) -> V { let fill: Fill = fill.into(); - for vector in vector_data.vector_iter_mut() { - let mut fill = fill.clone(); - if let Fill::Gradient(gradient) = &mut fill { - gradient.transform *= *vector.transform; - } - vector.instance.style.set_fill(fill); + for vector in content.vector_iter_mut() { + vector.element.style.set_fill(fill.clone()); } - vector_data + content } -/// Applies a stroke style to the vector data contained in the input. +/// Applies a stroke style to the vector contained in the input. #[node_macro::node(category("Vector: Style"), path(graphene_core::vector), properties("stroke_properties"))] -async fn stroke> + 'n + Send, V>( +async fn stroke( _: impl Ctx, - #[implementations(VectorDataTable, VectorDataTable, GraphicGroupTable, GraphicGroupTable)] - /// The vector elements, or group of vector elements, to apply the stroke to. - mut vector_data: Instances, - #[implementations( - Option, - Color, - Option, - Color, - )] - #[default(Color::BLACK)] + /// The content with vector paths to apply the stroke style to. + #[implementations(Table, Table)] + mut content: Table, /// The stroke color. - color: C, + #[default(Color::BLACK)] + color: Table, + /// The stroke weight. #[unit(" px")] #[default(2.)] - /// The stroke weight. weight: f64, /// The alignment of stroke to the path's centerline or (for closed shapes) the inside or outside of the shape. align: StrokeAlign, @@ -180,8 +164,8 @@ async fn stroke> + 'n + Send, V>( cap: StrokeCap, /// The curvature of the bent stroke at sharp corners. join: StrokeJoin, - #[default(4.)] /// The threshold for when a miter-joined stroke is converted to a bevel-joined stroke when a sharp angle becomes pointier than this ratio. + #[default(4.)] miter_limit: f64, /// The order to paint the stroke on top of the fill, or the fill on top of the stroke. /// @@ -191,9 +175,9 @@ async fn stroke> + 'n + Send, V>( /// The phase offset distance from the starting point of the dash pattern. #[unit(" px")] dash_offset: f64, -) -> Instances +) -> Table where - Instances: VectorDataTableIterMut + 'n + Send, + Table: VectorTableIterMut + 'n + Send, { let stroke = Stroke { color: color.into(), @@ -209,45 +193,45 @@ where paint_order, }; - for vector in vector_data.vector_iter_mut() { + for vector in content.vector_iter_mut() { let mut stroke = stroke.clone(); stroke.transform *= *vector.transform; - vector.instance.style.set_stroke(stroke); + vector.element.style.set_stroke(stroke); } - vector_data + content } #[node_macro::node(category("Instancing"), path(graphene_core::vector))] async fn repeat( _: impl Ctx, - // TODO: Implement other GraphicElementRendered types. - #[implementations(GraphicGroupTable, VectorDataTable, RasterDataTable)] instance: Instances, + // TODO: Implement other graphical types. + #[implementations(Table, Table, Table>, Table, Table)] instance: Table, #[default(100., 100.)] // TODO: When using a custom Properties panel layout in document_node_definitions.rs and this default is set, the widget weirdly doesn't show up in the Properties panel. Investigation is needed. direction: PixelSize, angle: Angle, - #[default(4)] instances: IntegerCount, -) -> Instances { + #[default(4)] count: IntegerCount, +) -> Table { let angle = angle.to_radians(); - let count = instances.max(1); + let count = count.max(1); let total = (count - 1) as f64; - let mut result_table = Instances::::default(); + let mut result_table = Table::new(); for index in 0..count { let angle = index as f64 * angle / total; let translation = index as f64 * direction / total; let transform = DAffine2::from_angle(angle) * DAffine2::from_translation(translation); - for instance in instance.instance_ref_iter() { - let mut instance = instance.to_instance_cloned(); + for row in instance.iter() { + let mut row = row.into_cloned(); - let local_translation = DAffine2::from_translation(instance.transform.translation); - let local_matrix = DAffine2::from_mat2(instance.transform.matrix2); - instance.transform = local_translation * transform * local_matrix; + let local_translation = DAffine2::from_translation(row.transform.translation); + let local_matrix = DAffine2::from_mat2(row.transform.matrix2); + row.transform = local_translation * transform * local_matrix; - result_table.push(instance); + result_table.push(row); } } @@ -257,31 +241,31 @@ async fn repeat( #[node_macro::node(category("Instancing"), path(graphene_core::vector))] async fn circular_repeat( _: impl Ctx, - // TODO: Implement other GraphicElementRendered types. - #[implementations(GraphicGroupTable, VectorDataTable, RasterDataTable)] instance: Instances, + // TODO: Implement other graphical types. + #[implementations(Table, Table, Table>, Table, Table)] instance: Table, angle_offset: Angle, #[unit(" px")] #[default(5)] radius: f64, - #[default(5)] instances: IntegerCount, -) -> Instances { - let count = instances.max(1); + #[default(5)] count: IntegerCount, +) -> Table { + let count = count.max(1); - let mut result_table = Instances::::default(); + let mut result_table = Table::new(); for index in 0..count { let angle = DAffine2::from_angle((TAU / count as f64) * index as f64 + angle_offset.to_radians()); let translation = DAffine2::from_translation(radius * DVec2::Y); let transform = angle * translation; - for instance in instance.instance_ref_iter() { - let mut instance = instance.to_instance_cloned(); + for row in instance.iter() { + let mut row = row.into_cloned(); - let local_translation = DAffine2::from_translation(instance.transform.translation); - let local_matrix = DAffine2::from_mat2(instance.transform.matrix2); - instance.transform = local_translation * transform * local_matrix; + let local_translation = DAffine2::from_translation(row.transform.translation); + let local_matrix = DAffine2::from_mat2(row.transform.matrix2); + row.transform = local_translation * transform * local_matrix; - result_table.push(instance); + result_table.push(row); } } @@ -291,11 +275,11 @@ async fn circular_repeat( #[node_macro::node(name("Copy to Points"), category("Instancing"), path(graphene_core::vector))] async fn copy_to_points( _: impl Ctx, - points: VectorDataTable, - #[expose] + points: Table, /// Artwork to be copied and placed at each point. - #[implementations(GraphicGroupTable, VectorDataTable, RasterDataTable)] - instance: Instances, + #[expose] + #[implementations(Table, Table, Table>, Table, Table)] + instance: Table, /// Minimum range of randomized sizes given to each instance. #[default(1)] #[range((0., 2.))] @@ -316,20 +300,20 @@ async fn copy_to_points( random_rotation: Angle, /// Seed to determine unique variations on all the randomized instance angles. random_rotation_seed: SeedValue, -) -> Instances { - let mut result_table = Instances::::default(); +) -> Table { + let mut result_table = Table::new(); let random_scale_difference = random_scale_max - random_scale_min; - for point_instance in points.instance_iter() { + for row in points.into_iter() { let mut scale_rng = rand::rngs::StdRng::seed_from_u64(random_scale_seed.into()); let mut rotation_rng = rand::rngs::StdRng::seed_from_u64(random_rotation_seed.into()); let do_scale = random_scale_difference.abs() > 1e-6; let do_rotation = random_rotation.abs() > 1e-6; - let points_transform = point_instance.transform; - for &point in point_instance.instance.point_domain.positions() { + let points_transform = row.transform; + for &point in row.element.point_domain.positions() { let translation = points_transform.transform_point2(point); let rotation = if do_rotation { @@ -355,10 +339,10 @@ async fn copy_to_points( let transform = DAffine2::from_scale_angle_translation(DVec2::splat(scale), rotation, translation); - for mut instance in instance.instance_ref_iter().map(|instance| instance.to_instance_cloned()) { - instance.transform = transform * instance.transform; + for mut row in instance.iter().map(|row| row.into_cloned()) { + row.transform = transform * row.transform; - result_table.push(instance); + result_table.push(row); } } } @@ -369,23 +353,21 @@ async fn copy_to_points( #[node_macro::node(category("Instancing"), path(graphene_core::vector))] async fn mirror( _: impl Ctx, - #[implementations(GraphicGroupTable, VectorDataTable, RasterDataTable)] instance: Instances, + #[implementations(Table, Table, Table>, Table, Table)] content: Table, #[default(ReferencePoint::Center)] relative_to_bounds: ReferencePoint, #[unit(" px")] offset: f64, #[range((-90., 90.))] angle: Angle, #[default(true)] keep_original: bool, -) -> Instances +) -> Table where - Instances: BoundingBox, + Table: BoundingBox, { - let mut result_table = Instances::default(); - // Normalize the direction vector let normal = DVec2::from_angle(angle.to_radians()); - // The mirror reference is based on the bounding box (at least for now, until we have proper local layer origins) - let Some(bounding_box) = instance.bounding_box(DAffine2::IDENTITY, false) else { - return result_table; + // The mirror reference may be based on the bounding box if an explicit reference point is chosen + let RenderBoundingBox::Rectangle(bounding_box) = content.bounding_box(DAffine2::IDENTITY, false) else { + return content; }; let reference_point_location = relative_to_bounds.point_in_bounding_box((bounding_box[0], bounding_box[1]).into()); @@ -407,18 +389,19 @@ where reflection * DAffine2::from_translation(DVec2::from_angle(angle.to_radians()) * DVec2::splat(-offset)) }; + let mut result_table = Table::new(); + // Add original instance depending on the keep_original flag if keep_original { - for instance in instance.clone().instance_iter() { + for instance in content.clone().into_iter() { result_table.push(instance); } } // Create and add mirrored instance - for mut instance in instance.instance_iter() { - instance.transform = reflected_transform * instance.transform; - instance.source_node_id = None; - result_table.push(instance); + for mut row in content.into_iter() { + row.transform = reflected_transform * row.transform; + result_table.push(row); } result_table @@ -427,7 +410,7 @@ where #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] async fn round_corners( _: impl Ctx, - source: VectorDataTable, + source: Table, #[hard_min(0.)] #[default(10.)] radius: PixelLength, @@ -442,22 +425,24 @@ async fn round_corners( #[hard_max(180.)] #[default(5.)] min_angle_threshold: Angle, -) -> VectorDataTable { +) -> Table { source - .instance_ref_iter() + .iter() .map(|source| { let source_transform = *source.transform; let source_transform_inverse = source_transform.inverse(); - let source = source.instance; + let source_mask = source.mask.clone(); + let source_node_id = source.source_node_id; + let source = source.element; - let upstream_graphic_group = source.upstream_graphic_group.clone(); + let upstream_nested_layers = source.upstream_nested_layers.clone(); // Flip the roundness to help with user intuition let roundness = 1. - roundness; // Convert 0-100 to 0-0.5 let edge_length_limit = edge_length_limit * 0.005; - let mut result = VectorData { + let mut result = Vector { style: source.style.clone(), ..Default::default() }; @@ -465,34 +450,33 @@ async fn round_corners( // Grab the initial point ID as a stable starting point let mut initial_point_id = source.point_domain.ids().first().copied().unwrap_or(PointId::generate()); - for mut subpath in source.stroke_bezier_paths() { - subpath.apply_transform(source_transform); + for mut bezpath in source.stroke_bezpath_iter() { + bezpath.apply_affine(Affine::new(source_transform.to_cols_array())); + let (manipulator_groups, is_closed) = bezpath_to_manipulator_groups(&bezpath); // End if not enough points for corner rounding - if subpath.manipulator_groups().len() < 3 { - result.append_subpath(subpath, false); + if manipulator_groups.len() < 3 { + result.append_bezpath(bezpath); continue; } - let groups = subpath.manipulator_groups(); - let mut new_groups = Vec::new(); - let is_closed = subpath.closed(); + let mut new_manipulator_groups = Vec::new(); - for i in 0..groups.len() { + for i in 0..manipulator_groups.len() { // Skip first and last points for open paths - if !is_closed && (i == 0 || i == groups.len() - 1) { - new_groups.push(groups[i]); + if !is_closed && (i == 0 || i == manipulator_groups.len() - 1) { + new_manipulator_groups.push(manipulator_groups[i]); continue; } // Not the prettiest, but it makes the rest of the logic more readable - let prev_idx = if i == 0 { if is_closed { groups.len() - 1 } else { 0 } } else { i - 1 }; + let prev_idx = if i == 0 { if is_closed { manipulator_groups.len() - 1 } else { 0 } } else { i - 1 }; let curr_idx = i; - let next_idx = if i == groups.len() - 1 { if is_closed { 0 } else { i } } else { i + 1 }; + let next_idx = if i == manipulator_groups.len() - 1 { if is_closed { 0 } else { i } } else { i + 1 }; - let prev = groups[prev_idx].anchor; - let curr = groups[curr_idx].anchor; - let next = groups[next_idx].anchor; + let prev = manipulator_groups[prev_idx].anchor; + let curr = manipulator_groups[curr_idx].anchor; + let next = manipulator_groups[next_idx].anchor; let dir1 = (curr - prev).normalize_or(DVec2::X); let dir2 = (next - curr).normalize_or(DVec2::X); @@ -501,7 +485,7 @@ async fn round_corners( // Skip near-straight corners if theta > PI - min_angle_threshold.to_radians() { - new_groups.push(groups[curr_idx]); + new_manipulator_groups.push(manipulator_groups[curr_idx]); continue; } @@ -514,7 +498,7 @@ async fn round_corners( let p2 = curr + dir2 * distance_along_edge; // Add first point (coming into the rounded corner) - new_groups.push(ManipulatorGroup { + new_manipulator_groups.push(ManipulatorGroup { anchor: p1, in_handle: None, out_handle: Some(curr - dir1 * distance_along_edge * roundness), @@ -522,7 +506,7 @@ async fn round_corners( }); // Add second point (coming out of the rounded corner) - new_groups.push(ManipulatorGroup { + new_manipulator_groups.push(ManipulatorGroup { anchor: p2, in_handle: Some(curr + dir2 * distance_along_edge * roundness), out_handle: None, @@ -531,19 +515,19 @@ async fn round_corners( } // One subpath for each shape - let mut rounded_subpath = Subpath::new(new_groups, is_closed); - rounded_subpath.apply_transform(source_transform_inverse); - result.append_subpath(rounded_subpath, false); + let mut rounded_subpath = bezpath_from_manipulator_groups(&new_manipulator_groups, is_closed); + rounded_subpath.apply_affine(Affine::new(source_transform_inverse.to_cols_array())); + result.append_bezpath(rounded_subpath); } - result.upstream_graphic_group = upstream_graphic_group; + result.upstream_nested_layers = upstream_nested_layers; - Instance { - instance: result, + TableRow { + element: result, + mask: source_mask.clone(), transform: source_transform, alpha_blending: Default::default(), - source_node_id: None, - mask: None, + source_node_id: *source_node_id, } }) .collect() @@ -552,44 +536,44 @@ async fn round_corners( #[node_macro::node(name("Merge by Distance"), category("Vector: Modifier"), path(graphene_core::vector))] pub fn merge_by_distance( _: impl Ctx, - vector_data: VectorDataTable, + content: Table, #[default(0.1)] #[hard_min(0.0001)] distance: PixelLength, algorithm: MergeByDistanceAlgorithm, -) -> VectorDataTable { +) -> Table { match algorithm { - MergeByDistanceAlgorithm::Spatial => vector_data - .instance_iter() - .map(|mut vector_data_instance| { - vector_data_instance.instance.merge_by_distance_spatial(vector_data_instance.transform, distance); - vector_data_instance + MergeByDistanceAlgorithm::Spatial => content + .into_iter() + .map(|mut row| { + row.element.merge_by_distance_spatial(row.transform, distance); + row }) .collect(), - MergeByDistanceAlgorithm::Topological => vector_data - .instance_iter() - .map(|mut vector_data_instance| { - vector_data_instance.instance.merge_by_distance_topological(distance); - vector_data_instance + MergeByDistanceAlgorithm::Topological => content + .into_iter() + .map(|mut row| { + row.element.merge_by_distance_topological(distance); + row }) .collect(), } } #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -async fn box_warp(_: impl Ctx, vector_data: VectorDataTable, #[expose] rectangle: VectorDataTable) -> VectorDataTable { - let Some((target, target_transform)) = rectangle.get(0).map(|rect| (rect.instance, rect.transform)) else { - return vector_data; +async fn box_warp(_: impl Ctx, content: Table, #[expose] rectangle: Table) -> Table { + let Some((target, target_transform)) = rectangle.get(0).map(|rect| (rect.element, rect.transform)) else { + return content; }; - vector_data - .instance_iter() - .map(|mut vector_data_instance| { - let vector_data_transform = vector_data_instance.transform; - let vector_data = vector_data_instance.instance; + content + .into_iter() + .map(|mut row| { + let transform = row.transform; + let vector = row.element; - // Get the bounding box of the source vector data - let source_bbox = vector_data.bounding_box_with_transform(vector_data_transform).unwrap_or([DVec2::ZERO, DVec2::ONE]); + // Get the bounding box of the source vector geometry + let source_bbox = vector.bounding_box_with_transform(transform).unwrap_or([DVec2::ZERO, DVec2::ONE]); // Extract first 4 points from target shape to form the quadrilateral // Apply the target's transform to get points in world space @@ -610,7 +594,7 @@ async fn box_warp(_: impl Ctx, vector_data: VectorDataTable, #[expose] rectangle }; // Apply the warp - let mut result = vector_data.clone(); + let mut result = vector.clone(); // Precompute source bounding box size for normalization let source_size = source_bbox[1] - source_bbox[0]; @@ -618,7 +602,7 @@ async fn box_warp(_: impl Ctx, vector_data: VectorDataTable, #[expose] rectangle // Transform points for (_, position) in result.point_domain.positions_mut() { // Get the point in world space - let world_pos = vector_data_transform.transform_point2(*position); + let world_pos = transform.transform_point2(*position); // Normalize coordinates within the source bounding box let t = ((world_pos - source_bbox[0]) / source_size).clamp(DVec2::ZERO, DVec2::ONE); @@ -631,7 +615,7 @@ async fn box_warp(_: impl Ctx, vector_data: VectorDataTable, #[expose] rectangle for (_, handles, _, _) in result.handles_mut() { *handles = handles.apply_transformation(|pos| { // Get the handle in world space - let world_pos = vector_data_transform.transform_point2(pos); + let world_pos = transform.transform_point2(pos); // Normalize coordinates within the source bounding box let t = ((world_pos - source_bbox[0]) / source_size).clamp(DVec2::ZERO, DVec2::ONE); @@ -644,10 +628,9 @@ async fn box_warp(_: impl Ctx, vector_data: VectorDataTable, #[expose] rectangle result.style.set_stroke_transform(DAffine2::IDENTITY); // Add this to the table and reset the transform since we've applied it directly to the points - vector_data_instance.instance = result; - vector_data_instance.transform = DAffine2::IDENTITY; - vector_data_instance.source_node_id = None; - vector_data_instance + row.element = result; + row.transform = DAffine2::IDENTITY; + row }) .collect() } @@ -667,24 +650,26 @@ fn bilinear_interpolate(t: DVec2, quad: &[DVec2; 4]) -> DVec2 { #[node_macro::node(category("Vector: Modifier"), name("Auto-Tangents"), path(graphene_core::vector))] async fn auto_tangents( _: impl Ctx, - source: VectorDataTable, + source: Table, /// The amount of spread for the auto-tangents, from 0 (sharp corner) to 1 (full spread). #[default(0.5)] + // TODO: Make this a soft range to allow any value to be typed in outside the slider range of 0 to 1 #[range((0., 1.))] spread: f64, /// If active, existing non-zero handles won't be affected. #[default(true)] preserve_existing: bool, -) -> VectorDataTable { +) -> Table { source - .instance_ref_iter() + .iter() .map(|source| { let transform = *source.transform; let alpha_blending = *source.alpha_blending; let source_node_id = *source.source_node_id; - let source = source.instance; + let mask = source.mask.clone(); + let source = source.element; - let mut result = VectorData { + let mut result = Vector { style: source.style.clone(), ..Default::default() }; @@ -692,18 +677,18 @@ async fn auto_tangents( for mut subpath in source.stroke_bezier_paths() { subpath.apply_transform(transform); - let groups = subpath.manipulator_groups(); - if groups.len() < 2 { + let manipulators_list = subpath.manipulator_groups(); + if manipulators_list.len() < 2 { // Not enough points for softening or handle removal result.append_subpath(subpath, true); continue; } - let mut new_groups = Vec::with_capacity(groups.len()); + let mut new_manipulators_list = Vec::with_capacity(manipulators_list.len()); let is_closed = subpath.closed(); - for i in 0..groups.len() { - let curr = &groups[i]; + for i in 0..manipulators_list.len() { + let curr = &manipulators_list[i]; if preserve_existing { // Check if this point has handles that are meaningfully different from the anchor @@ -711,15 +696,15 @@ async fn auto_tangents( || (curr.out_handle.is_some() && !curr.out_handle.unwrap().abs_diff_eq(curr.anchor, 1e-5)); // If the point already has handles, or if it's an endpoint of an open path, keep it as is. - if has_handles || (!is_closed && (i == 0 || i == groups.len() - 1)) { - new_groups.push(*curr); + if has_handles || (!is_closed && (i == 0 || i == manipulators_list.len() - 1)) { + new_manipulators_list.push(*curr); continue; } } // If spread is 0, remove handles for this point, making it a sharp corner. if spread == 0. { - new_groups.push(ManipulatorGroup { + new_manipulators_list.push(ManipulatorGroup { anchor: curr.anchor, in_handle: None, out_handle: None, @@ -729,12 +714,12 @@ async fn auto_tangents( } // Get previous and next points for auto-tangent calculation - let prev_idx = if i == 0 { if is_closed { groups.len() - 1 } else { i } } else { i - 1 }; - let next_idx = if i == groups.len() - 1 { if is_closed { 0 } else { i } } else { i + 1 }; + let prev_idx = if i == 0 { if is_closed { manipulators_list.len() - 1 } else { i } } else { i - 1 }; + let next_idx = if i == manipulators_list.len() - 1 { if is_closed { 0 } else { i } } else { i + 1 }; - let prev = groups[prev_idx].anchor; + let prev = manipulators_list[prev_idx].anchor; let curr_pos = curr.anchor; - let next = groups[next_idx].anchor; + let next = manipulators_list[next_idx].anchor; // Calculate directions from current point to adjacent points let dir_prev = (prev - curr_pos).normalize_or_zero(); @@ -743,7 +728,7 @@ async fn auto_tangents( // Check if we have valid directions (e.g., points are not coincident) if dir_prev.length_squared() < 1e-5 || dir_next.length_squared() < 1e-5 { // Fallback: keep the original manipulator group (which has no active handles here) - new_groups.push(*curr); + new_manipulators_list.push(*curr); continue; } @@ -763,7 +748,7 @@ async fn auto_tangents( let out_length = (next - curr_pos).length() / 3. * spread; // Create new manipulator group with calculated auto-tangents - new_groups.push(ManipulatorGroup { + new_manipulators_list.push(ManipulatorGroup { anchor: curr_pos, in_handle: Some(curr_pos + handle_dir * in_length), out_handle: Some(curr_pos - handle_dir * out_length), @@ -771,14 +756,14 @@ async fn auto_tangents( }); } - let mut softened_subpath = Subpath::new(new_groups, is_closed); - softened_subpath.apply_transform(transform.inverse()); - result.append_subpath(softened_subpath, true); + let mut softened_bezpath = bezpath_from_manipulator_groups(&new_manipulators_list, is_closed); + softened_bezpath.apply_affine(Affine::new(transform.inverse().to_cols_array())); + result.append_bezpath(softened_bezpath); } - Instance { - instance: result, - mask: None, + TableRow { + element: result, + mask, transform, alpha_blending, source_node_id, @@ -787,250 +772,136 @@ async fn auto_tangents( .collect() } -// TODO: Fix issues and reenable -// #[node_macro::node(category("Vector"), path(graphene_core::vector))] -// async fn subdivide( -// _: impl Ctx, -// source: VectorDataTable, -// #[default(1.)] -// #[hard_min(1.)] -// #[soft_max(8.)] -// subdivisions: f64, -// ) -> VectorDataTable { -// fn subdivide_once(subpath: &Subpath) -> Subpath { -// let original_groups = subpath.manipulator_groups(); -// let mut new_groups = Vec::new(); -// let is_closed = subpath.closed(); -// let mut last_in_handle = None; - -// for i in 0..original_groups.len() { -// let start_idx = i; -// let end_idx = (i + 1) % original_groups.len(); - -// // Skip the last segment for open paths -// if !is_closed && end_idx == 0 { -// break; -// } - -// let current_bezier = original_groups[start_idx].to_bezier(&original_groups[end_idx]); - -// // Create modified start point with original ID, but updated in_handle & out_handle -// let mut start_point = original_groups[start_idx]; -// let [first, _] = current_bezier.split(TValue::Euclidean(0.5)); -// start_point.out_handle = first.handle_start(); -// start_point.in_handle = last_in_handle; -// if new_groups.contains(&start_point) { -// debug!("start_point already in"); -// } else { -// new_groups.push(start_point); -// } - -// // Add midpoint -// let [first, second] = current_bezier.split(TValue::Euclidean(0.5)); - -// let new_point = ManipulatorGroup { -// anchor: first.end, -// in_handle: first.handle_end(), -// out_handle: second.handle_start(), -// id: start_point.id.generate_from_hash(u64::MAX), -// }; -// if new_groups.contains(&new_point) { -// debug!("new_point already in"); -// } else { -// new_groups.push(new_point); -// } - -// last_in_handle = second.handle_end(); -// } - -// // Handle the final point for open paths -// if !is_closed && !original_groups.is_empty() { -// let mut last_point = *original_groups.last().unwrap(); -// last_point.in_handle = last_in_handle; -// if new_groups.contains(&last_point) { -// debug!("last_point already in"); -// } else { -// new_groups.push(last_point); -// } -// } else if is_closed && !new_groups.is_empty() { -// // Update the first point's in_handle for closed paths -// new_groups[0].in_handle = last_in_handle; -// } - -// Subpath::new(new_groups, is_closed) -// } - -// let mut result_table = VectorDataTable::default(); - -// for source_vector_data in source.instances() { -// let source_transform = *source_vector_data.transform; -// let source_vector_data = source_vector_data.instance; - -// let subdivisions = subdivisions as usize; - -// let mut result = VectorData { -// style: source_vector_data.style.clone(), -// ..Default::default() -// }; - -// for mut subpath in source_vector_data.stroke_bezier_paths() { -// subpath.apply_transform(source_transform); - -// if subpath.manipulator_groups().len() < 2 { -// // Not enough points to subdivide -// result.append_subpath(subpath, true); -// continue; -// } - -// // Apply subdivisions recursively -// let mut current_subpath = subpath; -// for _ in 0..subdivisions { -// current_subpath = subdivide_once(¤t_subpath); -// } - -// current_subpath.apply_transform(source_transform.inverse()); -// result.append_subpath(current_subpath, true); -// } - -// let pushed = result_table.push(result); -// *pushed.transform = source_transform; -// } - -// result_table -// } - #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -async fn bounding_box(_: impl Ctx, vector_data: VectorDataTable) -> VectorDataTable { - vector_data - .instance_iter() - .map(|mut vector_data_instance| { - let vector_data = vector_data_instance.instance; +async fn bounding_box(_: impl Ctx, content: Table) -> Table { + content + .into_iter() + .map(|mut row| { + let vector = row.element; - let mut result = vector_data + let mut result = vector .bounding_box_rect() .map(|bbox| { - let mut vector_data = VectorData::default(); - vector_data.append_bezpath(bbox.to_path(DEFAULT_ACCURACY)); - vector_data + let mut vector = Vector::default(); + vector.append_bezpath(bbox.to_path(DEFAULT_ACCURACY)); + vector }) .unwrap_or_default(); - result.style = vector_data.style.clone(); + result.style = vector.style.clone(); result.style.set_stroke_transform(DAffine2::IDENTITY); - vector_data_instance.instance = result; - vector_data_instance.source_node_id = None; - vector_data_instance + row.element = result; + row }) .collect() } #[node_macro::node(category("Vector: Measure"), path(graphene_core::vector))] -async fn dimensions(_: impl Ctx, vector_data: VectorDataTable) -> DVec2 { - vector_data - .instance_ref_iter() - .filter_map(|vector_data| vector_data.instance.bounding_box_with_transform(*vector_data.transform)) +async fn dimensions(_: impl Ctx, content: Table) -> DVec2 { + content + .iter() + .filter_map(|vector| vector.element.bounding_box_with_transform(*vector.transform)) .reduce(|[acc_top_left, acc_bottom_right], [top_left, bottom_right]| [acc_top_left.min(top_left), acc_bottom_right.max(bottom_right)]) .map(|[top_left, bottom_right]| bottom_right - top_left) .unwrap_or_default() } -/// Converts a coordinate value into a vector anchor point. +/// Converts a vec2 value into a vector path composed of a single anchor point. /// /// This is useful in conjunction with nodes that repeat it, followed by the "Points to Polyline" node to string together a path of the points. -#[node_macro::node(category("Vector"), name("Coordinate to Point"), path(graphene_core::vector))] -async fn position_to_point(_: impl Ctx, coordinate: DVec2) -> VectorDataTable { +#[node_macro::node(category("Vector"), name("Vec2 to Point"), path(graphene_core::vector))] +async fn vec2_to_point(_: impl Ctx, vec2: DVec2) -> Table { let mut point_domain = PointDomain::new(); - point_domain.push(PointId::generate(), coordinate); + point_domain.push(PointId::generate(), vec2); - VectorDataTable::new_instance(Instance { - instance: VectorData { point_domain, ..Default::default() }, + Table::new_from_row(TableRow { + element: Vector { point_domain, ..Default::default() }, ..Default::default() }) } /// Creates a polyline from a series of vector points, replacing any existing segments and regions that may already exist. #[node_macro::node(category("Vector"), name("Points to Polyline"), path(graphene_core::vector))] -async fn points_to_polyline(_: impl Ctx, mut points: VectorDataTable, #[default(true)] closed: bool) -> VectorDataTable { - for instance in points.instance_mut_iter() { +async fn points_to_polyline(_: impl Ctx, mut points: Table, #[default(true)] closed: bool) -> Table { + for row in points.iter_mut() { let mut segment_domain = SegmentDomain::new(); - let points_count = instance.instance.point_domain.ids().len(); + let points_count = row.element.point_domain.ids().len(); if points_count > 2 { (0..points_count - 1).for_each(|i| { - segment_domain.push(SegmentId::generate(), i, i + 1, bezier_rs::BezierHandles::Linear, StrokeId::generate()); + segment_domain.push(SegmentId::generate(), i, i + 1, BezierHandles::Linear, StrokeId::generate()); }); if closed { - segment_domain.push(SegmentId::generate(), points_count - 1, 0, bezier_rs::BezierHandles::Linear, StrokeId::generate()); + segment_domain.push(SegmentId::generate(), points_count - 1, 0, BezierHandles::Linear, StrokeId::generate()); - instance - .instance + row.element .region_domain .push(RegionId::generate(), segment_domain.ids()[0]..=*segment_domain.ids().last().unwrap(), FillId::generate()); } } - instance.instance.segment_domain = segment_domain; + row.element.segment_domain = segment_domain; } points } #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector), properties("offset_path_properties"))] -async fn offset_path(_: impl Ctx, vector_data: VectorDataTable, distance: f64, join: StrokeJoin, #[default(4.)] miter_limit: f64) -> VectorDataTable { - vector_data - .instance_iter() - .map(|mut vector_data_instance| { - let vector_data_transform = vector_data_instance.transform; - let vector_data = vector_data_instance.instance; +async fn offset_path(_: impl Ctx, content: Table, distance: f64, join: StrokeJoin, #[default(4.)] miter_limit: f64) -> Table { + content + .into_iter() + .map(|mut row| { + let transform = Affine::new(row.transform.to_cols_array()); + let vector = row.element; - let subpaths = vector_data.stroke_bezier_paths(); - let mut result = VectorData { - style: vector_data.style.clone(), + let bezpaths = vector.stroke_bezpath_iter(); + let mut result = Vector { + style: vector.style.clone(), ..Default::default() }; result.style.set_stroke_transform(DAffine2::IDENTITY); // Perform operation on all subpaths in this shape. - for mut subpath in subpaths { - subpath.apply_transform(vector_data_transform); + for mut bezpath in bezpaths { + bezpath.apply_affine(transform); - // Taking the existing stroke data and passing it to Bezier-rs to generate new paths. - let mut subpath_out = offset_subpath( - &subpath, + // Taking the existing stroke data and passing it to Kurbo to generate new paths. + let mut bezpath_out = offset_bezpath( + &bezpath, -distance, match join { - StrokeJoin::Miter => Join::Miter(Some(miter_limit)), - StrokeJoin::Bevel => Join::Bevel, - StrokeJoin::Round => Join::Round, + StrokeJoin::Miter => kurbo::Join::Miter, + StrokeJoin::Bevel => kurbo::Join::Bevel, + StrokeJoin::Round => kurbo::Join::Round, }, + Some(miter_limit), ); - subpath_out.apply_transform(vector_data_transform.inverse()); + bezpath_out.apply_affine(transform.inverse()); // One closed subpath, open path. - result.append_subpath(subpath_out, false); + result.append_bezpath(bezpath_out); } - vector_data_instance.instance = result; - vector_data_instance.source_node_id = None; - vector_data_instance + row.element = result; + row }) .collect() } #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -async fn solidify_stroke(_: impl Ctx, vector_data: VectorDataTable) -> VectorDataTable { - vector_data - .instance_iter() - .map(|mut vector_data_instance| { - let vector_data = vector_data_instance.instance; +async fn solidify_stroke(_: impl Ctx, content: Table) -> Table { + content + .into_iter() + .map(|mut row| { + let vector = row.element; - let stroke = vector_data.style.stroke().clone().unwrap_or_default(); - let bezpaths = vector_data.stroke_bezpath_iter(); - let mut result = VectorData::default(); + let stroke = vector.style.stroke().clone().unwrap_or_default(); + let bezpaths = vector.stroke_bezpath_iter(); + let mut result = Vector::default(); // Taking the existing stroke data and passing it to kurbo::stroke to generate new fill paths. let join = match stroke.join { @@ -1064,70 +935,100 @@ async fn solidify_stroke(_: impl Ctx, vector_data: VectorDataTable) -> VectorDat } // We set our fill to our stroke's color, then clear our stroke. - if let Some(stroke) = vector_data.style.stroke() { + if let Some(stroke) = vector.style.stroke() { result.style.set_fill(Fill::solid_or_none(stroke.color)); result.style.set_stroke(Stroke::default()); } - vector_data_instance.instance = result; - vector_data_instance.source_node_id = None; - vector_data_instance + row.element = result; + row + }) + .collect() +} + +#[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] +async fn separate_subpaths(_: impl Ctx, content: Table) -> Table { + content + .into_iter() + .flat_map(|row| { + let style = row.element.style.clone(); + let transform = row.transform; + let mask = row.mask; + let alpha_blending = row.alpha_blending; + let source_node_id = row.source_node_id; + + row.element + .stroke_bezpath_iter() + .map(move |bezpath| { + let mut vector = Vector::default(); + vector.append_bezpath(bezpath); + vector.style = style.clone(); + + TableRow { + element: vector, + mask: mask.clone(), + transform, + alpha_blending, + source_node_id, + } + }) + .collect::>>() }) .collect() } #[node_macro::node(category("Vector"), path(graphene_core::vector))] -async fn flatten_path(_: impl Ctx, #[implementations(GraphicGroupTable, VectorDataTable)] graphic_group_input: Instances) -> VectorDataTable +async fn flatten_path(_: impl Ctx, #[implementations(Table, Table)] content: Table) -> Table where - GraphicElement: From>, + Graphic: From>, { - // A node based solution to support passing through vector data could be a network node with a cache node connected to - // a Flatten Path connected to an if else node, another connection from the cache directly - // To the if else node, and another connection from the cache to a matches type node connected to the if else node. - fn flatten_group(graphic_group_table: &GraphicGroupTable, output: &mut InstanceMut) { - for (group_index, current_element) in graphic_group_table.instance_ref_iter().enumerate() { - match current_element.instance { - GraphicElement::VectorData(vector_data_table) => { - // Loop through every row of the VectorDataTable and concatenate each instance's subpath into the output VectorData instance. - for (vector_index, vector_data_instance) in vector_data_table.instance_ref_iter().enumerate() { - let other = vector_data_instance.instance; - let transform = *current_element.transform * *vector_data_instance.transform; + // NOTE(AdamGerhant): + // A node-based solution to support passing through vector data could be a network node with a cache node + // connected to a Flatten Path connected to an if else node, another connection from the cache directly to + // the if else node, and another connection from the cache to a matches type node connected to the if else node. + + fn flatten_table(output: &mut TableRowMut, graphic_table: &Table) { + for (current_index, current_element) in graphic_table.iter().enumerate() { + match current_element.element { + Graphic::Vector(vector) => { + // Loop through every row of the `Table` and concatenate each element's subpath into the output `Vector` element. + for (vector_index, row) in vector.iter().enumerate() { + let other = row.element; + let transform = *current_element.transform * *row.transform; let node_id = current_element.source_node_id.map(|node_id| node_id.0).unwrap_or_default(); let mut hasher = DefaultHasher::new(); - (group_index, vector_index, node_id).hash(&mut hasher); + (current_index, vector_index, node_id).hash(&mut hasher); let collision_hash_seed = hasher.finish(); - output.instance.concat(other, transform, collision_hash_seed); + output.element.concat(other, transform, collision_hash_seed); // Use the last encountered style as the output style - output.instance.style = vector_data_instance.instance.style.clone(); + output.element.style = row.element.style.clone(); } } - GraphicElement::GraphicGroup(graphic_group) => { - let mut graphic_group = graphic_group.clone(); - for instance in graphic_group.instance_mut_iter() { - *instance.transform = *current_element.transform * *instance.transform; + Graphic::Graphic(graphic) => { + let mut graphic = graphic.clone(); + for row in graphic.iter_mut() { + *row.transform = *current_element.transform * *row.transform; } - flatten_group(&graphic_group, output); + flatten_table(output, &graphic); } _ => {} } } } - // Create a table with one instance of an empty VectorData, then get a mutable reference to it which we append flattened subpaths to - let mut output_table = VectorDataTable::new(VectorData::default()); - let Some(mut output) = output_table.instance_mut_iter().next() else { - return output_table; - }; + // Create a table with one empty `Vector` element, then get a mutable reference to it which we append flattened subpaths to + let mut output_table = Table::new_from_element(Vector::default()); + let Some(mut output) = output_table.iter_mut().next() else { return output_table }; - // Flatten the graphic group input into the output VectorData instance - let base_graphic_group = GraphicGroupTable::new(GraphicElement::from(graphic_group_input)); - flatten_group(&base_graphic_group, &mut output); + // Flatten the graphic input into the output `Vector` element + let base_graphic_table = Table::new_from_element(Graphic::from(content)); + flatten_table(&mut output, &base_graphic_table); - // Return the single-row VectorDataTable containing the flattened VectorData subpaths + // Return the single-row Table containing the flattened Vector subpaths output_table } @@ -1135,7 +1036,7 @@ where #[node_macro::node(category(""), path(graphene_core::vector))] async fn sample_polyline( _: impl Ctx, - vector_data: VectorDataTable, + content: Table, spacing: PointSpacingType, #[unit(" px")] separation: f64, quantity: u32, @@ -1143,32 +1044,32 @@ async fn sample_polyline( #[unit(" px")] stop_offset: f64, adaptive_spacing: bool, subpath_segment_lengths: Vec, -) -> VectorDataTable { - vector_data - .instance_iter() - .map(|mut vector_data_instance| { - let mut result = VectorData { +) -> Table { + content + .into_iter() + .map(|mut row| { + let mut result = Vector { point_domain: Default::default(), segment_domain: Default::default(), region_domain: Default::default(), colinear_manipulators: Default::default(), - style: std::mem::take(&mut vector_data_instance.instance.style), - upstream_graphic_group: std::mem::take(&mut vector_data_instance.instance.upstream_graphic_group), + style: std::mem::take(&mut row.element.style), + upstream_nested_layers: std::mem::take(&mut row.element.upstream_nested_layers), }; - // Transfer the stroke transform from the input vector data to the result. - result.style.set_stroke_transform(vector_data_instance.transform); + // Transfer the stroke transform from the input vector content to the result. + result.style.set_stroke_transform(row.transform); // Using `stroke_bezpath_iter` so that the `subpath_segment_lengths` is aligned to the segments of each bezpath. // So we can index into `subpath_segment_lengths` to get the length of the segments. // NOTE: `subpath_segment_lengths` has precalulated lengths with transformation applied. - let bezpaths = vector_data_instance.instance.stroke_bezpath_iter(); + let bezpaths = row.element.stroke_bezpath_iter(); // Keeps track of the index of the first segment of the next bezpath in order to get lengths of all segments. let mut next_segment_index = 0; for mut bezpath in bezpaths { // Apply the tranformation to the current bezpath to calculate points after transformation. - bezpath.apply_affine(Affine::new(vector_data_instance.transform.to_cols_array())); + bezpath.apply_affine(Affine::new(row.transform.to_cols_array())); let segment_count = bezpath.segments().count(); @@ -1187,29 +1088,29 @@ async fn sample_polyline( }; // Reverse the transformation applied to the bezpath as the `result` already has the transformation set. - sample_bezpath.apply_affine(Affine::new(vector_data_instance.transform.to_cols_array()).inverse()); + sample_bezpath.apply_affine(Affine::new(row.transform.to_cols_array()).inverse()); // Append the bezpath (subpath) that connects generated points by lines. result.append_bezpath(sample_bezpath); } - vector_data_instance.instance = result; - vector_data_instance + row.element = result; + row }) .collect() } -/// Splits a path at a given progress from 0 to 1 along the path, creating two new subpaths from the original one (if the path is initially open) or one open subpath (if the path is initially closed). +/// Cuts a path at a given progress from 0 to 1 along the path, creating two new subpaths from the original one (if the path is initially open) or one open subpath (if the path is initially closed). /// /// If multiple subpaths make up the path, the whole number part of the progress value selects the subpath and the decimal part determines the position along it. #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -async fn split_path(_: impl Ctx, mut vector_data: VectorDataTable, progress: Fraction, parameterized_distance: bool, reverse: bool) -> VectorDataTable { +async fn cut_path(_: impl Ctx, mut content: Table, progress: Fraction, parameterized_distance: bool, reverse: bool) -> Table { let euclidian = !parameterized_distance; - let bezpaths = vector_data - .instance_ref_iter() + let bezpaths = content + .iter() .enumerate() - .flat_map(|(instance_row_index, vector_data)| vector_data.instance.stroke_bezpath_iter().map(|bezpath| (instance_row_index, bezpath)).collect::>()) + .flat_map(|(row_index, vector)| vector.element.stroke_bezpath_iter().map(|bezpath| (row_index, bezpath)).collect::>()) .collect::>(); let bezpath_count = bezpaths.len() as f64; @@ -1217,43 +1118,44 @@ async fn split_path(_: impl Ctx, mut vector_data: VectorDataTable, progress: Fra let t_value = if reverse { bezpath_count - t_value } else { t_value }; let index = if t_value >= bezpath_count { (bezpath_count - 1.) as usize } else { t_value as usize }; - if let Some((instance_row_index, bezpath)) = bezpaths.get(index).cloned() { - let mut result_vector_data = VectorData { - style: vector_data.get(instance_row_index).unwrap().instance.style.clone(), + if let Some((row_index, bezpath)) = bezpaths.get(index).cloned() { + let mut result_vector = Vector { + style: content.get(row_index).unwrap().element.style.clone(), ..Default::default() }; - for (_, (_, bezpath)) in bezpaths.iter().enumerate().filter(|(i, (ri, _))| *i != index && *ri == instance_row_index) { - result_vector_data.append_bezpath(bezpath.clone()); + for (_, (_, bezpath)) in bezpaths.iter().enumerate().filter(|(i, (ri, _))| *i != index && *ri == row_index) { + result_vector.append_bezpath(bezpath.clone()); } let t = if t_value == bezpath_count { 1. } else { t_value.fract() }; + let t = if euclidian { TValue::Euclidean(t) } else { TValue::Parametric(t) }; - if let Some((first, second)) = split_bezpath(&bezpath, t, euclidian) { - result_vector_data.append_bezpath(first); - result_vector_data.append_bezpath(second); + if let Some((first, second)) = split_bezpath(&bezpath, t) { + result_vector.append_bezpath(first); + result_vector.append_bezpath(second); } else { - result_vector_data.append_bezpath(bezpath); + result_vector.append_bezpath(bezpath); } - *vector_data.get_mut(instance_row_index).unwrap().instance = result_vector_data; + *content.get_mut(row_index).unwrap().element = result_vector; } - vector_data + content } -/// Splits path segments into separate disconnected pieces where each is a distinct subpath. +/// Cuts path segments into separate disconnected pieces where each is a distinct subpath. #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -async fn split_segments(_: impl Ctx, mut vector_data: VectorDataTable) -> VectorDataTable { +async fn cut_segments(_: impl Ctx, mut content: Table) -> Table { // Iterate through every segment and make a copy of each of its endpoints, then reassign each segment's endpoints to its own unique point copy - for vector_data_instance in vector_data.instance_mut_iter() { - let points_count = vector_data_instance.instance.point_domain.ids().len(); - let segments_count = vector_data_instance.instance.segment_domain.ids().len(); + for row in content.iter_mut() { + let points_count = row.element.point_domain.ids().len(); + let segments_count = row.element.segment_domain.ids().len(); let mut point_usages = vec![0_usize; points_count]; // Count how many times each point is used as an endpoint of the segments - let start_points = vector_data_instance.instance.segment_domain.start_point().iter(); - let end_points = vector_data_instance.instance.segment_domain.end_point().iter(); + let start_points = row.element.segment_domain.start_point().iter(); + let end_points = row.element.segment_domain.end_point().iter(); for (&start, &end) in start_points.zip(end_points) { point_usages[start] += 1; point_usages[end] += 1; @@ -1264,7 +1166,7 @@ async fn split_segments(_: impl Ctx, mut vector_data: VectorDataTable) -> Vector let mut points_with_new_offsets = Vec::with_capacity(points_count); // Build a new point domain with the original points, but with duplications based on their extra usages by the segments - for (index, (point_id, point)) in vector_data_instance.instance.point_domain.iter().enumerate() { + for (index, (point_id, point)) in row.element.point_domain.iter().enumerate() { // Ensure at least one usage to preserve free-floating points not connected to any segments let usage_count = point_usages[index].max(1); @@ -1279,10 +1181,10 @@ async fn split_segments(_: impl Ctx, mut vector_data: VectorDataTable) -> Vector } // Reconcile the segment domain with the new points - vector_data_instance.instance.point_domain = new_points; + row.element.point_domain = new_points; for original_segment_index in 0..segments_count { - let original_point_start_index = vector_data_instance.instance.segment_domain.start_point()[original_segment_index]; - let original_point_end_index = vector_data_instance.instance.segment_domain.end_point()[original_segment_index]; + let original_point_start_index = row.element.segment_domain.start_point()[original_segment_index]; + let original_point_end_index = row.element.segment_domain.end_point()[original_segment_index]; point_usages[original_point_start_index] -= 1; point_usages[original_point_end_index] -= 1; @@ -1290,12 +1192,12 @@ async fn split_segments(_: impl Ctx, mut vector_data: VectorDataTable) -> Vector let start_usage = points_with_new_offsets[original_point_start_index] + point_usages[original_point_start_index]; let end_usage = points_with_new_offsets[original_point_end_index] + point_usages[original_point_end_index]; - vector_data_instance.instance.segment_domain.set_start_point(original_segment_index, start_usage); - vector_data_instance.instance.segment_domain.set_end_point(original_segment_index, end_usage); + row.element.segment_domain.set_start_point(original_segment_index, start_usage); + row.element.segment_domain.set_end_point(original_segment_index, end_usage); } } - vector_data + content } /// Determines the position of a point on the path, given by its progress from 0 to 1 along the path. @@ -1305,7 +1207,7 @@ async fn split_segments(_: impl Ctx, mut vector_data: VectorDataTable) -> Vector async fn position_on_path( _: impl Ctx, /// The path to traverse. - vector_data: VectorDataTable, + content: Table, /// The factor from the start to the end of the path, 0โ€“1 for one subpath, 1โ€“2 for a second subpath, and so on. progress: Fraction, /// Swap the direction of the path. @@ -1315,11 +1217,11 @@ async fn position_on_path( ) -> DVec2 { let euclidian = !parameterized_distance; - let mut bezpaths = vector_data - .instance_iter() - .flat_map(|vector_data| { - let transform = vector_data.transform; - vector_data.instance.stroke_bezpath_iter().map(|bezpath| (bezpath, transform)).collect::>() + let mut bezpaths = content + .into_iter() + .flat_map(|vector| { + let transform = vector.transform; + vector.element.stroke_bezpath_iter().map(|bezpath| (bezpath, transform)).collect::>() }) .collect::>(); let bezpath_count = bezpaths.len() as f64; @@ -1329,9 +1231,11 @@ async fn position_on_path( bezpaths.get_mut(index).map_or(DVec2::ZERO, |(bezpath, transform)| { let t = if progress == bezpath_count { 1. } else { progress.fract() }; + let t = if euclidian { TValue::Euclidean(t) } else { TValue::Parametric(t) }; + bezpath.apply_affine(Affine::new(transform.to_cols_array())); - point_to_dvec2(position_on_bezpath(bezpath, t, euclidian, None)) + point_to_dvec2(evaluate_bezpath(bezpath, t, None)) }) } @@ -1342,7 +1246,7 @@ async fn position_on_path( async fn tangent_on_path( _: impl Ctx, /// The path to traverse. - vector_data: VectorDataTable, + content: Table, /// The factor from the start to the end of the path, 0โ€“1 for one subpath, 1โ€“2 for a second subpath, and so on. progress: Fraction, /// Swap the direction of the path. @@ -1352,11 +1256,11 @@ async fn tangent_on_path( ) -> f64 { let euclidian = !parameterized_distance; - let mut bezpaths = vector_data - .instance_iter() - .flat_map(|vector_data| { - let transform = vector_data.transform; - vector_data.instance.stroke_bezpath_iter().map(|bezpath| (bezpath, transform)).collect::>() + let mut bezpaths = content + .into_iter() + .flat_map(|vector| { + let transform = vector.transform; + vector.element.stroke_bezpath_iter().map(|bezpath| (bezpath, transform)).collect::>() }) .collect::>(); let bezpath_count = bezpaths.len() as f64; @@ -1366,12 +1270,14 @@ async fn tangent_on_path( bezpaths.get_mut(index).map_or(0., |(bezpath, transform)| { let t = if progress == bezpath_count { 1. } else { progress.fract() }; + let t_value = |t: f64| if euclidian { TValue::Euclidean(t) } else { TValue::Parametric(t) }; + bezpath.apply_affine(Affine::new(transform.to_cols_array())); - let mut tangent = point_to_dvec2(tangent_on_bezpath(bezpath, t, euclidian, None)); + let mut tangent = point_to_dvec2(tangent_on_bezpath(bezpath, t_value(t), None)); if tangent == DVec2::ZERO { let t = t + if t > 0.5 { -0.001 } else { 0.001 }; - tangent = point_to_dvec2(tangent_on_bezpath(bezpath, t, euclidian, None)); + tangent = point_to_dvec2(tangent_on_bezpath(bezpath, t_value(t), None)); } if tangent == DVec2::ZERO { return 0.; @@ -1384,22 +1290,22 @@ async fn tangent_on_path( #[node_macro::node(category(""), path(graphene_core::vector))] async fn poisson_disk_points( _: impl Ctx, - vector_data: VectorDataTable, + content: Table, #[unit(" px")] #[default(10.)] #[hard_min(0.01)] separation_disk_diameter: f64, seed: SeedValue, -) -> VectorDataTable { +) -> Table { let mut rng = rand::rngs::StdRng::seed_from_u64(seed.into()); - vector_data - .instance_iter() - .map(|mut vector_data_instance| { - let mut result = VectorData::default(); + content + .into_iter() + .map(|mut row| { + let mut result = Vector::default(); - let path_with_bounding_boxes: Vec<_> = vector_data_instance - .instance + let path_with_bounding_boxes: Vec<_> = row + .element .stroke_bezpath_iter() .map(|mut bezpath| { // TODO: apply transform to points instead of modifying the paths @@ -1419,24 +1325,24 @@ async fn poisson_disk_points( } } - // Transfer the style from the input vector data to the result. - result.style = vector_data_instance.instance.style.clone(); + // Transfer the style from the input vector content to the result. + result.style = row.element.style.clone(); result.style.set_stroke_transform(DAffine2::IDENTITY); - vector_data_instance.instance = result; - vector_data_instance + row.element = result; + row }) .collect() } #[node_macro::node(category(""), path(graphene_core::vector))] -async fn subpath_segment_lengths(_: impl Ctx, vector_data: VectorDataTable) -> Vec { - vector_data - .instance_iter() - .flat_map(|vector_data| { - let transform = vector_data.transform; - vector_data - .instance +async fn subpath_segment_lengths(_: impl Ctx, content: Table) -> Vec { + content + .into_iter() + .flat_map(|vector| { + let transform = vector.transform; + vector + .element .stroke_bezpath_iter() .flat_map(|mut bezpath| { bezpath.apply_affine(Affine::new(transform.to_cols_array())); @@ -1448,18 +1354,18 @@ async fn subpath_segment_lengths(_: impl Ctx, vector_data: VectorDataTable) -> V } #[node_macro::node(name("Spline"), category("Vector: Modifier"), path(graphene_core::vector))] -async fn spline(_: impl Ctx, vector_data: VectorDataTable) -> VectorDataTable { - vector_data - .instance_iter() - .filter_map(|mut vector_data_instance| { +async fn spline(_: impl Ctx, content: Table) -> Table { + content + .into_iter() + .filter_map(|mut row| { // Exit early if there are no points to generate splines from. - if vector_data_instance.instance.point_domain.positions().is_empty() { + if row.element.point_domain.positions().is_empty() { return None; } let mut segment_domain = SegmentDomain::default(); - for (manipulator_groups, closed) in vector_data_instance.instance.stroke_manipulator_groups() { - let positions = manipulator_groups.iter().map(|group| group.anchor).collect::>(); + for (manipulator_groups, closed) in row.element.stroke_manipulator_groups() { + let positions = manipulator_groups.iter().map(|manipulators| manipulators.anchor).collect::>(); let closed = closed && positions.len() > 2; // Compute control point handles for Bezier spline. @@ -1471,23 +1377,23 @@ async fn spline(_: impl Ctx, vector_data: VectorDataTable) -> VectorDataTable { let stroke_id = StrokeId::ZERO; - // Create segments with computed Bezier handles and add them to vector data. + // Create segments with computed Bezier handles and add them to the output vector element's segment domain. for i in 0..(positions.len() - if closed { 0 } else { 1 }) { let next_index = (i + 1) % positions.len(); - let start_index = vector_data_instance.instance.point_domain.resolve_id(manipulator_groups[i].id).unwrap(); - let end_index = vector_data_instance.instance.point_domain.resolve_id(manipulator_groups[next_index].id).unwrap(); + let start_index = row.element.point_domain.resolve_id(manipulator_groups[i].id).unwrap(); + let end_index = row.element.point_domain.resolve_id(manipulator_groups[next_index].id).unwrap(); let handle_start = first_handles[i]; let handle_end = positions[next_index] * 2. - first_handles[next_index]; - let handles = bezier_rs::BezierHandles::Cubic { handle_start, handle_end }; + let handles = BezierHandles::Cubic { handle_start, handle_end }; segment_domain.push(SegmentId::generate(), start_index, end_index, handles, stroke_id); } } - vector_data_instance.instance.segment_domain = segment_domain; - Some(vector_data_instance) + row.element.segment_domain = segment_domain; + Some(row) }) .collect() } @@ -1495,68 +1401,64 @@ async fn spline(_: impl Ctx, vector_data: VectorDataTable) -> VectorDataTable { #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] async fn jitter_points( _: impl Ctx, - vector_data: VectorDataTable, + content: Table, #[unit(" px")] #[default(5.)] amount: f64, seed: SeedValue, -) -> VectorDataTable { - vector_data - .instance_iter() - .map(|mut vector_data_instance| { +) -> Table { + content + .into_iter() + .map(|mut row| { let mut rng = rand::rngs::StdRng::seed_from_u64(seed.into()); - let vector_data_transform = vector_data_instance.transform; - let inverse_transform = if vector_data_transform.matrix2.determinant() != 0. { - vector_data_transform.inverse() - } else { - Default::default() - }; + let transform = row.transform; + let inverse_transform = if transform.matrix2.determinant() != 0. { transform.inverse() } else { Default::default() }; - let deltas = (0..vector_data_instance.instance.point_domain.positions().len()) + let deltas = (0..row.element.point_domain.positions().len()) .map(|_| { let angle = rng.random::() * TAU; inverse_transform.transform_vector2(DVec2::from_angle(angle) * rng.random::() * amount) }) .collect::>(); - let mut already_applied = vec![false; vector_data_instance.instance.point_domain.positions().len()]; + let mut already_applied = vec![false; row.element.point_domain.positions().len()]; - for (handles, start, end) in vector_data_instance.instance.segment_domain.handles_and_points_mut() { + for (handles, start, end) in row.element.segment_domain.handles_and_points_mut() { let start_delta = deltas[*start]; let end_delta = deltas[*end]; if !already_applied[*start] { - let start_position = vector_data_instance.instance.point_domain.positions()[*start]; - vector_data_instance.instance.point_domain.set_position(*start, start_position + start_delta); + let start_position = row.element.point_domain.positions()[*start]; + row.element.point_domain.set_position(*start, start_position + start_delta); already_applied[*start] = true; } if !already_applied[*end] { - let end_position = vector_data_instance.instance.point_domain.positions()[*end]; - vector_data_instance.instance.point_domain.set_position(*end, end_position + end_delta); + let end_position = row.element.point_domain.positions()[*end]; + row.element.point_domain.set_position(*end, end_position + end_delta); already_applied[*end] = true; } match handles { - bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => { + BezierHandles::Cubic { handle_start, handle_end } => { *handle_start += start_delta; *handle_end += end_delta; } - bezier_rs::BezierHandles::Quadratic { handle } => { - *handle = vector_data_instance.transform.transform_point2(*handle) + (start_delta + end_delta) / 2.; + BezierHandles::Quadratic { handle } => { + *handle = row.transform.transform_point2(*handle) + (start_delta + end_delta) / 2.; } - bezier_rs::BezierHandles::Linear => {} + BezierHandles::Linear => {} } } - vector_data_instance.instance.style.set_stroke_transform(DAffine2::IDENTITY); - vector_data_instance + row.element.style.set_stroke_transform(DAffine2::IDENTITY); + row }) .collect() } #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -async fn morph(_: impl Ctx, source: VectorDataTable, #[expose] target: VectorDataTable, #[default(0.5)] time: Fraction) -> VectorDataTable { +async fn morph(_: impl Ctx, source: Table, #[expose] target: Table, #[default(0.5)] time: Fraction) -> Table { /// Subdivides the last segment of the bezpath to until it appends 'count' number of segments. fn make_new_segments(bezpath: &mut BezPath, count: usize) { let bezpath_segment_count = bezpath.segments().count(); @@ -1603,22 +1505,22 @@ async fn morph(_: impl Ctx, source: VectorDataTable, #[expose] target: VectorDat let time = time.clamp(0., 1.); source - .instance_iter() - .zip(target.instance_iter()) - .map(|(source_instance, target_instance)| { - let mut vector_data_instance = VectorData::default(); + .into_iter() + .zip(target.into_iter()) + .map(|(source_row, target_row)| { + let mut vector = Vector::default(); // Lerp styles - let vector_data_alpha_blending = source_instance.alpha_blending.lerp(&target_instance.alpha_blending, time as f32); - vector_data_instance.style = source_instance.instance.style.lerp(&target_instance.instance.style, time); + let vector_alpha_blending = source_row.alpha_blending.lerp(&target_row.alpha_blending, time as f32); + vector.style = source_row.element.style.lerp(&target_row.element.style, time); // Before and after transforms - let source_transform = source_instance.transform; - let target_transform = target_instance.transform; + let source_transform = source_row.transform; + let target_transform = target_row.transform; // Before and after paths - let source_bezpaths = source_instance.instance.stroke_bezpath_iter(); - let target_bezpaths = target_instance.instance.stroke_bezpath_iter(); + let source_bezpaths = source_row.element.stroke_bezpath_iter(); + let target_bezpaths = target_row.element.stroke_bezpath_iter(); for (mut source_bezpath, mut target_bezpath) in source_bezpaths.zip(target_bezpaths) { if source_bezpath.elements().is_empty() || target_bezpath.elements().is_empty() { @@ -1655,14 +1557,14 @@ async fn morph(_: impl Ctx, source: VectorDataTable, #[expose] target: VectorDat } } - vector_data_instance.append_bezpath(source_bezpath.clone()); + vector.append_bezpath(source_bezpath.clone()); } // Deal with unmatched extra paths by collapsing them - let source_paths_count = source_instance.instance.stroke_bezpath_iter().count(); - let target_paths_count = target_instance.instance.stroke_bezpath_iter().count(); - let source_paths = source_instance.instance.stroke_bezpath_iter().skip(target_paths_count); - let target_paths = target_instance.instance.stroke_bezpath_iter().skip(source_paths_count); + let source_paths_count = source_row.element.stroke_bezpath_iter().count(); + let target_paths_count = target_row.element.stroke_bezpath_iter().count(); + let source_paths = source_row.element.stroke_bezpath_iter().skip(target_paths_count); + let target_paths = target_row.element.stroke_bezpath_iter().skip(source_paths_count); for mut source_path in source_paths { source_path.apply_affine(Affine::new(source_transform.to_cols_array())); @@ -1686,7 +1588,7 @@ async fn morph(_: impl Ctx, source: VectorDataTable, #[expose] target: VectorDat PathEl::ClosePath => {} } } - vector_data_instance.append_bezpath(source_path); + vector.append_bezpath(source_path); } for mut target_path in target_paths { @@ -1711,19 +1613,19 @@ async fn morph(_: impl Ctx, source: VectorDataTable, #[expose] target: VectorDat PathEl::ClosePath => {} } } - vector_data_instance.append_bezpath(target_path); + vector.append_bezpath(target_path); } - Instance { - instance: vector_data_instance, - alpha_blending: vector_data_alpha_blending, + TableRow { + element: vector, + alpha_blending: vector_alpha_blending, ..Default::default() } }) .collect() } -fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, distance: f64) -> VectorData { +fn bevel_algorithm(mut vector: Vector, transform: DAffine2, distance: f64) -> Vector { // Splits a bรฉzier curve based on a distance measurement fn split_distance(bezier: PathSeg, distance: f64, length: f64) -> PathSeg { let parametric = eval_pathseg_euclidean(bezier, (distance / length).clamp(0., 1.), DEFAULT_ACCURACY); @@ -1731,10 +1633,10 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, } /// Produces a list that corresponds with the point ID. The value is how many segments are connected. - fn segments_connected_count(vector_data: &VectorData) -> Vec { + fn segments_connected_count(vector: &Vector) -> Vec { // Count the number of segments connecting to each point. - let mut segments_connected_count = vec![0; vector_data.point_domain.ids().len()]; - for &point_index in vector_data.segment_domain.start_point().iter().chain(vector_data.segment_domain.end_point()) { + let mut segments_connected_count = vec![0; vector.point_domain.ids().len()]; + for &point_index in vector.segment_domain.start_point().iter().chain(vector.segment_domain.end_point()) { segments_connected_count[point_index] += 1; } @@ -1767,7 +1669,7 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, } fn calculate_distance_to_spilt(bezier1: PathSeg, bezier2: PathSeg, bevel_length: f64) -> f64 { - if is_linear(&bezier1) && is_linear(&bezier2) { + if is_linear(bezier1) && is_linear(bezier2) { let v1 = (bezier1.end() - bezier1.start()).normalize(); let v2 = (bezier1.end() - bezier2.end()).normalize(); @@ -1873,12 +1775,12 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, sorted_segments } - fn update_existing_segments(vector_data: &mut VectorData, vector_data_transform: DAffine2, distance: f64, segments_connected: &mut [usize]) -> Vec<[usize; 2]> { - let mut next_id = vector_data.point_domain.next_id(); + fn update_existing_segments(vector: &mut Vector, transform: DAffine2, distance: f64, segments_connected: &mut [usize]) -> Vec<[usize; 2]> { + let mut next_id = vector.point_domain.next_id(); let mut new_segments = Vec::new(); - let sorted_segments = sort_segments(&vector_data.segment_domain); - let segment_domain = &mut vector_data.segment_domain; + let sorted_segments = sort_segments(&vector.segment_domain); + let segment_domain = &mut vector.segment_domain; let segment_domain_length = segment_domain.ids().len(); let mut first_original_length = 0.; @@ -1891,37 +1793,29 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, let pair_handles_and_points = segment_domain.pair_handles_and_points_mut_by_index(sorted_segments[index], sorted_segments[next_index]); let (handles, start_point, end_point, next_handles, next_start_point, next_end_point) = pair_handles_and_points; - let start = vector_data.point_domain.positions()[*start_point]; - let end = vector_data.point_domain.positions()[*end_point]; + let start = vector.point_domain.positions()[*start_point]; + let end = vector.point_domain.positions()[*end_point]; let mut bezier = handles_to_segment(start, *handles, end); - bezier = Affine::new(vector_data_transform.to_cols_array()) * bezier; + bezier = Affine::new(transform.to_cols_array()) * bezier; - let next_start = vector_data.point_domain.positions()[*next_start_point]; - let next_end = vector_data.point_domain.positions()[*next_end_point]; + let next_start = vector.point_domain.positions()[*next_start_point]; + let next_end = vector.point_domain.positions()[*next_end_point]; let mut next_bezier = handles_to_segment(next_start, *next_handles, next_end); - next_bezier = Affine::new(vector_data_transform.to_cols_array()) * next_bezier; + next_bezier = Affine::new(transform.to_cols_array()) * next_bezier; let spilt_distance = calculate_distance_to_spilt(bezier, next_bezier, distance); - if is_linear(&bezier) { - let start = point_to_dvec2(bezier.start()); - let end = point_to_dvec2(bezier.end()); - bezier = handles_to_segment(start, BezierHandles::Linear, end); + if is_linear(bezier) { + bezier = PathSeg::Line(Line::new(bezier.start(), bezier.end())); } - if is_linear(&next_bezier) { - let start = point_to_dvec2(next_bezier.start()); - let end = point_to_dvec2(next_bezier.end()); - next_bezier = handles_to_segment(start, BezierHandles::Linear, end); + if is_linear(next_bezier) { + next_bezier = PathSeg::Line(Line::new(next_bezier.start(), next_bezier.end())); } - let inverse_transform = if vector_data_transform.matrix2.determinant() != 0. { - vector_data_transform.inverse() - } else { - Default::default() - }; + let inverse_transform = if transform.matrix2.determinant() != 0. { transform.inverse() } else { Default::default() }; if index == 0 && next_index == 1 { first_original_length = bezier.perimeter(DEFAULT_ACCURACY); @@ -1953,7 +1847,7 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, // Update the end position let pos = inverse_transform.transform_point2(point_to_dvec2(bezier.end())); - create_or_modify_point(&mut vector_data.point_domain, segments_connected, pos, end_point, &mut next_id, &mut new_segments); + create_or_modify_point(&mut vector.point_domain, segments_connected, pos, end_point, &mut next_id, &mut new_segments); } // Update the handles @@ -1970,7 +1864,7 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, // Update the start position let pos = inverse_transform.transform_point2(point_to_dvec2(next_bezier.start())); - create_or_modify_point(&mut vector_data.point_domain, segments_connected, pos, next_start_point, &mut next_id, &mut new_segments); + create_or_modify_point(&mut vector.point_domain, segments_connected, pos, next_start_point, &mut next_id, &mut new_segments); // Update the handles *next_handles = segment_to_handles(&next_bezier).apply_transformation(|p| inverse_transform.transform_point2(p)); @@ -1983,64 +1877,63 @@ fn bevel_algorithm(mut vector_data: VectorData, vector_data_transform: DAffine2, new_segments } - fn insert_new_segments(vector_data: &mut VectorData, new_segments: &[[usize; 2]]) { - let mut next_id = vector_data.segment_domain.next_id(); + fn insert_new_segments(vector: &mut Vector, new_segments: &[[usize; 2]]) { + let mut next_id = vector.segment_domain.next_id(); for &[start, end] in new_segments { - let handles = bezier_rs::BezierHandles::Linear; - vector_data.segment_domain.push(next_id.next_id(), start, end, handles, StrokeId::ZERO); + let handles = BezierHandles::Linear; + vector.segment_domain.push(next_id.next_id(), start, end, handles, StrokeId::ZERO); } } - if distance > 1. && vector_data.segment_domain.ids().len() > 1 { - let mut segments_connected = segments_connected_count(&vector_data); - let new_segments = update_existing_segments(&mut vector_data, vector_data_transform, distance, &mut segments_connected); - insert_new_segments(&mut vector_data, &new_segments); + if distance > 1. && vector.segment_domain.ids().len() > 1 { + let mut segments_connected = segments_connected_count(&vector); + let new_segments = update_existing_segments(&mut vector, transform, distance, &mut segments_connected); + insert_new_segments(&mut vector, &new_segments); } - vector_data + vector } #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -fn bevel(_: impl Ctx, source: VectorDataTable, #[default(10.)] distance: Length) -> VectorDataTable { +fn bevel(_: impl Ctx, source: Table, #[default(10.)] distance: Length) -> Table { source - .instance_iter() - .map(|source_instance| Instance { - instance: bevel_algorithm(source_instance.instance, source_instance.transform, distance), - ..source_instance + .into_iter() + .map(|row| TableRow { + element: bevel_algorithm(row.element, row.transform, distance), + ..row }) .collect() } #[node_macro::node(category("Vector: Modifier"), path(graphene_core::vector))] -fn close_path(_: impl Ctx, source: VectorDataTable) -> VectorDataTable { +fn close_path(_: impl Ctx, source: Table) -> Table { source - .instance_iter() - .map(|mut source_instance| { - source_instance.instance.close_subpaths(); - source_instance + .into_iter() + .map(|mut row| { + row.element.close_subpaths(); + row }) .collect() } #[node_macro::node(category("Vector: Measure"), path(graphene_core::vector))] -fn point_inside(_: impl Ctx, source: VectorDataTable, point: DVec2) -> bool { - source.instance_iter().any(|instance| instance.instance.check_point_inside_shape(instance.transform, point)) +fn point_inside(_: impl Ctx, source: Table, point: DVec2) -> bool { + source.into_iter().any(|row| row.element.check_point_inside_shape(row.transform, point)) } #[node_macro::node(category("General"), path(graphene_core::vector))] -async fn count_elements(_: impl Ctx, #[implementations(GraphicGroupTable, VectorDataTable, RasterDataTable, RasterDataTable)] source: Instances) -> u64 { +async fn count_elements(_: impl Ctx, #[implementations(Table, Table, Table>, Table>, Table, Table)] source: Table) -> u64 { source.len() as u64 } #[node_macro::node(category("Vector: Measure"), path(graphene_core::vector))] -async fn path_length(_: impl Ctx, source: VectorDataTable) -> f64 { +async fn path_length(_: impl Ctx, source: Table) -> f64 { source - .instance_iter() - .map(|vector_data_instance| { - let transform = vector_data_instance.transform; - vector_data_instance - .instance + .into_iter() + .map(|row| { + let transform = row.transform; + row.element .stroke_bezpath_iter() .map(|mut bezpath| { bezpath.apply_affine(Affine::new(transform.to_cols_array())); @@ -2052,25 +1945,25 @@ async fn path_length(_: impl Ctx, source: VectorDataTable) -> f64 { } #[node_macro::node(category("Vector: Measure"), path(graphene_core::vector))] -async fn area(ctx: impl Ctx + CloneVarArgs + ExtractAll, vector_data: impl Node, Output = VectorDataTable>) -> f64 { +async fn area(ctx: impl Ctx + CloneVarArgs + ExtractAll, content: impl Node, Output = Table>) -> f64 { let new_ctx = OwnedContextImpl::from(ctx).with_footprint(Footprint::default()).into_context(); - let vector_data = vector_data.eval(new_ctx).await; + let vector = content.eval(new_ctx).await; - vector_data - .instance_ref_iter() - .map(|vector_data_instance| { - let scale = vector_data_instance.transform.decompose_scale(); - vector_data_instance.instance.stroke_bezpath_iter().map(|subpath| subpath.area() * scale.x * scale.y).sum::() + vector + .iter() + .map(|row| { + let scale = row.transform.decompose_scale(); + row.element.stroke_bezpath_iter().map(|subpath| subpath.area() * scale.x * scale.y).sum::() }) .sum() } #[node_macro::node(category("Vector: Measure"), path(graphene_core::vector))] -async fn centroid(ctx: impl Ctx + CloneVarArgs + ExtractAll, vector_data: impl Node, Output = VectorDataTable>, centroid_type: CentroidType) -> DVec2 { +async fn centroid(ctx: impl Ctx + CloneVarArgs + ExtractAll, content: impl Node, Output = Table>, centroid_type: CentroidType) -> DVec2 { let new_ctx = OwnedContextImpl::from(ctx).with_footprint(Footprint::default()).into_context(); - let vector_data = vector_data.eval(new_ctx).await; + let vector = content.eval(new_ctx).await; - if vector_data.is_empty() { + if vector.is_empty() { return DVec2::ZERO; } @@ -2079,14 +1972,14 @@ async fn centroid(ctx: impl Ctx + CloneVarArgs + ExtractAll, vector_data: impl N // Cumulative area or length of all subpaths let mut sum = 0.; - for vector_data_instance in vector_data.instance_ref_iter() { - for subpath in vector_data_instance.instance.stroke_bezier_paths() { + for row in vector.iter() { + for subpath in row.element.stroke_bezier_paths() { let partial = match centroid_type { CentroidType::Area => subpath.area_centroid_and_area(Some(1e-3), Some(1e-3)).filter(|(_, area)| *area > 0.), CentroidType::Length => subpath.length_centroid_and_length(None, true), }; if let Some((subpath_centroid, area_or_length)) = partial { - let subpath_centroid = vector_data_instance.transform.transform_point2(subpath_centroid); + let subpath_centroid = row.transform.transform_point2(subpath_centroid); sum += area_or_length; centroid += area_or_length * subpath_centroid; @@ -2101,16 +1994,9 @@ async fn centroid(ctx: impl Ctx + CloneVarArgs + ExtractAll, vector_data: impl N else { let mut count: usize = 0; - let summed_positions = vector_data - .instance_ref_iter() - .flat_map(|vector_data_instance| { - vector_data_instance - .instance - .point_domain - .positions() - .iter() - .map(|&p| vector_data_instance.transform.transform_point2(p)) - }) + let summed_positions = vector + .iter() + .flat_map(|row| row.element.point_domain.positions().iter().map(|&p| row.transform.transform_point2(p))) .inspect(|_| count += 1) .sum::(); @@ -2122,8 +2008,9 @@ async fn centroid(ctx: impl Ctx + CloneVarArgs + ExtractAll, vector_data: impl N mod test { use super::*; use crate::Node; - use bezier_rs::Bezier; - use kurbo::Rect; + use crate::vector::algorithms::bezpath_algorithms::{TValue, trim_pathseg}; + use crate::vector::misc::pathseg_abs_diff_eq; + use kurbo::{CubicBez, Ellipse, Point, Rect}; use std::pin::Pin; #[derive(Clone)] @@ -2137,15 +2024,15 @@ mod test { } } - fn vector_node(data: Subpath) -> VectorDataTable { - VectorDataTable::new(VectorData::from_subpath(data)) + fn vector_node_from_bezpath(bezpath: BezPath) -> Table { + Table::new_from_element(Vector::from_bezpath(bezpath)) } - fn create_vector_data_instance(bezpath: BezPath, transform: DAffine2) -> Instance { - let mut instance = VectorData::default(); - instance.append_bezpath(bezpath); - Instance { - instance, + fn create_vector_row(bezpath: BezPath, transform: DAffine2) -> TableRow { + let mut row = Vector::default(); + row.append_bezpath(bezpath); + TableRow { + element: row, transform, ..Default::default() } @@ -2154,38 +2041,52 @@ mod test { #[tokio::test] async fn repeat() { let direction = DVec2::X * 1.5; - let instances = 3; - let repeated = super::repeat(Footprint::default(), vector_node(Subpath::new_rect(DVec2::ZERO, DVec2::ONE)), direction, 0., instances).await; - let vector_data = super::flatten_path(Footprint::default(), repeated).await; - let vector_data = vector_data.instance_ref_iter().next().unwrap().instance; - assert_eq!(vector_data.region_bezier_paths().count(), 3); - for (index, (_, subpath)) in vector_data.region_bezier_paths().enumerate() { - assert!((subpath.manipulator_groups()[0].anchor - direction * index as f64 / (instances - 1) as f64).length() < 1e-5); + let count = 3; + let repeated = super::repeat( + Footprint::default(), + vector_node_from_bezpath(Rect::new(0., 0., 1., 1.).to_path(DEFAULT_ACCURACY)), + direction, + 0., + count, + ) + .await; + let vector_table = super::flatten_path(Footprint::default(), repeated).await; + let vector = vector_table.iter().next().unwrap().element; + assert_eq!(vector.region_manipulator_groups().count(), 3); + for (index, (_, manipulator_groups)) in vector.region_manipulator_groups().enumerate() { + assert!((manipulator_groups[0].anchor - direction * index as f64 / (count - 1) as f64).length() < 1e-5); } } #[tokio::test] async fn repeat_transform_position() { let direction = DVec2::new(12., 10.); - let instances = 8; - let repeated = super::repeat(Footprint::default(), vector_node(Subpath::new_rect(DVec2::ZERO, DVec2::ONE)), direction, 0., instances).await; - let vector_data = super::flatten_path(Footprint::default(), repeated).await; - let vector_data = vector_data.instance_ref_iter().next().unwrap().instance; - assert_eq!(vector_data.region_bezier_paths().count(), 8); - for (index, (_, subpath)) in vector_data.region_bezier_paths().enumerate() { - assert!((subpath.manipulator_groups()[0].anchor - direction * index as f64 / (instances - 1) as f64).length() < 1e-5); + let count = 8; + let repeated = super::repeat( + Footprint::default(), + vector_node_from_bezpath(Rect::new(0., 0., 1., 1.).to_path(DEFAULT_ACCURACY)), + direction, + 0., + count, + ) + .await; + let vector_table = super::flatten_path(Footprint::default(), repeated).await; + let vector = vector_table.iter().next().unwrap().element; + assert_eq!(vector.region_manipulator_groups().count(), 8); + for (index, (_, manipulator_groups)) in vector.region_manipulator_groups().enumerate() { + assert!((manipulator_groups[0].anchor - direction * index as f64 / (count - 1) as f64).length() < 1e-5); } } #[tokio::test] async fn circular_repeat() { - let repeated = super::circular_repeat(Footprint::default(), vector_node(Subpath::new_rect(DVec2::NEG_ONE, DVec2::ONE)), 45., 4., 8).await; - let vector_data = super::flatten_path(Footprint::default(), repeated).await; - let vector_data = vector_data.instance_ref_iter().next().unwrap().instance; - assert_eq!(vector_data.region_bezier_paths().count(), 8); + let repeated = super::circular_repeat(Footprint::default(), vector_node_from_bezpath(Rect::new(-1., -1., 1., 1.).to_path(DEFAULT_ACCURACY)), 45., 4., 8).await; + let vector_table = super::flatten_path(Footprint::default(), repeated).await; + let vector = vector_table.iter().next().unwrap().element; + assert_eq!(vector.region_manipulator_groups().count(), 8); - for (index, (_, subpath)) in vector_data.region_bezier_paths().enumerate() { + for (index, (_, manipulator_groups)) in vector.region_manipulator_groups().enumerate() { let expected_angle = (index as f64 + 1.) * 45.; - let center = (subpath.manipulator_groups()[0].anchor + subpath.manipulator_groups()[2].anchor) / 2.; + let center = (manipulator_groups[0].anchor + manipulator_groups[2].anchor) / 2.; let actual_angle = DVec2::Y.angle_to(center).to_degrees(); assert!((actual_angle - expected_angle).abs() % 360. < 1e-5, "Expected {expected_angle} found {actual_angle}"); @@ -2193,55 +2094,69 @@ mod test { } #[tokio::test] async fn bounding_box() { - let bounding_box = super::bounding_box((), vector_node(Subpath::new_rect(DVec2::NEG_ONE, DVec2::ONE))).await; - let bounding_box = bounding_box.instance_ref_iter().next().unwrap().instance; - assert_eq!(bounding_box.region_bezier_paths().count(), 1); - let subpath = bounding_box.region_bezier_paths().next().unwrap().1; - assert_eq!(&subpath.anchors()[..4], &[DVec2::NEG_ONE, DVec2::new(1., -1.), DVec2::ONE, DVec2::new(-1., 1.),]); + let bounding_box = super::bounding_box((), vector_node_from_bezpath(Rect::new(-1., -1., 1., 1.).to_path(DEFAULT_ACCURACY))).await; + let bounding_box = bounding_box.iter().next().unwrap().element; + assert_eq!(bounding_box.region_manipulator_groups().count(), 1); + let manipulator_groups_anchors = bounding_box + .region_manipulator_groups() + .next() + .unwrap() + .1 + .iter() + .map(|manipulators| manipulators.anchor) + .collect::>(); - // Test a VectorData with non-zero rotation - let square = VectorData::from_subpath(Subpath::new_rect(DVec2::NEG_ONE, DVec2::ONE)); - let mut square = VectorDataTable::new(square); + assert_eq!(&manipulator_groups_anchors[..4], &[DVec2::NEG_ONE, DVec2::new(1., -1.), DVec2::ONE, DVec2::new(-1., 1.),]); + + // Test a rectangular path with non-zero rotation + let square = Vector::from_bezpath(Rect::new(-1., -1., 1., 1.).to_path(DEFAULT_ACCURACY)); + let mut square = Table::new_from_element(square); *square.get_mut(0).unwrap().transform *= DAffine2::from_angle(std::f64::consts::FRAC_PI_4); - let bounding_box = BoundingBoxNode { - vector_data: FutureWrapperNode(square), - } - .eval(Footprint::default()) - .await; - let bounding_box = bounding_box.instance_ref_iter().next().unwrap().instance; - assert_eq!(bounding_box.region_bezier_paths().count(), 1); - let subpath = bounding_box.region_bezier_paths().next().unwrap().1; + let bounding_box = BoundingBoxNode { content: FutureWrapperNode(square) }.eval(Footprint::default()).await; + let bounding_box = bounding_box.iter().next().unwrap().element; + assert_eq!(bounding_box.region_manipulator_groups().count(), 1); + let manipulator_groups_anchors = bounding_box + .region_manipulator_groups() + .next() + .unwrap() + .1 + .iter() + .map(|manipulators| manipulators.anchor) + .collect::>(); + let expected_bounding_box = [DVec2::NEG_ONE, DVec2::new(1., -1.), DVec2::ONE, DVec2::new(-1., 1.)]; for i in 0..4 { - assert_eq!(subpath.anchors()[i], expected_bounding_box[i]); + assert_eq!(manipulator_groups_anchors[i], expected_bounding_box[i]); } } #[tokio::test] async fn copy_to_points() { - let points = Subpath::new_rect(DVec2::NEG_ONE * 10., DVec2::ONE * 10.); - let instance = Subpath::new_rect(DVec2::NEG_ONE, DVec2::ONE); + let points = Rect::new(-10., -10., 10., 10.).to_path(DEFAULT_ACCURACY); + let element = Rect::new(-1., -1., 1., 1.).to_path(DEFAULT_ACCURACY); - let expected_points = VectorData::from_subpath(points.clone()).point_domain.positions().to_vec(); + let expected_points = Vector::from_bezpath(points.clone()).point_domain.positions().to_vec(); - let copy_to_points = super::copy_to_points(Footprint::default(), vector_node(points), vector_node(instance), 1., 1., 0., 0, 0., 0).await; + let copy_to_points = super::copy_to_points(Footprint::default(), vector_node_from_bezpath(points), vector_node_from_bezpath(element), 1., 1., 0., 0, 0., 0).await; let flatten_path = super::flatten_path(Footprint::default(), copy_to_points).await; - let flattened_copy_to_points = flatten_path.instance_ref_iter().next().unwrap().instance; + let flattened_copy_to_points = flatten_path.iter().next().unwrap().element; - assert_eq!(flattened_copy_to_points.region_bezier_paths().count(), expected_points.len()); + assert_eq!(flattened_copy_to_points.region_manipulator_groups().count(), expected_points.len()); - for (index, (_, subpath)) in flattened_copy_to_points.region_bezier_paths().enumerate() { + for (index, (_, manipulator_groups)) in flattened_copy_to_points.region_manipulator_groups().enumerate() { let offset = expected_points[index]; + let manipulator_groups_anchors = manipulator_groups.iter().map(|manipulators| manipulators.anchor).collect::>(); assert_eq!( - &subpath.anchors(), + &manipulator_groups_anchors, &[offset + DVec2::NEG_ONE, offset + DVec2::new(1., -1.), offset + DVec2::ONE, offset + DVec2::new(-1., 1.),] ); } } + #[tokio::test] async fn sample_polyline() { - let path = Subpath::from_bezier(&Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::ZERO, DVec2::X * 100., DVec2::X * 100.)); - let sample_polyline = super::sample_polyline(Footprint::default(), vector_node(path), PointSpacingType::Separation, 30., 0, 0., 0., false, vec![100.]).await; - let sample_polyline = sample_polyline.instance_ref_iter().next().unwrap().instance; + let path = BezPath::from_vec(vec![PathEl::MoveTo(Point::ZERO), PathEl::CurveTo(Point::ZERO, Point::new(100., 0.), Point::new(100., 0.))]); + let sample_polyline = super::sample_polyline(Footprint::default(), vector_node_from_bezpath(path), PointSpacingType::Separation, 30., 0, 0., 0., false, vec![100.]).await; + let sample_polyline = sample_polyline.iter().next().unwrap().element; assert_eq!(sample_polyline.point_domain.positions().len(), 4); for (pos, expected) in sample_polyline.point_domain.positions().iter().zip([DVec2::X * 0., DVec2::X * 30., DVec2::X * 60., DVec2::X * 90.]) { assert!(pos.distance(expected) < 1e-3, "Expected {expected} found {pos}"); @@ -2249,9 +2164,9 @@ mod test { } #[tokio::test] async fn sample_polyline_adaptive_spacing() { - let path = Subpath::from_bezier(&Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::ZERO, DVec2::X * 100., DVec2::X * 100.)); - let sample_polyline = super::sample_polyline(Footprint::default(), vector_node(path), PointSpacingType::Separation, 18., 0, 45., 10., true, vec![100.]).await; - let sample_polyline = sample_polyline.instance_ref_iter().next().unwrap().instance; + let path = BezPath::from_vec(vec![PathEl::MoveTo(Point::ZERO), PathEl::CurveTo(Point::ZERO, Point::new(100., 0.), Point::new(100., 0.))]); + let sample_polyline = super::sample_polyline(Footprint::default(), vector_node_from_bezpath(path), PointSpacingType::Separation, 18., 0, 45., 10., true, vec![100.]).await; + let sample_polyline = sample_polyline.iter().next().unwrap().element; assert_eq!(sample_polyline.point_domain.positions().len(), 4); for (pos, expected) in sample_polyline.point_domain.positions().iter().zip([DVec2::X * 45., DVec2::X * 60., DVec2::X * 75., DVec2::X * 90.]) { assert!(pos.distance(expected) < 1e-3, "Expected {expected} found {pos}"); @@ -2261,12 +2176,12 @@ mod test { async fn poisson() { let poisson_points = super::poisson_disk_points( Footprint::default(), - vector_node(Subpath::new_ellipse(DVec2::NEG_ONE * 50., DVec2::ONE * 50.)), + vector_node_from_bezpath(Ellipse::from_rect(Rect::new(-50., -50., 50., 50.)).to_path(DEFAULT_ACCURACY)), 10. * std::f64::consts::SQRT_2, 0, ) .await; - let poisson_points = poisson_points.instance_ref_iter().next().unwrap().instance; + let poisson_points = poisson_points.iter().next().unwrap().element; assert!( (20..=40).contains(&poisson_points.point_domain.positions().len()), "actual len {}", @@ -2278,145 +2193,165 @@ mod test { } #[tokio::test] async fn segment_lengths() { - let subpath = Subpath::from_bezier(&Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::ZERO, DVec2::X * 100., DVec2::X * 100.)); - let lengths = subpath_segment_lengths(Footprint::default(), vector_node(subpath)).await; + let bezpath = BezPath::from_vec(vec![PathEl::MoveTo(Point::ZERO), PathEl::CurveTo(Point::ZERO, Point::new(100., 0.), Point::new(100., 0.))]); + let lengths = subpath_segment_lengths(Footprint::default(), vector_node_from_bezpath(bezpath)).await; assert_eq!(lengths, vec![100.]); } #[tokio::test] async fn path_length() { let bezpath = Rect::new(100., 100., 201., 201.).to_path(DEFAULT_ACCURACY); let transform = DAffine2::from_scale(DVec2::new(2., 2.)); - let instance = create_vector_data_instance(bezpath, transform); - let instances = (0..5).map(|_| instance.clone()).collect::>(); + let row = create_vector_row(bezpath, transform); + let table = (0..5).map(|_| row.clone()).collect::>(); - let length = super::path_length(Footprint::default(), instances).await; + let length = super::path_length(Footprint::default(), table).await; // 101 (each rectangle edge length) * 4 (rectangle perimeter) * 2 (scale) * 5 (number of rows) assert_eq!(length, 101. * 4. * 2. * 5.); } #[tokio::test] async fn spline() { - let spline = super::spline(Footprint::default(), vector_node(Subpath::new_rect(DVec2::ZERO, DVec2::ONE * 100.))).await; - let spline = spline.instance_ref_iter().next().unwrap().instance; - assert_eq!(spline.stroke_bezier_paths().count(), 1); + let spline = super::spline(Footprint::default(), vector_node_from_bezpath(Rect::new(0., 0., 100., 100.).to_path(DEFAULT_ACCURACY))).await; + let spline = spline.iter().next().unwrap().element; + assert_eq!(spline.stroke_bezpath_iter().count(), 1); assert_eq!(spline.point_domain.positions(), &[DVec2::ZERO, DVec2::new(100., 0.), DVec2::new(100., 100.), DVec2::new(0., 100.)]); } #[tokio::test] async fn morph() { - let source = Subpath::new_rect(DVec2::ZERO, DVec2::ONE * 100.); - let target = Subpath::new_ellipse(DVec2::NEG_ONE * 100., DVec2::ZERO); - let morphed = super::morph(Footprint::default(), vector_node(source), vector_node(target), 0.5).await; - let morphed = morphed.instance_ref_iter().next().unwrap().instance; + let source = Rect::new(0., 0., 100., 100.).to_path(DEFAULT_ACCURACY); + let target = Rect::new(-100., -100., 0., 0.).to_path(DEFAULT_ACCURACY); + let morphed = super::morph(Footprint::default(), vector_node_from_bezpath(source), vector_node_from_bezpath(target), 0.5).await; + let morphed = morphed.iter().next().unwrap().element; assert_eq!( &morphed.point_domain.positions()[..4], - vec![DVec2::new(-25., -50.), DVec2::new(50., -25.), DVec2::new(25., 50.), DVec2::new(-50., 25.)] + vec![DVec2::new(-50., -50.), DVec2::new(50., -50.), DVec2::new(50., 50.), DVec2::new(-50., 50.)] ); } #[track_caller] - fn contains_segment(vector: VectorData, target: Bezier) { - let segments = vector.segment_bezier_iter().map(|x| x.1); - let count = segments.filter(|bezier| bezier.abs_diff_eq(&target, 0.01) || bezier.reversed().abs_diff_eq(&target, 0.01)).count(); + fn contains_segment(vector: Vector, target: PathSeg) { + let segments = vector.segment_iter().map(|x| x.1); + let count = segments + .filter(|segment| pathseg_abs_diff_eq(*segment, target, 0.01) || pathseg_abs_diff_eq(segment.reverse(), target, 0.01)) + .count(); + assert_eq!( count, 1, "Expected exactly one matching segment for {target:?}, but found {count}. The given segments are: {:#?}", - vector.segment_bezier_iter().collect::>() + vector.segment_iter().collect::>() ); } #[tokio::test] async fn bevel_rect() { - let source = Subpath::new_rect(DVec2::ZERO, DVec2::ONE * 100.); - let beveled = super::bevel(Footprint::default(), vector_node(source), 2_f64.sqrt() * 10.); - let beveled = beveled.instance_ref_iter().next().unwrap().instance; + let source = Rect::new(0., 0., 100., 100.).to_path(DEFAULT_ACCURACY); + let beveled = super::bevel(Footprint::default(), vector_node_from_bezpath(source), 2_f64.sqrt() * 10.); + let beveled = beveled.iter().next().unwrap().element; assert_eq!(beveled.point_domain.positions().len(), 8); assert_eq!(beveled.segment_domain.ids().len(), 8); // Segments - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(10., 0.), DVec2::new(90., 0.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(10., 100.), DVec2::new(90., 100.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(0., 10.), DVec2::new(0., 90.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(100., 10.), DVec2::new(100., 90.))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(10., 0.), Point::new(90., 0.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(10., 100.), Point::new(90., 100.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(0., 10.), Point::new(0., 90.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(100., 10.), Point::new(100., 90.)))); // Joins - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(10., 0.), DVec2::new(0., 10.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(90., 0.), DVec2::new(100., 10.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(100., 90.), DVec2::new(90., 100.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(10., 100.), DVec2::new(0., 90.))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(10., 0.), Point::new(0., 10.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(90., 0.), Point::new(100., 10.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(100., 90.), Point::new(90., 100.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(10., 100.), Point::new(0., 90.)))); } #[tokio::test] async fn bevel_open_curve() { - let curve = Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::new(10., 0.), DVec2::new(10., 100.), DVec2::X * 100.); - let source = Subpath::from_beziers(&[Bezier::from_linear_dvec2(DVec2::X * -100., DVec2::ZERO), curve], false); - let beveled = super::bevel((), vector_node(source), 2_f64.sqrt() * 10.); - let beveled = beveled.instance_ref_iter().next().unwrap().instance; + let curve = PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(10., 0.), Point::new(10., 100.), Point::new(100., 0.))); + + let mut source = BezPath::new(); + source.move_to(Point::new(-100., 0.)); + source.line_to(Point::ZERO); + source.push(curve.as_path_el()); + + let beveled = super::bevel((), vector_node_from_bezpath(source), 2_f64.sqrt() * 10.); + let beveled = beveled.iter().next().unwrap().element; assert_eq!(beveled.point_domain.positions().len(), 4); assert_eq!(beveled.segment_domain.ids().len(), 3); // Segments - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(-8.2, 0.), DVec2::new(-100., 0.))); - let trimmed = curve.trim(bezier_rs::TValue::Euclidean(8.2 / curve.length(Some(0.00001))), bezier_rs::TValue::Parametric(1.)); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(-8.2, 0.), Point::new(-100., 0.)))); + let trimmed = trim_pathseg(curve, TValue::Euclidean(8.2 / curve.perimeter(DEFAULT_ACCURACY)), TValue::Parametric(1.)).unwrap(); contains_segment(beveled.clone(), trimmed); // Join - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(-8.2, 0.), trimmed.start)); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(-8.2, 0.), trimmed.start()))); } #[tokio::test] async fn bevel_with_transform() { - let curve = Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::new(10., 0.), DVec2::new(10., 100.), DVec2::new(100., 0.)); - let source = Subpath::::from_beziers(&[Bezier::from_linear_dvec2(DVec2::new(-100., 0.), DVec2::ZERO), curve], false); - let vector_data = VectorData::from_subpath(source); - let mut vector_data_table = VectorDataTable::new(vector_data.clone()); + let curve = PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(10., 0.), Point::new(10., 100.), Point::new(100., 0.))); - *vector_data_table.get_mut(0).unwrap().transform = DAffine2::from_scale_angle_translation(DVec2::splat(10.), 1., DVec2::new(99., 77.)); + let mut source = BezPath::new(); + source.move_to(Point::new(-100., 0.)); + source.line_to(Point::ZERO); + source.push(curve.as_path_el()); - let beveled = super::bevel((), VectorDataTable::new(vector_data), 2_f64.sqrt() * 10.); - let beveled = beveled.instance_ref_iter().next().unwrap().instance; + let vector = Vector::from_bezpath(source); + let mut vector_table = Table::new_from_element(vector.clone()); + + *vector_table.get_mut(0).unwrap().transform = DAffine2::from_scale_angle_translation(DVec2::splat(10.), 1., DVec2::new(99., 77.)); + + let beveled = super::bevel((), Table::new_from_element(vector), 2_f64.sqrt() * 10.); + let beveled = beveled.iter().next().unwrap().element; assert_eq!(beveled.point_domain.positions().len(), 4); assert_eq!(beveled.segment_domain.ids().len(), 3); // Segments - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(-8.2, 0.), DVec2::new(-100., 0.))); - let trimmed = curve.trim(bezier_rs::TValue::Euclidean(8.2 / curve.length(Some(0.00001))), bezier_rs::TValue::Parametric(1.)); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(-8.2, 0.), Point::new(-100., 0.)))); + let trimmed = trim_pathseg(curve, TValue::Euclidean(8.2 / curve.perimeter(DEFAULT_ACCURACY)), TValue::Parametric(1.)).unwrap(); contains_segment(beveled.clone(), trimmed); // Join - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(-8.2, 0.), trimmed.start)); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(-8.2, 0.), trimmed.start()))); } #[tokio::test] async fn bevel_too_high() { - let source = Subpath::from_anchors([DVec2::ZERO, DVec2::new(100., 0.), DVec2::new(100., 100.), DVec2::new(0., 100.)], false); - let beveled = super::bevel(Footprint::default(), vector_node(source), 999.); - let beveled = beveled.instance_ref_iter().next().unwrap().instance; + let mut source = BezPath::new(); + source.move_to(Point::ZERO); + source.line_to(Point::new(100., 0.)); + source.line_to(Point::new(100., 100.)); + source.line_to(Point::new(0., 100.)); + + let beveled = super::bevel(Footprint::default(), vector_node_from_bezpath(source), 999.); + let beveled = beveled.iter().next().unwrap().element; assert_eq!(beveled.point_domain.positions().len(), 6); assert_eq!(beveled.segment_domain.ids().len(), 5); // Segments - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(0., 0.), DVec2::new(50., 0.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(100., 50.), DVec2::new(100., 50.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(100., 50.), DVec2::new(50., 100.))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(0., 0.), Point::new(50., 0.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(100., 50.), Point::new(100., 50.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(100., 50.), Point::new(50., 100.)))); // Joins - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(50., 0.), DVec2::new(100., 50.))); - contains_segment(beveled.clone(), Bezier::from_linear_dvec2(DVec2::new(100., 50.), DVec2::new(50., 100.))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(50., 0.), Point::new(100., 50.)))); + contains_segment(beveled.clone(), PathSeg::Line(Line::new(Point::new(100., 50.), Point::new(50., 100.)))); } #[tokio::test] async fn bevel_repeated_point() { - let line = Bezier::from_linear_dvec2(DVec2::ZERO, DVec2::new(100., 0.)); - let point = Bezier::from_cubic_dvec2(DVec2::new(100., 0.), DVec2::ZERO, DVec2::ZERO, DVec2::new(100., 0.)); - let curve = Bezier::from_cubic_dvec2(DVec2::new(100., 0.), DVec2::new(110., 0.), DVec2::new(110., 200.), DVec2::new(200., 0.)); - let subpath = Subpath::from_beziers(&[line, point, curve], false); - let beveled_table = super::bevel(Footprint::default(), vector_node(subpath), 5.); - let beveled = beveled_table.instance_ref_iter().next().unwrap().instance; + let line = PathSeg::Line(Line::new(Point::ZERO, Point::new(100., 0.))); + let point = PathSeg::Cubic(CubicBez::new(Point::new(100., 0.), Point::ZERO, Point::ZERO, Point::new(100., 0.))); + let curve = PathSeg::Cubic(CubicBez::new(Point::new(100., 0.), Point::new(110., 0.), Point::new(110., 200.), Point::new(200., 0.))); + + let subpath = BezPath::from_path_segments([line, point, curve].into_iter()); + + let beveled_table = super::bevel(Footprint::default(), vector_node_from_bezpath(subpath), 5.); + let beveled = beveled_table.iter().next().unwrap().element; assert_eq!(beveled.point_domain.positions().len(), 6); assert_eq!(beveled.segment_domain.ids().len(), 5); diff --git a/node-graph/gcore/src/vector/vector_data.rs b/node-graph/gcore/src/vector/vector_types.rs similarity index 57% rename from node-graph/gcore/src/vector/vector_data.rs rename to node-graph/gcore/src/vector/vector_types.rs index 04a929ed23..84b4acd365 100644 --- a/node-graph/gcore/src/vector/vector_data.rs +++ b/node-graph/gcore/src/vector/vector_types.rs @@ -1,85 +1,24 @@ -mod attributes; -mod indexed; -mod modification; - -use super::misc::{dvec2_to_point, point_to_dvec2}; +use super::misc::dvec2_to_point; use super::style::{PathStyle, Stroke}; -use crate::bounds::BoundingBox; -use crate::instances::Instances; +pub use super::vector_attributes::*; +pub use super::vector_modification::*; +use crate::bounds::{BoundingBox, RenderBoundingBox}; use crate::math::quad::Quad; +use crate::subpath::{BezierHandles, ManipulatorGroup, Subpath}; +use crate::table::Table; use crate::transform::Transform; use crate::vector::click_target::{ClickTargetType, FreePoint}; -use crate::{AlphaBlending, Color, GraphicGroupTable}; -pub use attributes::*; -use bezier_rs::{BezierHandles, ManipulatorGroup}; +use crate::vector::misc::{HandleId, ManipulatorPointId}; +use crate::{AlphaBlending, Color, Graphic}; use core::borrow::Borrow; -use core::hash::Hash; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; -pub use indexed::VectorDataIndex; -use kurbo::{Affine, Rect, Shape}; -pub use modification::*; +use kurbo::{Affine, BezPath, Rect, Shape}; use std::collections::HashMap; -// TODO: Eventually remove this migration document upgrade code -pub fn migrate_vector_data<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result { - use serde::Deserialize; - - #[derive(Clone, Debug, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] - pub struct OldVectorData { - pub transform: DAffine2, - pub alpha_blending: AlphaBlending, - - pub style: PathStyle, - - /// A list of all manipulator groups (referenced in `subpaths`) that have colinear handles (where they're locked at 180ยฐ angles from one another). - /// This gets read in `graph_operation_message_handler.rs` by calling `inputs.as_mut_slice()` (search for the string `"Shape does not have both `subpath` and `colinear_manipulators` inputs"` to find it). - pub colinear_manipulators: Vec<[HandleId; 2]>, - - pub point_domain: PointDomain, - pub segment_domain: SegmentDomain, - pub region_domain: RegionDomain, - - // Used to store the upstream graphic group during destructive Boolean Operations (and other nodes with a similar effect) so that click targets can be preserved. - pub upstream_graphic_group: Option, - } - - #[derive(serde::Serialize, serde::Deserialize)] - #[serde(untagged)] - #[allow(clippy::large_enum_variant)] - enum EitherFormat { - VectorData(VectorData), - OldVectorData(OldVectorData), - VectorDataTable(VectorDataTable), - } - - Ok(match EitherFormat::deserialize(deserializer)? { - EitherFormat::VectorData(vector_data) => VectorDataTable::new(vector_data), - EitherFormat::OldVectorData(old) => { - let mut vector_data_table = VectorDataTable::new(VectorData { - style: old.style, - colinear_manipulators: old.colinear_manipulators, - point_domain: old.point_domain, - segment_domain: old.segment_domain, - region_domain: old.region_domain, - upstream_graphic_group: old.upstream_graphic_group, - }); - *vector_data_table.instance_mut_iter().next().unwrap().transform = old.transform; - *vector_data_table.instance_mut_iter().next().unwrap().alpha_blending = old.alpha_blending; - vector_data_table - } - EitherFormat::VectorDataTable(vector_data_table) => vector_data_table, - }) -} - -pub type VectorDataTable = Instances; - -/// [VectorData] is passed between nodes. -/// It contains a list of subpaths (that may be open or closed), a transform, and some style information. -/// -/// Segments are connected if they share endpoints. +/// Represents vector graphics data, composed of Bรฉzier curves in a path or mesh arrangement. #[derive(Clone, Debug, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] -pub struct VectorData { +pub struct Vector { pub style: PathStyle, /// A list of all manipulator groups (referenced in `subpaths`) that have colinear handles (where they're locked at 180ยฐ angles from one another). @@ -90,11 +29,13 @@ pub struct VectorData { pub segment_domain: SegmentDomain, pub region_domain: RegionDomain, - // Used to store the upstream graphic group during destructive Boolean Operations (and other nodes with a similar effect) so that click targets can be preserved. - pub upstream_graphic_group: Option, + /// Used to store the upstream group/folder of nested layers during destructive Boolean Operations (and other nodes with a similar effect) so that click targets can be preserved for the child layers. + /// Without this, the tools would be working with a collapsed version of the data which has no reference to the original child layers that were booleaned together, resulting in the inner layers not being editable. + #[serde(alias = "upstream_group")] + pub upstream_nested_layers: Option>, } -impl Default for VectorData { +impl Default for Vector { fn default() -> Self { Self { style: PathStyle::new(Some(Stroke::new(Some(Color::BLACK), 0.)), super::style::Fill::None), @@ -102,12 +43,12 @@ impl Default for VectorData { point_domain: PointDomain::new(), segment_domain: SegmentDomain::new(), region_domain: RegionDomain::new(), - upstream_graphic_group: None, + upstream_nested_layers: None, } } } -impl std::hash::Hash for VectorData { +impl std::hash::Hash for Vector { fn hash(&self, state: &mut H) { self.point_domain.hash(state); self.segment_domain.hash(state); @@ -117,17 +58,17 @@ impl std::hash::Hash for VectorData { } } -impl VectorData { - /// Push a subpath to the vector data - pub fn append_subpath(&mut self, subpath: impl Borrow>, preserve_id: bool) { - let subpath: &bezier_rs::Subpath = subpath.borrow(); +impl Vector { + /// Add a subpath to this vector path. + pub fn append_subpath(&mut self, subpath: impl Borrow>, preserve_id: bool) { + let subpath: &Subpath = subpath.borrow(); let stroke_id = StrokeId::ZERO; let mut point_id = self.point_domain.next_id(); let handles = |a: &ManipulatorGroup<_>, b: &ManipulatorGroup<_>| match (a.out_handle, b.in_handle) { - (None, None) => bezier_rs::BezierHandles::Linear, - (Some(handle), None) | (None, Some(handle)) => bezier_rs::BezierHandles::Quadratic { handle }, - (Some(handle_start), Some(handle_end)) => bezier_rs::BezierHandles::Cubic { handle_start, handle_end }, + (None, None) => BezierHandles::Linear, + (Some(handle), None) | (None, Some(handle)) => BezierHandles::Quadratic { handle }, + (Some(handle_start), Some(handle_end)) => BezierHandles::Cubic { handle_start, handle_end }, }; let [mut first_seg, mut last_seg] = [None, None]; let mut segment_id = self.segment_domain.next_id(); @@ -190,33 +131,40 @@ impl VectorData { self.point_domain.push(id, point.position); } - /// Construct some new vector data from a single subpath with an identity transform and black fill. - pub fn from_subpath(subpath: impl Borrow>) -> Self { + /// Construct some new vector path from a single subpath with an identity transform and black fill. + pub fn from_subpath(subpath: impl Borrow>) -> Self { Self::from_subpaths([subpath], false) } - /// Construct some new vector data from subpaths with an identity transform and black fill. - pub fn from_subpaths(subpaths: impl IntoIterator>>, preserve_id: bool) -> Self { - let mut vector_data = Self::default(); + /// Construct some new vector path from a single [`BezPath`] with an identity transform and black fill. + pub fn from_bezpath(bezpath: BezPath) -> Self { + let mut vector = Self::default(); + vector.append_bezpath(bezpath); + vector + } + + /// Construct some new vector path from subpaths with an identity transform and black fill. + pub fn from_subpaths(subpaths: impl IntoIterator>>, preserve_id: bool) -> Self { + let mut vector = Self::default(); for subpath in subpaths.into_iter() { - vector_data.append_subpath(subpath, preserve_id); + vector.append_subpath(subpath, preserve_id); } - vector_data + vector } pub fn from_target_types(target_types: impl IntoIterator>, preserve_id: bool) -> Self { - let mut vector_data = Self::default(); + let mut vector = Self::default(); for target_type in target_types.into_iter() { match target_type.borrow() { - ClickTargetType::Subpath(subpath) => vector_data.append_subpath(subpath, preserve_id), - ClickTargetType::FreePoint(point) => vector_data.append_free_point(point, preserve_id), + ClickTargetType::Subpath(subpath) => vector.append_subpath(subpath, preserve_id), + ClickTargetType::FreePoint(point) => vector.append_free_point(point, preserve_id), } } - vector_data + vector } /// Compute the bounding boxes of the bezpaths without any transform @@ -237,7 +185,7 @@ impl VectorData { for (start, end) in segments_to_add { let segment_id = self.segment_domain.next_id().next_id(); - self.segment_domain.push(segment_id, start, end, bezier_rs::BezierHandles::Linear, StrokeId::ZERO); + self.segment_domain.push(segment_id, start, end, BezierHandles::Linear, StrokeId::ZERO); } } @@ -296,14 +244,19 @@ impl VectorData { self.segment_domain.end_point().iter().map(|&index| self.point_domain.ids()[index]) } - pub fn push(&mut self, id: SegmentId, start: PointId, end: PointId, handles: bezier_rs::BezierHandles, stroke: StrokeId) { + pub fn push(&mut self, id: SegmentId, start: PointId, end: PointId, handles: (Option, Option), stroke: StrokeId) { let [Some(start), Some(end)] = [start, end].map(|id| self.point_domain.resolve_id(id)) else { return; }; + let handles = match handles { + (None, None) => BezierHandles::Linear, + (None, Some(handle)) | (Some(handle), None) => BezierHandles::Quadratic { handle }, + (Some(handle_start), Some(handle_end)) => BezierHandles::Cubic { handle_start, handle_end }, + }; self.segment_domain.push(id, start, end, handles, stroke) } - pub fn handles_mut(&mut self) -> impl Iterator { + pub fn handles_mut(&mut self) -> impl Iterator { self.segment_domain .handles_mut() .map(|(id, handles, start, end)| (id, handles, self.point_domain.ids()[start], self.point_domain.ids()[end])) @@ -369,12 +322,12 @@ impl VectorData { self.point_domain.resolve_id(point).map_or(0, |point| self.segment_domain.connected_count(point)) } - pub fn check_point_inside_shape(&self, vector_data_transform: DAffine2, point: DVec2) -> bool { + pub fn check_point_inside_shape(&self, transform: DAffine2, point: DVec2) -> bool { let number = self .stroke_bezpath_iter() .map(|mut bezpath| { // TODO: apply transform to points instead of modifying the paths - bezpath.apply_affine(Affine::new(vector_data_transform.to_cols_array())); + bezpath.apply_affine(Affine::new(transform.to_cols_array())); bezpath.close_path(); let bbox = bezpath.bounding_box(); (bezpath, bbox) @@ -488,241 +441,142 @@ impl VectorData { } } -impl BoundingBox for VectorDataTable { - fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> Option<[DVec2; 2]> { - self.instance_ref_iter() - .flat_map(|instance| { +impl BoundingBox for Table { + fn bounding_box(&self, transform: DAffine2, include_stroke: bool) -> RenderBoundingBox { + let bounds = self + .iter() + .flat_map(|row| { if !include_stroke { - return instance.instance.bounding_box_with_transform(transform * *instance.transform); + return row.element.bounding_box_with_transform(transform * *row.transform); } - let stroke_width = instance.instance.style.stroke().map(|s| s.weight()).unwrap_or_default(); + let stroke_width = row.element.style.stroke().map(|s| s.weight()).unwrap_or_default(); - let miter_limit = instance.instance.style.stroke().map(|s| s.join_miter_limit).unwrap_or(1.); + let miter_limit = row.element.style.stroke().map(|s| s.join_miter_limit).unwrap_or(1.); let scale = transform.decompose_scale(); // We use the full line width here to account for different styles of stroke caps let offset = DVec2::splat(stroke_width * scale.x.max(scale.y) * miter_limit); - instance.instance.bounding_box_with_transform(transform * *instance.transform).map(|[a, b]| [a - offset, b + offset]) + row.element.bounding_box_with_transform(transform * *row.transform).map(|[a, b]| [a - offset, b + offset]) }) - .reduce(Quad::combine_bounds) - } -} + .reduce(Quad::combine_bounds); -/// A selectable part of a curve, either an anchor (start or end of a bรฉzier) or a handle (doesn't necessarily go through the bรฉzier but influences curvature). -#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, DynAny, serde::Serialize, serde::Deserialize)] -pub enum ManipulatorPointId { - /// A control anchor - the start or end point of a bรฉzier. - Anchor(PointId), - /// The handle for a bรฉzier - the first handle on a cubic and the only handle on a quadratic. - PrimaryHandle(SegmentId), - /// The end handle on a cubic bรฉzier. - EndHandle(SegmentId), -} - -impl ManipulatorPointId { - /// Attempt to retrieve the manipulator position in layer space (no transformation applied). - #[must_use] - #[track_caller] - pub fn get_position(&self, vector_data: &VectorData) -> Option { - match self { - ManipulatorPointId::Anchor(id) => vector_data.point_domain.position_from_id(*id), - ManipulatorPointId::PrimaryHandle(id) => vector_data.segment_from_id(*id).and_then(|bezier| bezier.handle_start()), - ManipulatorPointId::EndHandle(id) => vector_data.segment_from_id(*id).and_then(|bezier| bezier.handle_end()), - } - } - - pub fn get_anchor_position(&self, vector_data: &VectorData) -> Option { - match self { - ManipulatorPointId::EndHandle(_) | ManipulatorPointId::PrimaryHandle(_) => self.get_anchor(vector_data).and_then(|id| vector_data.point_domain.position_from_id(id)), - _ => self.get_position(vector_data), - } - } - - /// Attempt to get a pair of handles. For an anchor this is the first two handles connected. For a handle it is self and the first opposing handle. - #[must_use] - pub fn get_handle_pair(self, vector_data: &VectorData) -> Option<[HandleId; 2]> { - match self { - ManipulatorPointId::Anchor(point) => vector_data.all_connected(point).take(2).collect::>().try_into().ok(), - ManipulatorPointId::PrimaryHandle(segment) => { - let point = vector_data.segment_domain.segment_start_from_id(segment)?; - let current = HandleId::primary(segment); - let other = vector_data.segment_domain.all_connected(point).find(|&value| value != current); - other.map(|other| [current, other]) - } - ManipulatorPointId::EndHandle(segment) => { - let point = vector_data.segment_domain.segment_end_from_id(segment)?; - let current = HandleId::end(segment); - let other = vector_data.segment_domain.all_connected(point).find(|&value| value != current); - other.map(|other| [current, other]) - } - } - } - - /// Attempt to find the closest anchor. If self is already an anchor then it is just self. If it is a start or end handle, then the start or end point is chosen. - #[must_use] - pub fn get_anchor(self, vector_data: &VectorData) -> Option { - match self { - ManipulatorPointId::Anchor(point) => Some(point), - ManipulatorPointId::PrimaryHandle(segment) => vector_data.segment_start_from_id(segment), - ManipulatorPointId::EndHandle(segment) => vector_data.segment_end_from_id(segment), - } - } - - /// Attempt to convert self to a [`HandleId`], returning none for an anchor. - #[must_use] - pub fn as_handle(self) -> Option { - match self { - ManipulatorPointId::PrimaryHandle(segment) => Some(HandleId::primary(segment)), - ManipulatorPointId::EndHandle(segment) => Some(HandleId::end(segment)), - ManipulatorPointId::Anchor(_) => None, - } - } - - /// Attempt to convert self to an anchor, returning None for a handle. - #[must_use] - pub fn as_anchor(self) -> Option { - match self { - ManipulatorPointId::Anchor(point) => Some(point), - _ => None, - } - } - - pub fn get_segment(self) -> Option { - match self { - ManipulatorPointId::PrimaryHandle(segment) | ManipulatorPointId::EndHandle(segment) => Some(segment), - _ => None, + match bounds { + Some(bounds) => RenderBoundingBox::Rectangle(bounds), + None => RenderBoundingBox::None, } } } -/// The type of handle found on a bรฉzier curve. -#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DynAny, serde::Serialize, serde::Deserialize)] -pub enum HandleType { - /// The first handle on a cubic bรฉzier or the only handle on a quadratic bรฉzier. - Primary, - /// The second handle on a cubic bรฉzier. - End, -} +// TODO: Eventually remove this migration document upgrade code +pub fn migrate_vector<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + use serde::Deserialize; -/// Represents a primary or end handle found in a particular segment. -#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DynAny, serde::Serialize, serde::Deserialize)] -pub struct HandleId { - pub ty: HandleType, - pub segment: SegmentId, -} + #[derive(Clone, Debug, PartialEq, DynAny, serde::Serialize, serde::Deserialize)] + pub struct OldVectorData { + pub transform: DAffine2, + pub alpha_blending: AlphaBlending, -impl std::fmt::Display for HandleId { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self.ty { - // I haven't checked if "out" and "in" are reversed, or are accurate translations of the "primary" and "end" terms used in the `HandleType` enum, so this naming is an assumption. - HandleType::Primary => write!(f, "{} out", self.segment.inner()), - HandleType::End => write!(f, "{} in", self.segment.inner()), + pub style: PathStyle, + + pub colinear_manipulators: Vec<[HandleId; 2]>, + + pub point_domain: PointDomain, + pub segment_domain: SegmentDomain, + pub region_domain: RegionDomain, + + pub upstream_graphic_group: Option>, + } + + #[derive(serde::Serialize, serde::Deserialize)] + #[serde(untagged)] + #[allow(clippy::large_enum_variant)] + enum EitherFormat { + Vector(Vector), + OldVectorData(OldVectorData), + VectorTable(Table), + } + + Ok(match EitherFormat::deserialize(deserializer)? { + EitherFormat::Vector(vector) => Table::new_from_element(vector), + EitherFormat::OldVectorData(old) => { + let mut vector_table = Table::new_from_element(Vector { + style: old.style, + colinear_manipulators: old.colinear_manipulators, + point_domain: old.point_domain, + segment_domain: old.segment_domain, + region_domain: old.region_domain, + upstream_nested_layers: old.upstream_graphic_group, + }); + *vector_table.iter_mut().next().unwrap().transform = old.transform; + *vector_table.iter_mut().next().unwrap().alpha_blending = old.alpha_blending; + vector_table } - } -} - -impl HandleId { - /// Construct a handle for the first handle on a cubic bรฉzier or the only handle on a quadratic bรฉzier. - #[must_use] - pub const fn primary(segment: SegmentId) -> Self { - Self { ty: HandleType::Primary, segment } - } - - /// Construct a handle for the end handle on a cubic bรฉzier. - #[must_use] - pub const fn end(segment: SegmentId) -> Self { - Self { ty: HandleType::End, segment } - } - - /// Convert to [`ManipulatorPointId`]. - #[must_use] - pub fn to_manipulator_point(self) -> ManipulatorPointId { - match self.ty { - HandleType::Primary => ManipulatorPointId::PrimaryHandle(self.segment), - HandleType::End => ManipulatorPointId::EndHandle(self.segment), - } - } - - /// Calculate the magnitude of the handle from the anchor. - pub fn length(self, vector_data: &VectorData) -> f64 { - let Some(anchor_position) = self.to_manipulator_point().get_anchor_position(vector_data) else { - // TODO: This was previously an unwrap which was encountered, so this is a temporary way to avoid a crash - return 0.; - }; - let handle_position = self.to_manipulator_point().get_position(vector_data); - handle_position.map(|pos| (pos - anchor_position).length()).unwrap_or(f64::MAX) - } - - /// Convert an end handle to the primary handle and a primary handle to an end handle. Note that the new handle may not exist (e.g. for a quadratic bรฉzier). - #[must_use] - pub fn opposite(self) -> Self { - match self.ty { - HandleType::Primary => Self::end(self.segment), - HandleType::End => Self::primary(self.segment), - } - } -} - -#[cfg(test)] -fn assert_subpath_eq(generated: &[bezier_rs::Subpath], expected: &[bezier_rs::Subpath]) { - assert_eq!(generated.len(), expected.len()); - for (generated, expected) in generated.iter().zip(expected) { - assert_eq!(generated.manipulator_groups().len(), expected.manipulator_groups().len()); - assert_eq!(generated.closed(), expected.closed()); - for (generated, expected) in generated.manipulator_groups().iter().zip(expected.manipulator_groups()) { - assert_eq!(generated.in_handle, expected.in_handle); - assert_eq!(generated.out_handle, expected.out_handle); - assert_eq!(generated.anchor, expected.anchor); - } - } + EitherFormat::VectorTable(vector_table) => vector_table, + }) } #[cfg(test)] mod tests { + use kurbo::{CubicBez, PathSeg, Point}; + use super::*; + + fn assert_subpath_eq(generated: &[Subpath], expected: &[Subpath]) { + assert_eq!(generated.len(), expected.len()); + for (generated, expected) in generated.iter().zip(expected) { + assert_eq!(generated.manipulator_groups().len(), expected.manipulator_groups().len()); + assert_eq!(generated.closed(), expected.closed()); + for (generated, expected) in generated.manipulator_groups().iter().zip(expected.manipulator_groups()) { + assert_eq!(generated.in_handle, expected.in_handle); + assert_eq!(generated.out_handle, expected.out_handle); + assert_eq!(generated.anchor, expected.anchor); + } + } + } + #[test] fn construct_closed_subpath() { - let circle = bezier_rs::Subpath::new_ellipse(DVec2::NEG_ONE, DVec2::ONE); - let vector_data = VectorData::from_subpath(&circle); - assert_eq!(vector_data.point_domain.ids().len(), 4); - let bezier_paths = vector_data.segment_bezier_iter().map(|(_, bezier, _, _)| bezier).collect::>(); + let circle = Subpath::new_ellipse(DVec2::NEG_ONE, DVec2::ONE); + let vector = Vector::from_subpath(&circle); + assert_eq!(vector.point_domain.ids().len(), 4); + let bezier_paths = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); assert_eq!(bezier_paths.len(), 4); assert!(bezier_paths.iter().all(|&bezier| circle.iter().any(|original_bezier| original_bezier == bezier))); - let generated = vector_data.stroke_bezier_paths().collect::>(); + let generated = vector.stroke_bezier_paths().collect::>(); assert_subpath_eq(&generated, &[circle]); } #[test] fn construct_open_subpath() { - let bezier = bezier_rs::Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::NEG_ONE, DVec2::ONE, DVec2::X); - let subpath = bezier_rs::Subpath::from_bezier(&bezier); - let vector_data = VectorData::from_subpath(&subpath); - assert_eq!(vector_data.point_domain.ids().len(), 2); - let bezier_paths = vector_data.segment_bezier_iter().map(|(_, bezier, _, _)| bezier).collect::>(); + let bezier = PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(-1., -1.), Point::new(1., 1.), Point::new(1., 0.))); + let subpath = Subpath::from_bezier(bezier); + let vector = Vector::from_subpath(&subpath); + assert_eq!(vector.point_domain.ids().len(), 2); + let bezier_paths = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); assert_eq!(bezier_paths, vec![bezier]); - let generated = vector_data.stroke_bezier_paths().collect::>(); + let generated = vector.stroke_bezier_paths().collect::>(); assert_subpath_eq(&generated, &[subpath]); } #[test] fn construct_many_subpath() { - let curve = bezier_rs::Bezier::from_cubic_dvec2(DVec2::ZERO, DVec2::NEG_ONE, DVec2::ONE, DVec2::X); - let curve = bezier_rs::Subpath::from_bezier(&curve); - let circle = bezier_rs::Subpath::new_ellipse(DVec2::NEG_ONE, DVec2::ONE); + let curve = PathSeg::Cubic(CubicBez::new(Point::ZERO, Point::new(-1., -1.), Point::new(1., 1.), Point::new(1., 0.))); + let curve = Subpath::from_bezier(curve); + let circle = Subpath::new_ellipse(DVec2::NEG_ONE, DVec2::ONE); - let vector_data = VectorData::from_subpaths([&curve, &circle], false); - assert_eq!(vector_data.point_domain.ids().len(), 6); + let vector = Vector::from_subpaths([&curve, &circle], false); + assert_eq!(vector.point_domain.ids().len(), 6); - let bezier_paths = vector_data.segment_bezier_iter().map(|(_, bezier, _, _)| bezier).collect::>(); + let bezier_paths = vector.segment_iter().map(|(_, bezier, _, _)| bezier).collect::>(); assert_eq!(bezier_paths.len(), 5); assert!(bezier_paths.iter().all(|&bezier| circle.iter().chain(curve.iter()).any(|original_bezier| original_bezier == bezier))); - let generated = vector_data.stroke_bezier_paths().collect::>(); + let generated = vector.stroke_bezier_paths().collect::>(); assert_subpath_eq(&generated, &[curve, circle]); } } diff --git a/node-graph/gmath-nodes/src/lib.rs b/node-graph/gmath-nodes/src/lib.rs index f79bc88684..caf2e19c5b 100644 --- a/node-graph/gmath-nodes/src/lib.rs +++ b/node-graph/gmath-nodes/src/lib.rs @@ -1,6 +1,7 @@ use glam::{DAffine2, DVec2}; use graphene_core::gradient::GradientStops; use graphene_core::registry::types::{Fraction, Percentage, PixelSize, TextArea}; +use graphene_core::table::Table; use graphene_core::transform::Footprint; use graphene_core::{Color, Ctx, num_traits}; use log::warn; @@ -286,7 +287,7 @@ fn cosine_inverse( /// The inverse tangent trigonometric function (atan or atan2, depending on input type) calculates: /// atan: the angle whose tangent is the specified scalar number. -/// atan2: the angle of a ray from the origin to the specified coordinate. +/// atan2: the angle of a ray from the origin to the specified vec2. /// /// The resulting angle is always in the range [0ยฐ, 180ยฐ] or, in radians, [-ฯ€/2, ฯ€/2]. #[node_macro::node(category("Math: Trig"))] @@ -348,21 +349,21 @@ fn random( } /// Convert a number to an integer of the type u32, which may be the required type for certain node inputs. This will be removed in the future when automatic type conversion is implemented. -#[node_macro::node(name("To u32"), category("Math: Numeric"))] +#[node_macro::node(name("To u32"), category("Type Conversion"))] fn to_u32(_: impl Ctx, #[implementations(f64, f32)] value: U) -> u32 { let value = U::clamp(value, U::from(0.).unwrap(), U::from(u32::MAX as f64).unwrap()); value.to_u32().unwrap() } /// Convert a number to an integer of the type u64, which may be the required type for certain node inputs. This will be removed in the future when automatic type conversion is implemented. -#[node_macro::node(name("To u64"), category("Math: Numeric"))] +#[node_macro::node(name("To u64"), category("Type Conversion"))] fn to_u64(_: impl Ctx, #[implementations(f64, f32)] value: U) -> u64 { let value = U::clamp(value, U::from(0.).unwrap(), U::from(u64::MAX as f64).unwrap()); value.to_u64().unwrap() } /// Convert an integer to a decimal number of the type f64, which may be the required type for certain node inputs. This will be removed in the future when automatic type conversion is implemented. -#[node_macro::node(name("To f64"), category("Math: Numeric"))] +#[node_macro::node(name("To f64"), category("Type Conversion"))] fn to_f64(_: impl Ctx, #[implementations(u32, u64)] value: U) -> f64 { value.to_f64().unwrap() } @@ -651,31 +652,38 @@ fn percentage_value(_: impl Ctx, _primary: (), percentage: Percentage) -> f64 { percentage } -/// Constructs a two-dimensional vector value which may be set to any XY coordinate. -#[node_macro::node(category("Value"))] -fn coordinate_value(_: impl Ctx, _primary: (), x: f64, y: f64) -> DVec2 { +/// Constructs a two-dimensional vector value which may be set to any XY pair. +#[node_macro::node(category("Value"), name("Vec2 Value"))] +fn vec2_value(_: impl Ctx, _primary: (), x: f64, y: f64) -> DVec2 { DVec2::new(x, y) } /// Constructs a color value which may be set to any color, or no color. #[node_macro::node(category("Value"))] -fn color_value(_: impl Ctx, _primary: (), #[default(Color::BLACK)] color: Option) -> Option { +fn color_value(_: impl Ctx, _primary: (), #[default(Color::RED)] color: Table) -> Table { color } -/// Gets the color at the specified position along the gradient, given a position from 0 (left) to 1 (right). -#[node_macro::node(category("Color"))] -fn sample_gradient(_: impl Ctx, _primary: (), gradient: GradientStops, position: Fraction) -> Color { - let position = position.clamp(0., 1.); - gradient.evaluate(position) -} - /// Constructs a gradient value which may be set to any sequence of color stops to represent the transition between colors. #[node_macro::node(category("Value"))] fn gradient_value(_: impl Ctx, _primary: (), gradient: GradientStops) -> GradientStops { gradient } +/// Constructs a gradient value which may be set to any sequence of color stops to represent the transition between colors. +#[node_macro::node(category("Value"))] +fn gradient_table_value(_: impl Ctx, _primary: (), gradient: GradientStops) -> Table { + Table::new_from_element(gradient) +} + +/// Gets the color at the specified position along the gradient, given a position from 0 (left) to 1 (right). +#[node_macro::node(category("Color"))] +fn sample_gradient(_: impl Ctx, _primary: (), gradient: GradientStops, position: Fraction) -> Table { + let position = position.clamp(0., 1.); + let color = gradient.evaluate(position); + Table::new_from_element(color) +} + /// Constructs a string value which may be set to any plain text. #[node_macro::node(category("Value"))] fn string_value(_: impl Ctx, _primary: (), string: TextArea) -> String { diff --git a/node-graph/gpath-bool/Cargo.toml b/node-graph/gpath-bool/Cargo.toml index db472571a4..9882a75c6e 100644 --- a/node-graph/gpath-bool/Cargo.toml +++ b/node-graph/gpath-bool/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT OR Apache-2.0" [dependencies] # Local dependencies dyn-any = { workspace = true } -bezier-rs = { workspace = true } graphene-core = { workspace = true } node-macro = { workspace = true } glam = { workspace = true } diff --git a/node-graph/gpath-bool/src/lib.rs b/node-graph/gpath-bool/src/lib.rs index 51a823bf65..b20b93d1ba 100644 --- a/node-graph/gpath-bool/src/lib.rs +++ b/node-graph/gpath-bool/src/lib.rs @@ -1,11 +1,11 @@ -use bezier_rs::{ManipulatorGroup, Subpath}; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; -use graphene_core::instances::{Instance, InstanceRef}; +use graphene_core::subpath::{ManipulatorGroup, PathSegPoints, Subpath, pathseg_points}; +use graphene_core::table::{Table, TableRow, TableRowRef}; use graphene_core::vector::algorithms::merge_by_distance::MergeByDistanceExt; use graphene_core::vector::style::Fill; -use graphene_core::vector::{PointId, VectorData, VectorDataTable}; -use graphene_core::{Color, Ctx, GraphicElement, GraphicGroupTable}; +use graphene_core::vector::{PointId, Vector}; +use graphene_core::{Color, Ctx, Graphic}; pub use path_bool as path_bool_lib; use path_bool::{FillRule, PathBooleanOperation}; use std::ops::Mul; @@ -32,11 +32,11 @@ pub enum BooleanOperation { /// Combines the geometric forms of one or more closed paths into a new vector path that results from cutting or joining the paths by the chosen method. #[node_macro::node(category(""))] -async fn boolean_operation + 'n + Send + Clone>( +async fn boolean_operation> + 'n + Send + Clone>( _: impl Ctx, - /// The group of paths to perform the boolean operation on. Nested groups are automatically flattened. - #[implementations(GraphicGroupTable, VectorDataTable)] - group_of_paths: I, + /// The table of vector paths to perform the boolean operation on. Nested tables are automatically flattened. + #[implementations(Table, Table)] + content: I, /// Which boolean operation to perform on the paths. /// /// Union combines all paths while cutting out overlapping areas (even the interiors of a single path). @@ -44,55 +44,55 @@ async fn boolean_operation + 'n + Send + Clone>( /// Intersection cuts away all but the overlapping areas shared by every path. /// Difference cuts away the overlapping areas shared by every path, leaving only the non-overlapping areas. operation: BooleanOperation, -) -> VectorDataTable { - let group_of_paths = group_of_paths.into(); +) -> Table { + let content = content.into(); // The first index is the bottom of the stack - let mut result_vector_data_table = boolean_operation_on_vector_data_table(flatten_vector_data(&group_of_paths).instance_ref_iter(), operation); + let mut result_vector_table = boolean_operation_on_vector_table(flatten_vector(&content).iter(), operation); // Replace the transformation matrix with a mutation of the vector points themselves - if let Some(result_vector_data) = result_vector_data_table.instance_mut_iter().next() { - let transform = *result_vector_data.transform; - *result_vector_data.transform = DAffine2::IDENTITY; + if let Some(result_vector) = result_vector_table.iter_mut().next() { + let transform = *result_vector.transform; + *result_vector.transform = DAffine2::IDENTITY; - VectorData::transform(result_vector_data.instance, transform); - result_vector_data.instance.style.set_stroke_transform(DAffine2::IDENTITY); - result_vector_data.instance.upstream_graphic_group = Some(group_of_paths.clone()); + Vector::transform(result_vector.element, transform); + result_vector.element.style.set_stroke_transform(DAffine2::IDENTITY); + result_vector.element.upstream_nested_layers = Some(content.clone()); // Clean up the boolean operation result by merging duplicated points - result_vector_data.instance.merge_by_distance_spatial(*result_vector_data.transform, 0.0001); + result_vector.element.merge_by_distance_spatial(*result_vector.transform, 0.0001); } - result_vector_data_table + result_vector_table } -fn boolean_operation_on_vector_data_table<'a>(vector_data: impl DoubleEndedIterator> + Clone, boolean_operation: BooleanOperation) -> VectorDataTable { +fn boolean_operation_on_vector_table<'a>(vector: impl DoubleEndedIterator> + Clone, boolean_operation: BooleanOperation) -> Table { match boolean_operation { - BooleanOperation::Union => union(vector_data), - BooleanOperation::SubtractFront => subtract(vector_data), - BooleanOperation::SubtractBack => subtract(vector_data.rev()), - BooleanOperation::Intersect => intersect(vector_data), - BooleanOperation::Difference => difference(vector_data), + BooleanOperation::Union => union(vector), + BooleanOperation::SubtractFront => subtract(vector), + BooleanOperation::SubtractBack => subtract(vector.rev()), + BooleanOperation::Intersect => intersect(vector), + BooleanOperation::Difference => difference(vector), } } -fn union<'a>(vector_data: impl DoubleEndedIterator>) -> VectorDataTable { - // Reverse vector data so that the result style is the style of the first vector data - let mut vector_data_reversed = vector_data.rev(); +fn union<'a>(vector: impl DoubleEndedIterator>) -> Table { + // Reverse the vector table rows so that the result style is the style of the first vector row + let mut vector_reversed = vector.rev(); - let mut result_vector_data_table = VectorDataTable::new_instance(vector_data_reversed.next().map(|x| x.to_instance_cloned()).unwrap_or_default()); - let mut first_instance = result_vector_data_table.instance_mut_iter().next().expect("Expected the one instance we just pushed"); + let mut result_vector_table = Table::new_from_row(vector_reversed.next().map(|x| x.into_cloned()).unwrap_or_default()); + let mut first_row = result_vector_table.iter_mut().next().expect("Expected the one row we just pushed"); - // Loop over all vector data and union it with the result - let default = Instance::default(); - let mut second_vector_data = Some(vector_data_reversed.next().unwrap_or(default.to_instance_ref())); - while let Some(lower_vector_data) = second_vector_data { - let transform_of_lower_into_space_of_upper = first_instance.transform.inverse() * *lower_vector_data.transform; + // Loop over all vector table rows and union it with the result + let default = TableRow::default(); + let mut second_vector = Some(vector_reversed.next().unwrap_or(default.as_ref())); + while let Some(lower_vector) = second_vector { + let transform_of_lower_into_space_of_upper = first_row.transform.inverse() * *lower_vector.transform; - let result = &mut first_instance.instance; + let result = &mut first_row.element; let upper_path_string = to_path(result, DAffine2::IDENTITY); - let lower_path_string = to_path(lower_vector_data.instance, transform_of_lower_into_space_of_upper); + let lower_path_string = to_path(lower_vector.element, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_operation_string = unsafe { boolean_union(upper_path_string, lower_path_string) }; @@ -103,27 +103,32 @@ fn union<'a>(vector_data: impl DoubleEndedIterator(vector_data: impl Iterator>) -> VectorDataTable { - let mut vector_data = vector_data.into_iter(); +fn subtract<'a>(vector: impl Iterator>) -> Table { + let mut vector = vector.into_iter(); - let mut result_vector_data_table = VectorDataTable::new_instance(vector_data.next().map(|x| x.to_instance_cloned()).unwrap_or_default()); - let mut first_instance = result_vector_data_table.instance_mut_iter().next().expect("Expected the one instance we just pushed"); + let mut result_vector_table = Table::new_from_row(vector.next().map(|x| x.into_cloned()).unwrap_or_default()); + let mut first_row = result_vector_table.iter_mut().next().expect("Expected the one row we just pushed"); + let first_row_transform = if first_row.transform.matrix2.determinant() != 0. { + first_row.transform.inverse() + } else { + DAffine2::IDENTITY + }; - let mut next_vector_data = vector_data.next(); + let mut next_vector = vector.next(); - while let Some(lower_vector_data) = next_vector_data { - let transform_of_lower_into_space_of_upper = first_instance.transform.inverse() * *lower_vector_data.transform; + while let Some(lower_vector) = next_vector { + let transform_of_lower_into_space_of_upper = first_row_transform * *lower_vector.transform; - let result = &mut first_instance.instance; + let result = &mut first_row.element; let upper_path_string = to_path(result, DAffine2::IDENTITY); - let lower_path_string = to_path(lower_vector_data.instance, transform_of_lower_into_space_of_upper); + let lower_path_string = to_path(lower_vector.element, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_operation_string = unsafe { boolean_subtract(upper_path_string, lower_path_string) }; @@ -134,29 +139,29 @@ fn subtract<'a>(vector_data: impl Iterator>) result.segment_domain = boolean_operation_result.segment_domain; result.region_domain = boolean_operation_result.region_domain; - next_vector_data = vector_data.next(); + next_vector = vector.next(); } - result_vector_data_table + result_vector_table } -fn intersect<'a>(vector_data: impl DoubleEndedIterator>) -> VectorDataTable { - let mut vector_data = vector_data.rev(); +fn intersect<'a>(vector: impl DoubleEndedIterator>) -> Table { + let mut vector = vector.rev(); - let mut result_vector_data_table = VectorDataTable::new_instance(vector_data.next().map(|x| x.to_instance_cloned()).unwrap_or_default()); - let mut first_instance = result_vector_data_table.instance_mut_iter().next().expect("Expected the one instance we just pushed"); + let mut result_vector_table = Table::new_from_row(vector.next().map(|x| x.into_cloned()).unwrap_or_default()); + let mut first_row = result_vector_table.iter_mut().next().expect("Expected the one row we just pushed"); - let default = Instance::default(); - let mut second_vector_data = Some(vector_data.next().unwrap_or(default.to_instance_ref())); + let default = TableRow::default(); + let mut second_vector = Some(vector.next().unwrap_or(default.as_ref())); - // For each vector data, set the result to the intersection of that data and the result - while let Some(lower_vector_data) = second_vector_data { - let transform_of_lower_into_space_of_upper = first_instance.transform.inverse() * *lower_vector_data.transform; + // For each vector table row, set the result to the intersection of that path and the current result + while let Some(lower_vector) = second_vector { + let transform_of_lower_into_space_of_upper = first_row.transform.inverse() * *lower_vector.transform; - let result = &mut first_instance.instance; + let result = &mut first_row.element; let upper_path_string = to_path(result, DAffine2::IDENTITY); - let lower_path_string = to_path(lower_vector_data.instance, transform_of_lower_into_space_of_upper); + let lower_path_string = to_path(lower_vector.element, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_operation_string = unsafe { boolean_intersect(upper_path_string, lower_path_string) }; @@ -166,127 +171,162 @@ fn intersect<'a>(vector_data: impl DoubleEndedIterator(vector_data: impl DoubleEndedIterator> + Clone) -> VectorDataTable { - let mut vector_data_iter = vector_data.clone().rev(); - let mut any_intersection = Instance::default(); - let default = Instance::default(); - let mut second_vector_data = Some(vector_data_iter.next().unwrap_or(default.to_instance_ref())); +fn difference<'a>(vector: impl DoubleEndedIterator> + Clone) -> Table { + let mut vector_iter = vector.clone().rev(); + let mut any_intersection = TableRow::default(); + let default = TableRow::default(); + let mut second_vector = Some(vector_iter.next().unwrap_or(default.as_ref())); - // Find where all vector data intersect at least once - while let Some(lower_vector_data) = second_vector_data { - let filtered_vector_data = vector_data.clone().filter(|v| *v != lower_vector_data).collect::>().into_iter(); - let unioned = boolean_operation_on_vector_data_table(filtered_vector_data, BooleanOperation::Union); - let first_instance = unioned.instance_ref_iter().next().expect("Expected at least one instance after the boolean union"); + // Find where all vector table row paths intersect at least once + while let Some(lower_vector) = second_vector { + let filtered_vector = vector.clone().filter(|v| *v != lower_vector).collect::>().into_iter(); + let unioned = boolean_operation_on_vector_table(filtered_vector, BooleanOperation::Union); + let first_row = unioned.iter().next().expect("Expected at least one row after the boolean union"); - let transform_of_lower_into_space_of_upper = first_instance.transform.inverse() * *lower_vector_data.transform; + let transform_of_lower_into_space_of_upper = first_row.transform.inverse() * *lower_vector.transform; - let upper_path_string = to_path(first_instance.instance, DAffine2::IDENTITY); - let lower_path_string = to_path(lower_vector_data.instance, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(first_row.element, DAffine2::IDENTITY); + let lower_path_string = to_path(lower_vector.element, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_intersection_string = unsafe { boolean_intersect(upper_path_string, lower_path_string) }; - let mut instance = from_path(&boolean_intersection_string); - instance.style = first_instance.instance.style.clone(); - let boolean_intersection_result = Instance { - instance, - mask: None, - transform: *first_instance.transform, - alpha_blending: *first_instance.alpha_blending, - source_node_id: *first_instance.source_node_id, + let mut element = from_path(&boolean_intersection_string); + element.style = first_row.element.style.clone(); + let boolean_intersection_result = TableRow { + element, + mask: first_row.mask.clone(), + transform: *first_row.transform, + alpha_blending: *first_row.alpha_blending, + source_node_id: *first_row.source_node_id, }; let transform_of_lower_into_space_of_upper = boolean_intersection_result.transform.inverse() * any_intersection.transform; - let upper_path_string = to_path(&boolean_intersection_result.instance, DAffine2::IDENTITY); - let lower_path_string = to_path(&any_intersection.instance, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(&boolean_intersection_result.element, DAffine2::IDENTITY); + let lower_path_string = to_path(&any_intersection.element, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let union_result = from_path(&unsafe { boolean_union(upper_path_string, lower_path_string) }); - any_intersection.instance = union_result; + any_intersection.element = union_result; any_intersection.transform = boolean_intersection_result.transform; - any_intersection.instance.style = boolean_intersection_result.instance.style.clone(); + any_intersection.element.style = boolean_intersection_result.element.style.clone(); any_intersection.alpha_blending = boolean_intersection_result.alpha_blending; - second_vector_data = vector_data_iter.next(); + second_vector = vector_iter.next(); } - // Subtract the area where they intersect at least once from the union of all vector data - let union = boolean_operation_on_vector_data_table(vector_data, BooleanOperation::Union); - boolean_operation_on_vector_data_table(union.instance_ref_iter().chain(std::iter::once(any_intersection.to_instance_ref())), BooleanOperation::SubtractFront) + // Subtract the area where they intersect at least once from the union of all vector paths + let union = boolean_operation_on_vector_table(vector, BooleanOperation::Union); + boolean_operation_on_vector_table(union.iter().chain(std::iter::once(any_intersection.as_ref())), BooleanOperation::SubtractFront) } -fn flatten_vector_data(graphic_group_table: &GraphicGroupTable) -> VectorDataTable { - graphic_group_table - .instance_ref_iter() +fn flatten_vector(graphic_table: &Table) -> Table { + graphic_table + .iter() .flat_map(|element| { - match element.instance.clone() { - GraphicElement::VectorData(vector_data) => { - // Apply the parent group's transform to each element of vector data - vector_data - .instance_iter() - .map(|mut sub_vector_data| { - sub_vector_data.transform = *element.transform * sub_vector_data.transform; + match element.element.clone() { + Graphic::Vector(vector) => { + // Apply the parent graphic's transform to each element of the vector table + vector + .into_iter() + .map(|mut sub_vector| { + sub_vector.transform = *element.transform * sub_vector.transform; - sub_vector_data + sub_vector }) .collect::>() } - GraphicElement::RasterDataCPU(image) => { - let make_instance = |transform| { + Graphic::RasterCPU(image) => { + let make_row = |transform| { // Convert the image frame into a rectangular subpath with the image's transform let mut subpath = Subpath::new_rect(DVec2::ZERO, DVec2::ONE); subpath.apply_transform(transform); - // Create a vector data table row from the rectangular subpath, with a default black fill - let mut instance = VectorData::from_subpath(subpath); - instance.style.set_fill(Fill::Solid(Color::BLACK)); + // Create a vector table row from the rectangular subpath, with a default black fill + let mut element = Vector::from_subpath(subpath); + element.style.set_fill(Fill::Solid(Color::BLACK)); - Instance { instance, ..Default::default() } + TableRow { element, ..Default::default() } }; - // Apply the parent group's transform to each element of raster data - image.instance_ref_iter().map(|instance| make_instance(*element.transform * *instance.transform)).collect::>() + // Apply the parent graphic's transform to each raster element + image.iter().map(|row| make_row(*element.transform * *row.transform)).collect::>() } - GraphicElement::RasterDataGPU(image) => { - let make_instance = |transform| { + Graphic::RasterGPU(image) => { + let make_row = |transform| { // Convert the image frame into a rectangular subpath with the image's transform let mut subpath = Subpath::new_rect(DVec2::ZERO, DVec2::ONE); subpath.apply_transform(transform); - // Create a vector data table row from the rectangular subpath, with a default black fill - let mut instance = VectorData::from_subpath(subpath); - instance.style.set_fill(Fill::Solid(Color::BLACK)); + // Create a vector table row from the rectangular subpath, with a default black fill + let mut element = Vector::from_subpath(subpath); + element.style.set_fill(Fill::Solid(Color::BLACK)); - Instance { instance, ..Default::default() } + TableRow { element, ..Default::default() } }; - // Apply the parent group's transform to each element of raster data - image.instance_ref_iter().map(|instance| make_instance(*element.transform * *instance.transform)).collect::>() + // Apply the parent graphic's transform to each raster element + image.iter().map(|row| make_row(*element.transform * *row.transform)).collect::>() } - GraphicElement::GraphicGroup(mut graphic_group) => { - // Apply the parent group's transform to each element of inner group - for sub_element in graphic_group.instance_mut_iter() { + Graphic::Graphic(mut graphic) => { + // Apply the parent graphic's transform to each element of inner table + for sub_element in graphic.iter_mut() { *sub_element.transform = *element.transform * *sub_element.transform; } - // Recursively flatten the inner group into vector data - let unioned = boolean_operation_on_vector_data_table(flatten_vector_data(&graphic_group).instance_ref_iter(), BooleanOperation::Union); + // Recursively flatten the inner table into the output vector table + let unioned = boolean_operation_on_vector_table(flatten_vector(&graphic).iter(), BooleanOperation::Union); - unioned.instance_iter().collect::>() + unioned.into_iter().collect::>() } + Graphic::Color(color) => color + .into_iter() + .map(|row| { + let mut element = Vector::default(); + element.style.set_fill(Fill::Solid(row.element)); + element.style.set_stroke_transform(DAffine2::IDENTITY); + + TableRow { + element, + mask: row.mask.clone(), + transform: row.transform, + alpha_blending: row.alpha_blending, + source_node_id: row.source_node_id, + } + }) + .collect::>(), + Graphic::Gradient(gradient) => gradient + .into_iter() + .map(|row| { + let mut element = Vector::default(); + element.style.set_fill(Fill::Gradient(graphene_core::gradient::Gradient { + stops: row.element, + ..Default::default() + })); + element.style.set_stroke_transform(DAffine2::IDENTITY); + + TableRow { + element, + mask: row.mask.clone(), + transform: row.transform, + alpha_blending: row.alpha_blending, + source_node_id: row.source_node_id, + } + }) + .collect::>(), } }) .collect() } -fn to_path(vector: &VectorData, transform: DAffine2) -> Vec { +fn to_path(vector: &Vector, transform: DAffine2) -> Vec { let mut path = Vec::new(); for subpath in vector.stroke_bezier_paths() { to_path_segments(&mut path, &subpath, transform); @@ -298,20 +338,29 @@ fn to_path_segments(path: &mut Vec, subpath: &Subpath PathSegment::Line(start, end), - bezier_rs::BezierHandles::Quadratic { handle } => PathSegment::Quadratic(start, handle, end), - bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => PathSegment::Cubic(start, handle_start, handle_end, end), + global_end = p3; + + let segment = match (p1, p2) { + (None, None) => PathSegment::Line(p0, p3), + (None, Some(p2)) | (Some(p2), None) => PathSegment::Quadratic(p0, p2, p3), + (Some(p1), Some(p2)) => PathSegment::Cubic(p0, p1, p2, p3), }; + path.push(segment); } if let Some(start) = global_start { @@ -319,7 +368,7 @@ fn to_path_segments(path: &mut Vec, subpath: &Subpath VectorData { +fn from_path(path_data: &[Path]) -> Vector { const EPSILON: f64 = 1e-5; fn is_close(a: DVec2, b: DVec2) -> bool { @@ -330,7 +379,7 @@ fn from_path(path_data: &[Path]) -> VectorData { for path in path_data.iter().filter(|path| !path.is_empty()) { let cubics: Vec<[DVec2; 4]> = path.iter().map(|segment| segment.to_cubic()).collect(); - let mut groups = Vec::new(); + let mut manipulators_list = Vec::new(); let mut current_start = None; for (index, cubic) in cubics.iter().enumerate() { @@ -338,32 +387,32 @@ fn from_path(path_data: &[Path]) -> VectorData { if current_start.is_none() || !is_close(start, current_start.unwrap()) { // Start a new subpath - if !groups.is_empty() { - all_subpaths.push(Subpath::new(std::mem::take(&mut groups), true)); + if !manipulators_list.is_empty() { + all_subpaths.push(Subpath::new(std::mem::take(&mut manipulators_list), true)); } // Use the correct in-handle (None) and out-handle for the start point - groups.push(ManipulatorGroup::new(start, None, Some(handle1))); + manipulators_list.push(ManipulatorGroup::new(start, None, Some(handle1))); } else { // Update the out-handle of the previous point - if let Some(last) = groups.last_mut() { + if let Some(last) = manipulators_list.last_mut() { last.out_handle = Some(handle1); } } // Add the end point with the correct in-handle and out-handle (None) - groups.push(ManipulatorGroup::new(end, Some(handle2), None)); + manipulators_list.push(ManipulatorGroup::new(end, Some(handle2), None)); current_start = Some(end); // Check if this is the last segment if index == cubics.len() - 1 { - all_subpaths.push(Subpath::new(groups, true)); - groups = Vec::new(); // Reset groups for the next path + all_subpaths.push(Subpath::new(manipulators_list, true)); + manipulators_list = Vec::new(); // Reset manipulators for the next path } } } - VectorData::from_subpaths(all_subpaths, false) + Vector::from_subpaths(all_subpaths, false) } type Path = Vec; diff --git a/node-graph/graph-craft/Cargo.toml b/node-graph/graph-craft/Cargo.toml index ce27305cc5..524e166bb8 100644 --- a/node-graph/graph-craft/Cargo.toml +++ b/node-graph/graph-craft/Cargo.toml @@ -25,7 +25,6 @@ graphene-raster-nodes = { workspace = true } # Workspace dependencies log = { workspace = true } glam = { workspace = true } -bezier-rs = { workspace = true } specta = { workspace = true } rustc-hash = { workspace = true } url = { workspace = true } @@ -38,15 +37,12 @@ tokio = { workspace = true, optional = true } serde_json = { workspace = true, optional = true } # Workspace dependencies -[target.'cfg(target_arch = "wasm32")'.dependencies] -web-sys = { workspace = true, features = [ - "Navigator", - "Gpu", -] } +[target.'cfg(target_family = "wasm")'.dependencies] +web-sys = { workspace = true, features = ["Navigator", "Gpu"] } js-sys = { workspace = true } wasm-bindgen = { workspace = true } -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +[target.'cfg(not(target_family = "wasm"))'.dependencies] winit = { workspace = true } [dev-dependencies] diff --git a/node-graph/graph-craft/src/document.rs b/node-graph/graph-craft/src/document.rs index 08679ce417..79582b7fc8 100644 --- a/node-graph/graph-craft/src/document.rs +++ b/node-graph/graph-craft/src/document.rs @@ -1,13 +1,13 @@ pub mod value; use crate::document::value::TaggedValue; -use crate::proto::{ConstructionArgs, ProtoNetwork, ProtoNode, ProtoNodeInput}; +use crate::proto::{ConstructionArgs, ProtoNetwork, ProtoNode}; use dyn_any::DynAny; use glam::IVec2; use graphene_core::memo::MemoHashGuard; pub use graphene_core::uuid::NodeId; pub use graphene_core::uuid::generate_uuid; -use graphene_core::{Cow, MemoHash, ProtoNodeIdentifier, Type}; +use graphene_core::{Context, Cow, MemoHash, ProtoNodeIdentifier, Type}; use log::Metadata; use rustc_hash::FxHashMap; use std::collections::HashMap; @@ -42,103 +42,11 @@ pub struct DocumentNode { /// In the root network, it is resolved when evaluating the borrow tree. /// Ensure the click target in the encapsulating network is updated when the inputs cause the node shape to change (currently only when exposing/hiding an input) /// by using network.update_click_target(node_id). - #[cfg_attr(target_arch = "wasm32", serde(alias = "outputs"))] + #[cfg_attr(target_family = "wasm", serde(alias = "outputs"))] pub inputs: Vec, - /// Manual composition is the methodology by which most nodes are implemented, involving a call argument and upstream inputs. - /// By contrast, automatic composition is an alternative way to handle the composition of nodes as they execute in the graph. - /// Normally, the program (the compiled graph) builds up its call stack, with each node calling its upstream predecessor to acquire its input data. - /// When the document graph becomes the proto graph, that conceptual model changes into a model that's unique to the proto graph. - /// Automatic composition allows a document node to be translated into its place in the proto graph differently, such that - /// the node doesn't participate in that process of being called with a call argument and calling its upstream predecessor. - /// Instead, it is called directly with its input data from the upstream node, skipping the call stack building process. - /// The abstraction is provided by the compiler for nodes which opt for automatic composition. It works by inserting a `ComposeNode` - /// into the proto graph, which does the job of calling the upstream node and feeding its output into the downstream node's first input. - /// That first input is typically used by manual composition nodes as the call argument, but for automatic composition nodes, - /// that first input becomes the input data from the upstream node passed in by the `ComposeNode`. - /// - /// Through automatic composition, the upstream node providing the first input for a proto node is evaluated before the proto node itself is run. - /// (That first input is usually the call argument when manual composition is used.) - /// - Abstract example: upstream node `G` is evaluated and its data feeds into the first input of downstream node `F`, - /// just like function composition where function `G` is evaluated and its result is fed into function `F`. - /// - Concrete example: a node that takes an image as its first input will get that image data from an upstream node that produces image output data and is evaluated first before being fed downstream. - /// - /// This is achieved by automatically inserting `ComposeNode`s, which run the first node with the overall input and then feed the resulting output into the second node. - /// The `ComposeNode` is basically a function composition operator: the parentheses in `F(G(x))` or circle math operator in `(F โˆ˜ G)(x)`. - /// For flexibility, instead of being a language construct, Graphene splits out composition itself as its own low-level node so that behavior can be overridden. - /// The `ComposeNode`s are then inserted during the graph rewriting step for nodes that don't opt out with `manual_composition`. - /// Instead of node `G` feeding into node `F` feeding as the result back to the caller, - /// the graph is rewritten so nodes `G` and `F` both feed as lambdas into the inputs of a `ComposeNode` which calls `F(G(input))` and returns the result to the caller. - /// - /// A node's manual composition input represents an input that is not resolved through graph rewriting with a `ComposeNode`, - /// and is instead just passed in when evaluating this node within the borrow tree. - /// This is similar to having the first input be a `NodeInput::Network` after the graph flattening. - /// - /// ## Example Use Case: CacheNode - /// - /// The `CacheNode` is a pass-through node on cache miss, but on cache hit it needs to avoid evaluating the upstream node and instead just return the cached value. - /// - /// First, let's consider what that would look like using the default composition flow if the `CacheNode` instead just always acted as a pass-through (akin to a cache that always misses): - /// - /// ```text - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” - /// โ”‚ โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚โ—„โ”€โ”€โ”€ EVAL (START) - /// โ”‚ G โ”‚ โ”‚PassThroughNodeโ”‚ โ”‚ F โ”‚ - /// โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚โ”€โ”€โ”€โ–บ RESULT (END) - /// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - /// ``` - /// - /// This acts like the function call `F(PassThroughNode(G(input)))` when evaluating `F` with some `input`: `F.eval(input)`. - /// - The diagram's upper track of arrows represents the flow of building up the call stack: - /// since `F` is the output it is encountered first but deferred to its upstream caller `PassThroughNode` and that is once again deferred to its upstream caller `G`. - /// - The diagram's lower track of arrows represents the flow of evaluating the call stack: - /// `G` is evaluated first, then `PassThroughNode` is evaluated with the result of `G`, and finally `F` is evaluated with the result of `PassThroughNode`. - /// - /// With the default composition flow (no manual composition), `ComposeNode`s would be automatically inserted during the graph rewriting step like this: - /// - /// ```text - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” - /// โ”‚ โ”‚โ—„โ”€โ”€โ”€ EVAL (START) - /// โ”‚ ComposeNode โ”‚ - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”œโ”€โ”€โ”€โ–บ RESULT (END) - /// โ”‚ โ”‚โ—„โ”€โ” โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค - /// โ”‚ G โ”‚ โ””โ”€โ”ค โ”‚ - /// โ”‚ โ”œโ”€โ” โ”‚ First โ”‚ - /// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ–บโ”‚ โ”‚ - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค - /// โ”‚ โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚ - /// โ”‚ ComposeNode โ”‚ โ”‚ Second โ”‚ - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚ - /// โ”‚ โ”‚โ—„โ”€โ” โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - /// โ”‚PassThroughNodeโ”‚ โ””โ”€โ”ค โ”‚ - /// โ”‚ โ”œโ”€โ” โ”‚ First โ”‚ - /// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ–บโ”‚ โ”‚ - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค - /// | โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚ - /// โ”‚ F โ”‚ โ”‚ Second โ”‚ - /// โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚ - /// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - /// ``` - /// - /// Now let's swap back from the `PassThroughNode` to the `CacheNode` to make caching actually work. - /// It needs to override the default composition flow so that `G` is not automatically evaluated when the cache is hit. - /// We need to give the `CacheNode` more manual control over the order of execution. - /// So the `CacheNode` opts into manual composition and, instead of deferring to its upstream caller, it consumes the input directly: - /// - /// ```text - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” - /// โ”‚ โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚โ—„โ”€โ”€โ”€ EVAL (START) - /// โ”‚ CacheNode โ”‚ โ”‚ F โ”‚ - /// โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚โ”€โ”€โ”€โ–บ RESULT (END) - /// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - /// โ”‚ โ”‚โ—„โ”€โ”€โ”€โ”ค โ”‚ - /// โ”‚ G โ”‚ โ”‚ Cached Data โ”‚ - /// โ”‚ โ”œโ”€โ”€โ”€โ–บโ”‚ โ”‚ - /// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - /// ``` - /// - /// Now, the call from `F` directly reaches the `CacheNode` and the `CacheNode` can decide whether to call `G.eval(input_from_f)` - /// in the event of a cache miss or just return the cached data in the event of a cache hit. - pub manual_composition: Option, + /// Type of the argument which this node can be evaluated with. + #[serde(alias = "manual_composition", default)] + pub call_argument: Type, // A nested document network or a proto-node identifier. pub implementation: DocumentNodeImplementation, /// Represents the eye icon for hiding/showing the node in the graph UI. When hidden, a node gets replaced with an identity node during the graph flattening step. @@ -173,15 +81,13 @@ pub struct OriginalLocation { pub dependants: Vec>, /// A list of flags indicating whether the input is exposed in the UI pub inputs_exposed: Vec, - /// Skipping inputs is useful for the manual composition thing - whereby a hidden `Footprint` input is added as the first input. - pub skip_inputs: usize, } impl Default for DocumentNode { fn default() -> Self { Self { inputs: Default::default(), - manual_composition: Default::default(), + call_argument: concrete!(Context), implementation: Default::default(), visible: true, skip_deduplication: Default::default(), @@ -195,14 +101,13 @@ impl Hash for OriginalLocation { self.path.hash(state); self.inputs_source.iter().for_each(|val| val.hash(state)); self.inputs_exposed.hash(state); - self.skip_inputs.hash(state); } } impl OriginalLocation { pub fn inputs(&self, index: usize) -> impl Iterator + '_ { - [(index >= self.skip_inputs).then(|| Source { + [(index >= 1).then(|| Source { node: self.path.clone().unwrap_or_default(), - index: self.inputs_exposed.iter().take(index - self.skip_inputs).filter(|&&exposed| exposed).count(), + index: self.inputs_exposed.iter().take(index - 1).filter(|&&exposed| exposed).count(), })] .into_iter() .flatten() @@ -211,7 +116,7 @@ impl OriginalLocation { } impl DocumentNode { /// Locate the input that is a [`NodeInput::Network`] at index `offset` and replace it with a [`NodeInput::Node`]. - pub fn populate_first_network_input(&mut self, node_id: NodeId, output_index: usize, offset: usize, lambda: bool, source: impl Iterator, skip: usize) { + pub fn populate_first_network_input(&mut self, node_id: NodeId, output_index: usize, offset: usize, source: impl Iterator, skip: usize) { let (index, _) = self .inputs .iter() @@ -219,60 +124,38 @@ impl DocumentNode { .nth(offset) .unwrap_or_else(|| panic!("no network input found for {self:#?} and offset: {offset}")); - self.inputs[index] = NodeInput::Node { node_id, output_index, lambda }; + self.inputs[index] = NodeInput::Node { node_id, output_index }; let input_source = &mut self.original_location.inputs_source; for source in source { - input_source.insert(source, (index + self.original_location.skip_inputs).saturating_sub(skip)); + input_source.insert(source, (index + 1).saturating_sub(skip)); } } - fn resolve_proto_node(mut self) -> ProtoNode { - assert!(!self.inputs.is_empty() || self.manual_composition.is_some(), "Resolving document node {self:#?} with no inputs"); + fn resolve_proto_node(self) -> ProtoNode { let DocumentNodeImplementation::ProtoNode(identifier) = self.implementation else { unreachable!("tried to resolve not flattened node on resolved node {self:?}"); }; - let (input, mut args) = if let Some(ty) = self.manual_composition { - (ProtoNodeInput::ManualComposition(ty), ConstructionArgs::Nodes(vec![])) - } else { - let first = self.inputs.remove(0); - match first { - NodeInput::Value { tagged_value, .. } => { - assert_eq!(self.inputs.len(), 0, "A value node cannot have any inputs. Current inputs: {:?}", self.inputs); - (ProtoNodeInput::ManualComposition(concrete!(graphene_core::Context<'static>)), ConstructionArgs::Value(tagged_value)) - } - NodeInput::Node { node_id, output_index, lambda } => { - assert_eq!(output_index, 0, "Outputs should be flattened before converting to proto node"); - let node = if lambda { ProtoNodeInput::NodeLambda(node_id) } else { ProtoNodeInput::Node(node_id) }; - (node, ConstructionArgs::Nodes(vec![])) - } - NodeInput::Network { import_type, .. } => (ProtoNodeInput::ManualComposition(import_type), ConstructionArgs::Nodes(vec![])), - NodeInput::Inline(inline) => (ProtoNodeInput::None, ConstructionArgs::Inline(inline)), - NodeInput::Scope(_) => unreachable!("Scope input was not resolved"), - NodeInput::Reflection(_) => unreachable!("Reflection input was not resolved"), - } - }; + let (input, mut args) = (self.call_argument, ConstructionArgs::Nodes(vec![])); assert!(!self.inputs.iter().any(|input| matches!(input, NodeInput::Network { .. })), "received non-resolved input"); - assert!( - !self.inputs.iter().any(|input| matches!(input, NodeInput::Value { .. })), - "received value as input. inputs: {:#?}, construction_args: {:#?}", - self.inputs, - args - ); // If we have one input of the type inline, set it as the construction args if let &[NodeInput::Inline(ref inline)] = self.inputs.as_slice() { args = ConstructionArgs::Inline(inline.clone()); } + // If we have one input of the type inline, set it as the construction args + if let &[NodeInput::Value { ref tagged_value, .. }] = self.inputs.as_slice() { + args = ConstructionArgs::Value(tagged_value.clone()); + } if let ConstructionArgs::Nodes(nodes) = &mut args { nodes.extend(self.inputs.iter().map(|input| match input { - NodeInput::Node { node_id, lambda, .. } => (*node_id, *lambda), + NodeInput::Node { node_id, .. } => *node_id, _ => unreachable!(), })); } ProtoNode { identifier, - input, + call_argument: input, construction_args: args, original_location: self.original_location, skip_deduplication: self.skip_deduplication, @@ -284,7 +167,7 @@ impl DocumentNode { #[derive(Debug, Clone, PartialEq, Hash, DynAny, serde::Serialize, serde::Deserialize)] pub enum NodeInput { /// A reference to another node in the same network from which this node can receive its input. - Node { node_id: NodeId, output_index: usize, lambda: bool }, + Node { node_id: NodeId, output_index: usize }, /// A hardcoded value that can't change after the graph is compiled. Gets converted into a value node during graph compilation. Value { tagged_value: MemoHash, exposed: bool }, @@ -323,11 +206,7 @@ pub enum DocumentNodeMetadata { impl NodeInput { pub const fn node(node_id: NodeId, output_index: usize) -> Self { - Self::Node { node_id, output_index, lambda: false } - } - - pub const fn lambda(node_id: NodeId, output_index: usize) -> Self { - Self::Node { node_id, output_index, lambda: true } + Self::Node { node_id, output_index } } pub fn value(tagged_value: TaggedValue, exposed: bool) -> Self { @@ -344,12 +223,8 @@ impl NodeInput { } fn map_ids(&mut self, f: impl Fn(NodeId) -> NodeId) { - if let &mut NodeInput::Node { node_id, output_index, lambda } = self { - *self = NodeInput::Node { - node_id: f(node_id), - output_index, - lambda, - } + if let &mut NodeInput::Node { node_id, output_index } = self { + *self = NodeInput::Node { node_id: f(node_id), output_index } } } @@ -390,37 +265,13 @@ impl NodeInput { } } +// TODO: Eventually remove this document upgrade code #[derive(Clone, Debug, DynAny, serde::Serialize, serde::Deserialize)] /// Represents the implementation of a node, which can be a nested [`NodeNetwork`], a proto [`ProtoNodeIdentifier`], or `Extract`. pub enum OldDocumentNodeImplementation { - /// This describes a (document) node built out of a subgraph of other (document) nodes. - /// - /// A nested [`NodeNetwork`] that is flattened by the [`NodeNetwork::flatten`] function. Network(OldNodeNetwork), - /// This describes a (document) node implemented as a proto node. - /// - /// A proto node identifier which can be found in `node_registry.rs`. - #[serde(alias = "Unresolved")] // TODO: Eventually remove this alias document upgrade code + #[serde(alias = "Unresolved")] ProtoNode(ProtoNodeIdentifier), - /// The Extract variant is a tag which tells the compilation process to do something special. It invokes language-level functionality built for use by the ExtractNode to enable metaprogramming. - /// When the ExtractNode is compiled, it gets replaced by a value node containing a representation of the source code for the function/lambda of the document node that's fed into the ExtractNode - /// (but only that one document node, not upstream nodes). - /// - /// This is explained in more detail here: - /// - /// Currently we use it for GPU execution, where a node has to get "extracted" to its source code representation and stored as a value that can be given to the GpuCompiler node at runtime - /// (to become a compute shader). Future use could involve the addition of an InjectNode to convert the source code form back into an executable node, enabling metaprogramming in the node graph. - /// We would use an assortment of nodes that operate on Graphene source code (just data, no different from any other data flowing through the graph) to make graph transformations. - /// - /// We use this for dealing with macros in a syntactic way of modifying the node graph from within the graph itself. Just like we often deal with lambdas to represent a whole group of - /// operations/code/logic, this allows us to basically deal with a lambda at a meta/source-code level, because we need to pass the GPU SPIR-V compiler the source code for a lambda, - /// not the executable logic of a lambda. - /// - /// This is analogous to how Rust macros operate at the level of source code, not executable code. When we speak of source code, that represents Graphene's source code in the form of a - /// DocumentNode network, not the text form of Rust's source code. (Analogous to the token stream/AST of a Rust macro.) - /// - /// `DocumentNode`s with a `DocumentNodeImplementation::Extract` are converted into a `ClonedNode` that returns the `DocumentNode` specified by the single `NodeInput::Node`. The referenced node - /// (specified by the single `NodeInput::Node`) is removed from the network, and any `NodeInput::Node`s used by the referenced node are replaced with a generically typed network input. Extract, } @@ -552,7 +403,7 @@ pub struct OldDocumentNode { /// /// In the root network, it is resolved when evaluating the borrow tree. /// Ensure the click target in the encapsulating network is updated when the inputs cause the node shape to change (currently only when exposing/hiding an input) by using network.update_click_target(node_id). - #[cfg_attr(target_arch = "wasm32", serde(alias = "outputs"))] + #[cfg_attr(target_family = "wasm", serde(alias = "outputs"))] pub inputs: Vec, pub manual_composition: Option, // TODO: Remove once this references its definition instead (see above TODO). @@ -657,7 +508,7 @@ pub struct NodeNetwork { /// The list of data outputs that are exported from this network to the parent network. /// Each export is a reference to a node within this network, paired with its output index, that is the source of the network's exported data. // TODO: Eventually remove this alias document upgrade code - #[cfg_attr(target_arch = "wasm32", serde(alias = "outputs", deserialize_with = "deserialize_exports"))] + #[cfg_attr(target_family = "wasm", serde(alias = "outputs", deserialize_with = "deserialize_exports"))] pub exports: Vec, // TODO: Instead of storing import types in each NodeInput::Network connection, the types are stored here. This is similar to how types need to be defined for parameters when creating a function in Rust. // pub import_types: Vec, @@ -796,7 +647,6 @@ impl NodeNetwork { node.original_location = OriginalLocation { path: Some(new_path), inputs_exposed: node.inputs.iter().map(|input| input.is_exposed()).collect(), - skip_inputs: if node.manual_composition.is_some() { 1 } else { 0 }, dependants: (0..node.implementation.output_count()).map(|_| Vec::new()).collect(), ..Default::default() }; @@ -915,14 +765,15 @@ impl NodeNetwork { warn!("The node which was supposed to be flattened does not exist in the network, id {node_id} network {self:#?}"); return; }; + // If the node is hidden, replace it with an identity node let identity_node = DocumentNodeImplementation::ProtoNode("graphene_core::ops::IdentityNode".into()); if !node.visible && node.implementation != identity_node { node.implementation = identity_node; - // Connect layer node to the graphic group below + // Connect layer node to the group below node.inputs.drain(1..); - node.manual_composition = None; + node.call_argument = concrete!(()); self.nodes.insert(id, node); return; } @@ -972,12 +823,11 @@ impl NodeNetwork { for (nested_node_id, mut nested_node) in inner_network.nodes.into_iter() { for (nested_input_index, nested_input) in nested_node.clone().inputs.iter().enumerate() { if let NodeInput::Network { import_index, .. } = nested_input { - let parent_input = node.inputs.get(*import_index).unwrap_or_else(|| panic!("Import index {} should always exist", import_index)); + let parent_input = node.inputs.get(*import_index).unwrap_or_else(|| panic!("Import index {import_index} should always exist")); match *parent_input { // If the input to self is a node, connect the corresponding output of the inner network to it - NodeInput::Node { node_id, output_index, lambda } => { - let skip = node.original_location.skip_inputs; - nested_node.populate_first_network_input(node_id, output_index, nested_input_index, lambda, node.original_location.inputs(*import_index), skip); + NodeInput::Node { node_id, output_index } => { + nested_node.populate_first_network_input(node_id, output_index, nested_input_index, node.original_location.inputs(*import_index), 1); let input_node = self.nodes.get_mut(&node_id).unwrap_or_else(|| panic!("unable find input node {node_id:?}")); input_node.original_location.dependants[output_index].push(nested_node_id); } @@ -1075,20 +925,10 @@ impl NodeNetwork { *export = NodeInput::Node { node_id: merged_node_id, output_index: 0, - lambda: false, }; } } - // /// Locate the export that is a [`NodeInput::Network`] at index `offset` and replace it with a [`NodeInput::Node`]. - // fn populate_first_network_export(&mut self, node: &mut DocumentNode, node_id: NodeId, output_index: usize, lambda: bool, export_index: usize, source: impl Iterator, skip: usize) { - // self.exports[export_index] = NodeInput::Node { node_id, output_index, lambda }; - // let input_source = &mut node.original_location.inputs_source; - // for source in source { - // input_source.insert(source, output_index + node.original_location.skip_inputs - skip); - // } - // } - fn remove_id_node(&mut self, id: NodeId) -> Result<(), String> { let node = self.nodes.get(&id).ok_or_else(|| format!("Node with id {id} does not exist"))?.clone(); if let DocumentNodeImplementation::ProtoNode(ident) = &node.implementation { @@ -1118,7 +958,7 @@ impl NodeNetwork { let input_source = &mut output.original_location.inputs_source; for source in node.original_location.inputs(index) { - input_source.insert(source, index + output.original_location.skip_inputs - node.original_location.skip_inputs); + input_source.insert(source, index); } } } @@ -1263,7 +1103,7 @@ impl<'a> Iterator for RecursiveNodeIter<'a> { #[cfg(test)] mod test { use super::*; - use crate::proto::{ConstructionArgs, ProtoNetwork, ProtoNode, ProtoNodeInput}; + use crate::proto::{ConstructionArgs, ProtoNetwork, ProtoNode}; use std::sync::atomic::AtomicU64; fn gen_node_id() -> NodeId { @@ -1342,7 +1182,7 @@ mod test { nodes: [ id_node.clone(), DocumentNode { - inputs: vec![NodeInput::lambda(NodeId(0), 0)], + inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::Extract, ..Default::default() }, @@ -1388,7 +1228,8 @@ mod test { #[test] fn resolve_proto_node_add() { let document_node = DocumentNode { - inputs: vec![NodeInput::network(concrete!(u32), 0), NodeInput::node(NodeId(0), 0)], + inputs: vec![NodeInput::node(NodeId(0), 0)], + call_argument: concrete!(u32), implementation: DocumentNodeImplementation::ProtoNode("graphene_core::structural::ConsNode".into()), ..Default::default() }; @@ -1396,8 +1237,8 @@ mod test { let proto_node = document_node.resolve_proto_node(); let reference = ProtoNode { identifier: "graphene_core::structural::ConsNode".into(), - input: ProtoNodeInput::ManualComposition(concrete!(u32)), - construction_args: ConstructionArgs::Nodes(vec![(NodeId(0), false)]), + call_argument: concrete!(u32), + construction_args: ConstructionArgs::Nodes(vec![NodeId(0)]), ..Default::default() }; assert_eq!(proto_node, reference); @@ -1413,13 +1254,12 @@ mod test { NodeId(10), ProtoNode { identifier: "graphene_core::structural::ConsNode".into(), - input: ProtoNodeInput::ManualComposition(concrete!(u32)), - construction_args: ConstructionArgs::Nodes(vec![(NodeId(14), false)]), + call_argument: concrete!(u32), + construction_args: ConstructionArgs::Nodes(vec![NodeId(14)]), original_location: OriginalLocation { path: Some(vec![NodeId(1), NodeId(0)]), inputs_source: [(Source { node: vec![NodeId(1)], index: 1 }, 1)].into(), inputs_exposed: vec![true, true], - skip_inputs: 0, ..Default::default() }, @@ -1430,13 +1270,12 @@ mod test { NodeId(11), ProtoNode { identifier: "graphene_core::ops::AddPairNode".into(), - input: ProtoNodeInput::Node(NodeId(10)), - construction_args: ConstructionArgs::Nodes(vec![]), + call_argument: concrete!(Context), + construction_args: ConstructionArgs::Nodes(vec![NodeId(10)]), original_location: OriginalLocation { path: Some(vec![NodeId(1), NodeId(1)]), inputs_source: HashMap::new(), inputs_exposed: vec![true], - skip_inputs: 0, ..Default::default() }, ..Default::default() @@ -1446,13 +1285,12 @@ mod test { NodeId(14), ProtoNode { identifier: "graphene_core::value::ClonedNode".into(), - input: ProtoNodeInput::ManualComposition(concrete!(graphene_core::Context)), + call_argument: concrete!(graphene_core::Context), construction_args: ConstructionArgs::Value(TaggedValue::U32(2).into()), original_location: OriginalLocation { path: Some(vec![NodeId(1), NodeId(4)]), inputs_source: HashMap::new(), inputs_exposed: vec![true, false], - skip_inputs: 0, ..Default::default() }, ..Default::default() @@ -1478,13 +1316,13 @@ mod test { ( NodeId(10), DocumentNode { - inputs: vec![NodeInput::network(concrete!(u32), 0), NodeInput::node(NodeId(14), 0)], + inputs: vec![NodeInput::node(NodeId(14), 0)], + call_argument: concrete!(u32), implementation: DocumentNodeImplementation::ProtoNode("graphene_core::structural::ConsNode".into()), original_location: OriginalLocation { path: Some(vec![NodeId(1), NodeId(0)]), inputs_source: [(Source { node: vec![NodeId(1)], index: 1 }, 1)].into(), inputs_exposed: vec![true, true], - skip_inputs: 0, ..Default::default() }, ..Default::default() @@ -1499,7 +1337,6 @@ mod test { path: Some(vec![NodeId(1), NodeId(4)]), inputs_source: HashMap::new(), inputs_exposed: vec![true, false], - skip_inputs: 0, ..Default::default() }, ..Default::default() @@ -1514,7 +1351,6 @@ mod test { path: Some(vec![NodeId(1), NodeId(1)]), inputs_source: HashMap::new(), inputs_exposed: vec![true], - skip_inputs: 0, ..Default::default() }, ..Default::default() @@ -1599,49 +1435,4 @@ mod test { } // TODO: Write more tests - // #[test] - // fn out_of_order_duplicate() { - // let result = output_duplicate(vec![NodeInput::node(NodeId(10), 1), NodeInput::node(NodeId(10), 0)], NodeInput::node(NodeId(10), 0); - // assert_eq!( - // result.outputs[0], - // NodeInput::node(NodeId(101), 0), - // "The first network output should be from a duplicated nested network" - // ); - // assert_eq!( - // result.outputs[1], - // NodeInput::node(NodeId(10), 0), - // "The second network output should be from the original nested network" - // ); - // assert!( - // result.nodes.contains_key(&NodeId(10)) && result.nodes.contains_key(&NodeId(101)) && result.nodes.len() == 2, - // "Network should contain two duplicated nodes" - // ); - // for (node_id, input_value, inner_id) in [(10, 1., 1), (101, 2., 2)] { - // let nested_network_node = result.nodes.get(&NodeId(node_id)).unwrap(); - // assert_eq!(nested_network_node.name, "Nested network".to_string(), "Name should not change"); - // assert_eq!(nested_network_node.inputs, vec![NodeInput::value(TaggedValue::F32(input_value), false)], "Input should be stable"); - // let inner_network = nested_network_node.implementation.get_network().expect("Implementation should be network"); - // assert_eq!(inner_network.inputs, vec![inner_id], "The input should be sent to the second node"); - // assert_eq!(inner_network.outputs, vec![NodeInput::node(NodeId(inner_id), 0)], "The output should be node id"); - // assert_eq!(inner_network.nodes.get(&NodeId(inner_id)).unwrap().name, format!("Identity {inner_id}"), "The node should be identity"); - // } - // } - // #[test] - // fn using_other_node_duplicate() { - // let result = output_duplicate(vec![NodeInput::node(NodeId(11), 0)], NodeInput::node(NodeId(10), 1); - // assert_eq!(result.outputs, vec![NodeInput::node(NodeId(11), 0)], "The network output should be the result node"); - // assert!( - // result.nodes.contains_key(&NodeId(11)) && result.nodes.contains_key(&NodeId(101)) && result.nodes.len() == 2, - // "Network should contain a duplicated node and a result node" - // ); - // let result_node = result.nodes.get(&NodeId(11)).unwrap(); - // assert_eq!(result_node.inputs, vec![NodeInput::node(NodeId(101), 0)], "Result node should refer to duplicate node as input"); - // let nested_network_node = result.nodes.get(&NodeId(101)).unwrap(); - // assert_eq!(nested_network_node.name, "Nested network".to_string(), "Name should not change"); - // assert_eq!(nested_network_node.inputs, vec![NodeInput::value(TaggedValue::F32(2.), false)], "Input should be 2"); - // let inner_network = nested_network_node.implementation.get_network().expect("Implementation should be network"); - // assert_eq!(inner_network.inputs, vec![2], "The input should be sent to the second node"); - // assert_eq!(inner_network.outputs, vec![NodeInput::node(NodeId(2), 0)], "The output should be node id 2"); - // assert_eq!(inner_network.nodes.get(&NodeId(2)).unwrap().name, "Identity 2", "The node should be identity 2"); - // } } diff --git a/node-graph/graph-craft/src/document/value.rs b/node-graph/graph-craft/src/document/value.rs index 8e244f0b2b..6d404462d5 100644 --- a/node-graph/graph-craft/src/document/value.rs +++ b/node-graph/graph-craft/src/document/value.rs @@ -3,15 +3,20 @@ use crate::proto::{Any as DAny, FutureAny}; use crate::wasm_application_io::WasmEditorApi; use dyn_any::DynAny; pub use dyn_any::StaticType; +use glam::{Affine2, Vec2}; pub use glam::{DAffine2, DVec2, IVec2, UVec2}; -use graphene_application_io::SurfaceFrame; +use graphene_application_io::{ImageTexture, SurfaceFrame}; use graphene_brush::brush_cache::BrushCache; use graphene_brush::brush_stroke::BrushStroke; -use graphene_core::raster_types::CPU; +use graphene_core::raster::Image; +use graphene_core::raster_types::{CPU, Raster}; +use graphene_core::table::Table; use graphene_core::transform::ReferencePoint; use graphene_core::uuid::NodeId; +use graphene_core::vector::Vector; use graphene_core::vector::style::Fill; -use graphene_core::{Color, MemoHash, Node, Type}; +use graphene_core::vector::style::GradientStops; +use graphene_core::{Artboard, Color, Graphic, MemoHash, Node, Type}; use graphene_svg_renderer::RenderMetadata; use std::fmt::Display; use std::hash::Hash; @@ -159,54 +164,55 @@ tagged_value! { // =============== // PRIMITIVE TYPES // =============== - #[serde(alias = "F32")] // TODO: Eventually remove this alias document upgrade code + F32(f32), F64(f64), U32(u32), U64(u64), Bool(bool), String(String), - #[serde(alias = "IVec2", alias = "UVec2")] - DVec2(DVec2), - DAffine2(DAffine2), OptionalF64(Option), - OptionalDVec2(Option), - // ========================== - // PRIMITIVE COLLECTION TYPES - // ========================== + ColorNotInTable(Color), + OptionalColorNotInTable(Option), + // ======================== + // LISTS OF PRIMITIVE TYPES + // ======================== #[serde(alias = "VecF32")] // TODO: Eventually remove this alias document upgrade code VecF64(Vec), - VecU64(Vec), VecDVec2(Vec), F64Array4([f64; 4]), NodePath(Vec), - #[serde(alias = "ManipulatorGroupIds")] // TODO: Eventually remove this alias document upgrade code - PointIds(Vec), - // ==================== - // GRAPHICAL DATA TYPES - // ==================== - GraphicElement(graphene_core::GraphicElement), - #[cfg_attr(target_arch = "wasm32", serde(deserialize_with = "graphene_core::vector::migrate_vector_data"))] // TODO: Eventually remove this migration document upgrade code - VectorData(graphene_core::vector::VectorDataTable), - #[cfg_attr(target_arch = "wasm32", serde(alias = "ImageFrame", deserialize_with = "graphene_core::raster::image::migrate_image_frame"))] // TODO: Eventually remove this migration document upgrade code - RasterData(graphene_core::raster_types::RasterDataTable), - #[cfg_attr(target_arch = "wasm32", serde(deserialize_with = "graphene_core::graphic_element::migrate_graphic_group"))] // TODO: Eventually remove this migration document upgrade code - GraphicGroup(graphene_core::GraphicGroupTable), - #[cfg_attr(target_arch = "wasm32", serde(deserialize_with = "graphene_core::graphic_element::migrate_artboard_group"))] // TODO: Eventually remove this migration document upgrade code - ArtboardGroup(graphene_core::ArtboardGroupTable), + // =========== + // TABLE TYPES + // =========== + GraphicUnused(Graphic), // TODO: This is unused but removing it causes `cargo test` to infinitely recurse its type solving; figure out why and then remove this + #[cfg_attr(target_family = "wasm", serde(deserialize_with = "graphene_core::vector::migrate_vector"))] // TODO: Eventually remove this migration document upgrade code + #[serde(alias = "VectorData")] + Vector(Table), + #[cfg_attr(target_family = "wasm", serde(deserialize_with = "graphene_core::raster::image::migrate_image_frame"))] // TODO: Eventually remove this migration document upgrade code + #[serde(alias = "ImageFrame", alias = "RasterData")] + Raster(Table>), + #[cfg_attr(target_family = "wasm", serde(deserialize_with = "graphene_core::graphic::migrate_graphic"))] // TODO: Eventually remove this migration document upgrade code + #[serde(alias = "GraphicGroup", alias = "Group")] + Graphic(Table), + #[cfg_attr(target_family = "wasm", serde(deserialize_with = "graphene_core::artboard::migrate_artboard"))] // TODO: Eventually remove this migration document upgrade code + #[serde(alias = "ArtboardGroup")] + Artboard(Table), + #[cfg_attr(target_family = "wasm", serde(deserialize_with = "graphene_core::misc::migrate_color"))] // TODO: Eventually remove this migration document upgrade code + #[serde(alias = "ColorTable", alias = "OptionalColor")] + Color(Table), + GradientTable(Table), // ============ // STRUCT TYPES // ============ - Artboard(graphene_core::Artboard), - Image(graphene_core::raster::Image), - Color(graphene_core::raster::color::Color), - OptionalColor(Option), - Palette(Vec), - Subpaths(Vec>), - Fill(graphene_core::vector::style::Fill), + FVec2(Vec2), + FAffine2(Affine2), + #[serde(alias = "IVec2", alias = "UVec2")] + DVec2(DVec2), + DAffine2(DAffine2), Stroke(graphene_core::vector::style::Stroke), Gradient(graphene_core::vector::style::Gradient), #[serde(alias = "GradientPositions")] // TODO: Eventually remove this alias document upgrade code - GradientStops(graphene_core::vector::style::GradientStops), + GradientStops(GradientStops), Font(graphene_core::text::Font), BrushStrokes(Vec), BrushCache(BrushCache), @@ -214,10 +220,10 @@ tagged_value! { Curve(graphene_raster_nodes::curve::Curve), Footprint(graphene_core::transform::Footprint), VectorModification(Box), - FontCache(Arc), // ========== // ENUM TYPES // ========== + Fill(graphene_core::vector::style::Fill), BlendMode(graphene_core::blending::BlendMode), LuminanceCalculation(graphene_raster_nodes::adjustments::LuminanceCalculation), XY(graphene_core::extract_xy::XY), @@ -242,11 +248,11 @@ tagged_value! { StrokeAlign(graphene_core::vector::style::StrokeAlign), PaintOrder(graphene_core::vector::style::PaintOrder), FillType(graphene_core::vector::style::FillType), - FillChoice(graphene_core::vector::style::FillChoice), GradientType(graphene_core::vector::style::GradientType), ReferencePoint(graphene_core::transform::ReferencePoint), CentroidType(graphene_core::vector::misc::CentroidType), BooleanOperation(graphene_path_bool::BooleanOperation), + TextAlign(graphene_core::text::TextAlign), } impl TaggedValue { @@ -256,10 +262,10 @@ impl TaggedValue { TaggedValue::String(x) => format!("\"{x}\""), TaggedValue::U32(x) => x.to_string() + "_u32", TaggedValue::U64(x) => x.to_string() + "_u64", + TaggedValue::F32(x) => x.to_string() + "_f32", TaggedValue::F64(x) => x.to_string() + "_f64", TaggedValue::Bool(x) => x.to_string(), TaggedValue::BlendMode(x) => "BlendMode::".to_string() + &x.to_string(), - TaggedValue::Color(x) => format!("Color {x:?}"), _ => panic!("Cannot convert to primitive string"), } } @@ -280,7 +286,7 @@ impl TaggedValue { 6 => return Color::from_rgb_str(color), 8 => return Color::from_rgba_str(color), _ => { - log::error!("Invalid default value color string: {}", input); + log::error!("Invalid default value color string: {input}"); return None; } } @@ -301,13 +307,13 @@ impl TaggedValue { "MAGENTA" => Color::MAGENTA, "TRANSPARENT" => Color::TRANSPARENT, _ => { - log::error!("Invalid default value color constant: {}", input); + log::error!("Invalid default value color constant: {input}"); return None; } }); } - log::error!("Invalid default value color: {}", input); + log::error!("Invalid default value color: {input}"); None } @@ -327,13 +333,13 @@ impl TaggedValue { "BottomCenter" => ReferencePoint::BottomCenter, "BottomRight" => ReferencePoint::BottomRight, _ => { - log::error!("Invalid ReferencePoint default type variant: {}", input); + log::error!("Invalid ReferencePoint default type variant: {input}"); return None; } }); } - log::error!("Invalid ReferencePoint default type: {}", input); + log::error!("Invalid ReferencePoint default type: {input}"); None } @@ -348,12 +354,14 @@ impl TaggedValue { x if x == TypeId::of::<()>() => TaggedValue::None, x if x == TypeId::of::() => TaggedValue::String(string.into()), x if x == TypeId::of::() => FromStr::from_str(string).map(TaggedValue::F64).ok()?, + x if x == TypeId::of::() => FromStr::from_str(string).map(TaggedValue::F32).ok()?, x if x == TypeId::of::() => FromStr::from_str(string).map(TaggedValue::U64).ok()?, x if x == TypeId::of::() => FromStr::from_str(string).map(TaggedValue::U32).ok()?, x if x == TypeId::of::() => to_dvec2(string).map(TaggedValue::DVec2)?, x if x == TypeId::of::() => FromStr::from_str(string).map(TaggedValue::Bool).ok()?, - x if x == TypeId::of::() => to_color(string).map(TaggedValue::Color)?, - x if x == TypeId::of::>() => to_color(string).map(|color| TaggedValue::OptionalColor(Some(color)))?, + x if x == TypeId::of::>() => to_color(string).map(|color| TaggedValue::Color(Table::new_from_element(color)))?, + x if x == TypeId::of::() => to_color(string).map(|color| TaggedValue::ColorNotInTable(color))?, + x if x == TypeId::of::>() => TaggedValue::ColorNotInTable(to_color(string)?), x if x == TypeId::of::() => to_color(string).map(|color| TaggedValue::Fill(Fill::solid(color)))?, x if x == TypeId::of::() => to_reference_point(string).map(TaggedValue::ReferencePoint)?, _ => return None, @@ -379,6 +387,7 @@ impl Display for TaggedValue { TaggedValue::String(x) => f.write_str(x), TaggedValue::U32(x) => f.write_fmt(format_args!("{x}")), TaggedValue::U64(x) => f.write_fmt(format_args!("{x}")), + TaggedValue::F32(x) => f.write_fmt(format_args!("{x}")), TaggedValue::F64(x) => f.write_fmt(format_args!("{x}")), TaggedValue::Bool(x) => f.write_fmt(format_args!("{x}")), _ => panic!("Cannot convert to string"), @@ -393,7 +402,8 @@ impl<'input> Node<'input, DAny<'input>> for UpcastNode { type Output = FutureAny<'input>; fn eval(&'input self, _: DAny<'input>) -> Self::Output { - Box::pin(async move { self.value.clone().into_inner().to_dynany() }) + let memo_clone = MemoHash::clone(&self.value); + Box::pin(async move { memo_clone.into_inner().as_ref().clone().to_dynany() }) } } impl UpcastNode { @@ -424,10 +434,15 @@ pub struct RenderOutput { pub metadata: RenderMetadata, } -#[derive(Debug, Clone, PartialEq, dyn_any::DynAny, Hash, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Hash, PartialEq, dyn_any::DynAny, serde::Serialize, serde::Deserialize)] pub enum RenderOutputType { CanvasFrame(SurfaceFrame), - Svg(String), + #[serde(skip)] + Texture(ImageTexture), + Svg { + svg: String, + image_data: Vec<(u64, Image)>, + }, Image(Vec), } @@ -448,17 +463,32 @@ mod fake_hash { self.to_bits().hash(state) } } + impl FakeHash for f32 { + fn hash(&self, state: &mut H) { + self.to_bits().hash(state) + } + } impl FakeHash for DVec2 { fn hash(&self, state: &mut H) { self.to_array().iter().for_each(|x| x.to_bits().hash(state)) } } + impl FakeHash for Vec2 { + fn hash(&self, state: &mut H) { + self.to_array().iter().for_each(|x| x.to_bits().hash(state)) + } + } impl FakeHash for DAffine2 { fn hash(&self, state: &mut H) { self.to_cols_array().iter().for_each(|x| x.to_bits().hash(state)) } } - impl FakeHash for Option { + impl FakeHash for Affine2 { + fn hash(&self, state: &mut H) { + self.to_cols_array().iter().for_each(|x| x.to_bits().hash(state)) + } + } + impl FakeHash for Option { fn hash(&self, state: &mut H) { if let Some(x) = self { 1.hash(state); @@ -468,7 +498,7 @@ mod fake_hash { } } } - impl FakeHash for Vec { + impl FakeHash for Vec { fn hash(&self, state: &mut H) { self.len().hash(state); self.iter().for_each(|x| x.hash(state)) @@ -486,3 +516,8 @@ mod fake_hash { } } } + +#[test] +fn can_construct_color() { + assert_eq!(TaggedValue::from_type(&concrete!(Color)).unwrap(), TaggedValue::ColorNotInTable(Color::default())); +} diff --git a/node-graph/graph-craft/src/proto.rs b/node-graph/graph-craft/src/proto.rs index 4330976609..9fefb03572 100644 --- a/node-graph/graph-craft/src/proto.rs +++ b/node-graph/graph-craft/src/proto.rs @@ -37,12 +37,7 @@ impl core::fmt::Display for ProtoNetwork { f.write_str(&"\t".repeat(indent + 1))?; f.write_str("Input: ")?; - match &node.input { - ProtoNodeInput::None => f.write_str("None")?, - ProtoNodeInput::ManualComposition(ty) => f.write_fmt(format_args!("Manual Composition (type = {ty:?})"))?, - ProtoNodeInput::Node(_) => f.write_str("Node")?, - ProtoNodeInput::NodeLambda(_) => f.write_str("Lambda Node")?, - } + f.write_fmt(format_args!("Call Argument (type = {:?})", node.call_argument))?; f.write_str("\n")?; match &node.construction_args { @@ -52,7 +47,7 @@ impl core::fmt::Display for ProtoNetwork { } ConstructionArgs::Nodes(nodes) => { for id in nodes { - write_node(f, network, id.0, indent + 1)?; + write_node(f, network, *id, indent + 1)?; } } ConstructionArgs::Inline(inline) => { @@ -78,7 +73,7 @@ pub enum ConstructionArgs { /// A list of nodes used as inputs to the constructor function in `node_registry.rs`. /// The bool indicates whether to treat the node as lambda node. // TODO: use a struct for clearer naming. - Nodes(Vec<(NodeId, bool)>), + Nodes(Vec), /// Used for GPU computation to work around the limitations of rust-gpu. Inline(InlineRust), } @@ -119,10 +114,9 @@ impl Hash for ConstructionArgs { } impl ConstructionArgs { - // TODO: what? Used in the gpu_compiler crate for something. pub fn new_function_args(&self) -> Vec { match self { - ConstructionArgs::Nodes(nodes) => nodes.iter().map(|(n, _)| format!("n{:0x}", n.0)).collect(), + ConstructionArgs::Nodes(nodes) => nodes.iter().map(|n| format!("n{:0x}", n.0)).collect(), ConstructionArgs::Value(value) => vec![value.to_primitive_string()], ConstructionArgs::Inline(inline) => vec![inline.expr.clone()], } @@ -134,7 +128,7 @@ impl ConstructionArgs { /// At different stages in the compilation process, this struct will be transformed into a reduced (more restricted) form acting as a subset of its original form, but that restricted form is still valid in the earlier stage in the compilation process before it was transformed. pub struct ProtoNode { pub construction_args: ConstructionArgs, - pub input: ProtoNodeInput, + pub call_argument: Type, pub identifier: ProtoNodeIdentifier, pub original_location: OriginalLocation, pub skip_deduplication: bool, @@ -145,45 +139,13 @@ impl Default for ProtoNode { Self { identifier: ProtoNodeIdentifier::new("graphene_core::ops::IdentityNode"), construction_args: ConstructionArgs::Value(value::TaggedValue::U32(0).into()), - input: ProtoNodeInput::None, + call_argument: concrete!(()), original_location: OriginalLocation::default(), skip_deduplication: false, } } } -/// Similar to the document node's [`crate::document::NodeInput`]. -#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)] -pub enum ProtoNodeInput { - /// This input will be converted to `()` as the call argument. - None, - /// A ManualComposition input represents an input that opts out of being resolved through the `ComposeNode`, which first runs the previous (upstream) node, then passes that evaluated - /// result to this node. Instead, ManualComposition lets this node actually consume the provided input instead of passing it to its predecessor. - /// - /// Say we have the network `a -> b -> c` where `c` is the output node and `a` is the input node. - /// We would expect `a` to get input from the network, `b` to get input from `a`, and `c` to get input from `b`. - /// This could be represented as `f(x) = c(b(a(x)))`. `a` is run with input `x` from the network. `b` is run with input from `a`. `c` is run with input from `b`. - /// - /// However if `b`'s input is using manual composition, this means it would instead be `f(x) = c(b(x))`. This means that `b` actually gets input from the network, and `a` is not automatically - /// executed as it would be using the default ComposeNode flow. Now `b` can use its own logic to decide when or if it wants to run `a` and how to use its output. For example, the CacheNode can - /// look up `x` in its cache and return the result, or otherwise call `a`, cache the result, and return it. - ManualComposition(Type), - /// The previous node where automatic (not manual) composition occurs when compiled. The entire network, of which the node is the output, is fed as input. - /// - /// Grayscale example: - /// - /// We're interested in receiving an input of the desaturated image data which has been fed through a grayscale filter. - /// (If we were interested in the grayscale filter itself, we would use the `NodeLambda` variant.) - Node(NodeId), - /// Unlike the `Node` variant, with `NodeLambda` we treat the connected node singularly as a lambda node while ignoring all nodes which feed into it from upstream. - /// - /// Grayscale example: - /// - /// We're interested in receiving an input of a particular image filter, such as a grayscale filter in the form of a grayscale node lambda. - /// (If we were interested in some image data that had been fed through a grayscale filter, we would use the `Node` variant.) - NodeLambda(NodeId), -} - impl ProtoNode { /// A stable node ID is a hash of a node that should stay constant. This is used in order to remove duplicates from the graph. /// In the case of `skip_deduplication`, the `document_node_path` is also hashed in order to avoid duplicate monitor nodes from being removed (which would make it impossible to load thumbnails). @@ -197,15 +159,8 @@ impl ProtoNode { self.original_location.path.hash(&mut hasher); } - std::mem::discriminant(&self.input).hash(&mut hasher); - match self.input { - ProtoNodeInput::None => (), - ProtoNodeInput::ManualComposition(ref ty) => { - ty.hash(&mut hasher); - } - ProtoNodeInput::Node(id) => (id, false).hash(&mut hasher), - ProtoNodeInput::NodeLambda(id) => (id, true).hash(&mut hasher), - }; + std::mem::discriminant(&self.call_argument).hash(&mut hasher); + self.call_argument.hash(&mut hasher); Some(NodeId(hasher.finish())) } @@ -219,7 +174,7 @@ impl ProtoNode { Self { identifier: ProtoNodeIdentifier::new("graphene_core::value::ClonedNode"), construction_args: value, - input: ProtoNodeInput::ManualComposition(concrete!(Context)), + call_argument: concrete!(Context), original_location: OriginalLocation { path: Some(path), inputs_exposed: vec![false; inputs_exposed], @@ -231,23 +186,13 @@ impl ProtoNode { /// Converts all references to other node IDs into new IDs by running the specified function on them. /// This can be used when changing the IDs of the nodes, for example in the case of generating stable IDs. - pub fn map_ids(&mut self, f: impl Fn(NodeId) -> NodeId, skip_lambdas: bool) { - match self.input { - ProtoNodeInput::Node(id) => self.input = ProtoNodeInput::Node(f(id)), - ProtoNodeInput::NodeLambda(id) => { - if !skip_lambdas { - self.input = ProtoNodeInput::NodeLambda(f(id)) - } - } - _ => (), - } - + pub fn map_ids(&mut self, f: impl Fn(NodeId) -> NodeId) { if let ConstructionArgs::Nodes(ids) = &mut self.construction_args { - ids.iter_mut().filter(|(_, lambda)| !(skip_lambdas && *lambda)).for_each(|(id, _)| *id = f(*id)); + ids.iter_mut().for_each(|id| *id = f(*id)); } } - pub fn unwrap_construction_nodes(&self) -> Vec<(NodeId, bool)> { + pub fn unwrap_construction_nodes(&self) -> Vec { match &self.construction_args { ConstructionArgs::Nodes(nodes) => nodes.clone(), _ => panic!("tried to unwrap nodes from non node construction args \n node: {self:#?}"), @@ -286,16 +231,8 @@ impl ProtoNetwork { pub fn collect_outwards_edges(&self) -> HashMap> { let mut edges: HashMap> = HashMap::new(); for (id, node) in &self.nodes { - match &node.input { - ProtoNodeInput::Node(ref_id) | ProtoNodeInput::NodeLambda(ref_id) => { - self.check_ref(ref_id, id); - edges.entry(*ref_id).or_default().push(*id) - } - _ => (), - } - if let ConstructionArgs::Nodes(ref_nodes) = &node.construction_args { - for (ref_id, _) in ref_nodes { + for ref_id in ref_nodes { self.check_ref(ref_id, id); edges.entry(*ref_id).or_default().push(*id) } @@ -314,7 +251,7 @@ impl ProtoNetwork { let Some(sni) = self.nodes[index].1.stable_node_id() else { panic!("failed to generate stable node id for node {:#?}", self.nodes[index].1); }; - self.replace_node_id(&outwards_edges, NodeId(index as u64), sni, false); + self.replace_node_id(&outwards_edges, NodeId(index as u64), sni); self.nodes[index].0 = sni; } } @@ -324,16 +261,8 @@ impl ProtoNetwork { pub fn collect_inwards_edges(&self) -> HashMap> { let mut edges: HashMap> = HashMap::new(); for (id, node) in &self.nodes { - match &node.input { - ProtoNodeInput::Node(ref_id) | ProtoNodeInput::NodeLambda(ref_id) => { - self.check_ref(ref_id, id); - edges.entry(*id).or_default().push(*ref_id) - } - _ => (), - } - if let ConstructionArgs::Nodes(ref_nodes) = &node.construction_args { - for (ref_id, _) in ref_nodes { + for ref_id in ref_nodes { self.check_ref(ref_id, id); edges.entry(*id).or_default().push(*ref_id) } @@ -349,16 +278,9 @@ impl ProtoNetwork { let mut inwards_edges = vec![Vec::new(); self.nodes.len()]; for (node_id, node) in &self.nodes { let node_index = id_map[node_id]; - match &node.input { - ProtoNodeInput::Node(ref_id) | ProtoNodeInput::NodeLambda(ref_id) => { - self.check_ref(ref_id, &NodeId(node_index as u64)); - inwards_edges[node_index].push(id_map[ref_id]); - } - _ => {} - } if let ConstructionArgs::Nodes(ref_nodes) = &node.construction_args { - for (ref_id, _) in ref_nodes { + for ref_id in ref_nodes { self.check_ref(ref_id, &NodeId(node_index as u64)); inwards_edges[node_index].push(id_map[ref_id]); } @@ -368,70 +290,31 @@ impl ProtoNetwork { (inwards_edges, id_map) } - /// Inserts a [`structural::ComposeNode`] for each node that has a [`ProtoNodeInput::Node`]. The compose node evaluates the first node, and then sends the result into the second node. + /// Performs topological sort and reorders ids. pub fn resolve_inputs(&mut self) -> Result<(), String> { // Perform topological sort once self.reorder_ids()?; - let max_id = self.nodes.len() as u64 - 1; - - // Collect outward edges once - let outwards_edges = self.collect_outwards_edges(); - - // Iterate over nodes in topological order - for node_id in 0..=max_id { - let node_id = NodeId(node_id); - - let (_, node) = &mut self.nodes[node_id.0 as usize]; - - if let ProtoNodeInput::Node(input_node_id) = node.input { - // Create a new node that composes the current node and its input node - let compose_node_id = NodeId(self.nodes.len() as u64); - - let (_, input_node_id_proto) = &self.nodes[input_node_id.0 as usize]; - - let input = input_node_id_proto.input.clone(); - - let mut path = input_node_id_proto.original_location.path.clone(); - if let Some(path) = &mut path { - path.push(node_id); - } - - self.nodes.push(( - compose_node_id, - ProtoNode { - identifier: ProtoNodeIdentifier::new("graphene_core::structural::ComposeNode"), - construction_args: ConstructionArgs::Nodes(vec![(input_node_id, false), (node_id, true)]), - input, - original_location: OriginalLocation { path, ..Default::default() }, - skip_deduplication: false, - }, - )); - - self.replace_node_id(&outwards_edges, node_id, compose_node_id, true); - } - } - self.reorder_ids()?; Ok(()) } - /// Update all of the references to a node ID in the graph with a new ID named `compose_node_id`. - fn replace_node_id(&mut self, outwards_edges: &HashMap>, node_id: NodeId, compose_node_id: NodeId, skip_lambdas: bool) { - // Update references in other nodes to use the new compose node + /// Update all of the references to a node ID in the graph with a new ID named `replacement_node_id`. + fn replace_node_id(&mut self, outwards_edges: &HashMap>, node_id: NodeId, replacement_node_id: NodeId) { + // Update references in other nodes to use the new node if let Some(referring_nodes) = outwards_edges.get(&node_id) { for &referring_node_id in referring_nodes { let (_, referring_node) = &mut self.nodes[referring_node_id.0 as usize]; - referring_node.map_ids(|id| if id == node_id { compose_node_id } else { id }, skip_lambdas) + referring_node.map_ids(|id| if id == node_id { replacement_node_id } else { id }) } } if self.output == node_id { - self.output = compose_node_id; + self.output = replacement_node_id; } self.inputs.iter_mut().for_each(|id| { if *id == node_id { - *id = compose_node_id; + *id = replacement_node_id; } }); } @@ -509,7 +392,7 @@ impl ProtoNetwork { for (index, &id) in order.iter().enumerate() { let mut node = std::mem::take(&mut self.nodes[id.0 as usize].1); // Update node references to reflect the new order - node.map_ids(|id| NodeId(*new_positions.get(&id).expect("node not found in lookup table") as u64), false); + node.map_ids(|id| NodeId(*new_positions.get(&id).expect("node not found in lookup table") as u64)); new_nodes.push((NodeId(index as u64), node)); } @@ -662,7 +545,6 @@ impl TypingContext { let inputs = match node.construction_args { // If the node has a value input we can infer the return type from it ConstructionArgs::Value(ref v) => { - assert!(matches!(node.input, ProtoNodeInput::None) || matches!(node.input, ProtoNodeInput::ManualComposition(ref x) if x == &concrete!(Context))); // TODO: This should return a reference to the value let types = NodeIOTypes::new(concrete!(Context), Type::Future(Box::new(v.ty())), vec![]); self.inferred.insert(node_id, types.clone()); @@ -671,7 +553,7 @@ impl TypingContext { // If the node has nodes as inputs we can infer the types from the node outputs ConstructionArgs::Nodes(ref nodes) => nodes .iter() - .map(|(id, _)| { + .map(|id| { self.inferred .get(id) .ok_or_else(|| vec![GraphError::new(node, GraphErrorType::NodeNotFound(*id))]) @@ -682,16 +564,7 @@ impl TypingContext { }; // Get the node input type from the proto node declaration - // TODO: When removing automatic composition, rename this to just `call_argument` - let primary_input_or_call_argument = match node.input { - ProtoNodeInput::None => concrete!(()), - ProtoNodeInput::ManualComposition(ref ty) => ty.clone(), - ProtoNodeInput::Node(id) | ProtoNodeInput::NodeLambda(id) => { - let input = self.inferred.get(&id).ok_or_else(|| vec![GraphError::new(node, GraphErrorType::InputNodeNotFound(id))])?; - input.return_value.clone() - } - }; - let using_manual_composition = matches!(node.input, ProtoNodeInput::ManualComposition(_) | ProtoNodeInput::None); + let call_argument = &node.call_argument; let impls = self.lookup.get(&node.identifier).ok_or_else(|| vec![GraphError::new(node, GraphErrorType::NoImplementations)])?; if let Some(index) = inputs.iter().position(|p| { @@ -733,7 +606,7 @@ impl TypingContext { // List of all implementations that match the input types let valid_output_types = impls .keys() - .filter(|node_io| valid_type(&node_io.call_argument, &primary_input_or_call_argument) && inputs.iter().zip(node_io.inputs.iter()).all(|(p1, p2)| valid_type(p1, p2))) + .filter(|node_io| valid_type(&node_io.call_argument, call_argument) && inputs.iter().zip(node_io.inputs.iter()).all(|(p1, p2)| valid_type(p1, p2))) .collect::>(); // Attempt to substitute generic types with concrete types and save the list of results @@ -742,7 +615,7 @@ impl TypingContext { .map(|node_io| { let generics_lookup: Result, _> = collect_generics(node_io) .iter() - .map(|generic| check_generic(node_io, &primary_input_or_call_argument, &inputs, generic).map(|x| (generic.to_string(), x))) + .map(|generic| check_generic(node_io, call_argument, &inputs, generic).map(|x| (generic.to_string(), x))) .collect(); generics_lookup.map(|generics_lookup| { @@ -762,7 +635,7 @@ impl TypingContext { let mut best_errors = usize::MAX; let mut error_inputs = Vec::new(); for node_io in impls.keys() { - let current_errors = [&primary_input_or_call_argument] + let current_errors = [call_argument] .into_iter() .chain(&inputs) .cloned() @@ -771,7 +644,6 @@ impl TypingContext { .filter(|(_, (p1, p2))| !valid_type(p1, p2)) .map(|(index, ty)| { let i = node.original_location.inputs(index).min_by_key(|s| s.node.len()).map(|s| s.index).unwrap_or(index); - let i = if using_manual_composition { i } else { i + 1 }; (i, ty) }) .collect::>(); @@ -783,15 +655,11 @@ impl TypingContext { error_inputs.push(current_errors); } } - let inputs = [&primary_input_or_call_argument] + let inputs = [call_argument] .into_iter() .chain(&inputs) .enumerate() - // TODO: Make the following line's if statement conditional on being a call argument or primary input - .filter_map(|(i, t)| { - let i = if using_manual_composition { i } else { i + 1 }; - if i == 0 { None } else { Some(format!("โ€ข Input {i}: {t}")) } - }) + .filter_map(|(i, t)| if i == 0 { None } else { Some(format!("โ€ข Input {i}: {t}")) }) .collect::>() .join("\n"); Err(vec![GraphError::new(node, GraphErrorType::InvalidImplementations { inputs, error_inputs })]) @@ -818,13 +686,13 @@ impl TypingContext { return Ok(node_io.clone()); } } - let inputs = [&primary_input_or_call_argument].into_iter().chain(&inputs).map(|t| t.to_string()).collect::>().join(", "); + let inputs = [call_argument].into_iter().chain(&inputs).map(|t| t.to_string()).collect::>().join(", "); let valid = valid_output_types.into_iter().cloned().collect(); Err(vec![GraphError::new(node, GraphErrorType::MultipleImplementations { inputs, valid })]) } _ => { - let inputs = [&primary_input_or_call_argument].into_iter().chain(&inputs).map(|t| t.to_string()).collect::>().join(", "); + let inputs = [call_argument].into_iter().chain(&inputs).map(|t| t.to_string()).collect::>().join(", "); let valid = valid_output_types.into_iter().cloned().collect(); Err(vec![GraphError::new(node, GraphErrorType::MultipleImplementations { inputs, valid })]) } @@ -883,7 +751,7 @@ fn replace_generics(types: &mut NodeIOTypes, lookup: &HashMap) { #[cfg(test)] mod test { use super::*; - use crate::proto::{ConstructionArgs, ProtoNetwork, ProtoNode, ProtoNodeInput}; + use crate::proto::{ConstructionArgs, ProtoNetwork, ProtoNode}; #[test] fn topological_sort() { @@ -930,16 +798,6 @@ mod test { assert_eq!(ids, vec![NodeId(0), NodeId(1), NodeId(2), NodeId(3)]); } - #[test] - fn input_resolution() { - let mut construction_network = test_network(); - construction_network.resolve_inputs().expect("Error when calling 'resolve_inputs' on 'construction_network."); - println!("{construction_network:#?}"); - assert_eq!(construction_network.nodes[0].1.identifier.name.as_ref(), "value"); - assert_eq!(construction_network.nodes.len(), 6); - assert_eq!(construction_network.nodes[5].1.construction_args, ConstructionArgs::Nodes(vec![(NodeId(3), false), (NodeId(4), true)])); - } - #[test] fn stable_node_id_generation() { let mut construction_network = test_network(); @@ -947,16 +805,11 @@ mod test { construction_network.generate_stable_node_ids(); assert_eq!(construction_network.nodes[0].1.identifier.name.as_ref(), "value"); let ids: Vec<_> = construction_network.nodes.iter().map(|(id, _)| *id).collect(); + + // If this assert fails: These NodeIds seem to be changing when you modify TaggedValue, just update them. assert_eq!( ids, - vec![ - NodeId(16997244687192517417), - NodeId(12226224850522777131), - NodeId(9162113827627229771), - NodeId(12793582657066318419), - NodeId(16945623684036608820), - NodeId(2640415155091892458) - ] + vec![NodeId(2791689253855410677), NodeId(11246167042277902310), NodeId(1014827049498980779), NodeId(4864562752646903491)] ); } @@ -969,8 +822,8 @@ mod test { NodeId(7), ProtoNode { identifier: "id".into(), - input: ProtoNodeInput::Node(NodeId(11)), - construction_args: ConstructionArgs::Nodes(vec![]), + call_argument: concrete!(()), + construction_args: ConstructionArgs::Nodes(vec![NodeId(11)]), ..Default::default() }, ), @@ -978,8 +831,8 @@ mod test { NodeId(1), ProtoNode { identifier: "id".into(), - input: ProtoNodeInput::Node(NodeId(11)), - construction_args: ConstructionArgs::Nodes(vec![]), + call_argument: concrete!(()), + construction_args: ConstructionArgs::Nodes(vec![NodeId(11)]), ..Default::default() }, ), @@ -987,8 +840,8 @@ mod test { NodeId(10), ProtoNode { identifier: "cons".into(), - input: ProtoNodeInput::ManualComposition(concrete!(u32)), - construction_args: ConstructionArgs::Nodes(vec![(NodeId(14), false)]), + call_argument: concrete!(u32), + construction_args: ConstructionArgs::Nodes(vec![NodeId(14)]), ..Default::default() }, ), @@ -996,8 +849,8 @@ mod test { NodeId(11), ProtoNode { identifier: "add".into(), - input: ProtoNodeInput::Node(NodeId(10)), - construction_args: ConstructionArgs::Nodes(vec![]), + call_argument: concrete!(()), + construction_args: ConstructionArgs::Nodes(vec![NodeId(10)]), ..Default::default() }, ), @@ -1005,7 +858,7 @@ mod test { NodeId(14), ProtoNode { identifier: "value".into(), - input: ProtoNodeInput::None, + call_argument: concrete!(()), construction_args: ConstructionArgs::Value(value::TaggedValue::U32(2).into()), ..Default::default() }, @@ -1025,8 +878,8 @@ mod test { NodeId(1), ProtoNode { identifier: "id".into(), - input: ProtoNodeInput::Node(NodeId(2)), - construction_args: ConstructionArgs::Nodes(vec![]), + call_argument: concrete!(()), + construction_args: ConstructionArgs::Nodes(vec![NodeId(2)]), ..Default::default() }, ), @@ -1034,8 +887,8 @@ mod test { NodeId(2), ProtoNode { identifier: "id".into(), - input: ProtoNodeInput::Node(NodeId(1)), - construction_args: ConstructionArgs::Nodes(vec![]), + call_argument: concrete!(()), + construction_args: ConstructionArgs::Nodes(vec![NodeId(1)]), ..Default::default() }, ), diff --git a/node-graph/graph-craft/src/wasm_application_io.rs b/node-graph/graph-craft/src/wasm_application_io.rs index 1d11744aa4..999b00fe07 100644 --- a/node-graph/graph-craft/src/wasm_application_io.rs +++ b/node-graph/graph-craft/src/wasm_application_io.rs @@ -1,34 +1,35 @@ use dyn_any::StaticType; use graphene_application_io::{ApplicationError, ApplicationIo, ResourceFuture, SurfaceHandle, SurfaceId}; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use js_sys::{Object, Reflect}; use std::collections::HashMap; +use std::hash::Hash; use std::sync::Arc; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use std::sync::atomic::AtomicU64; use std::sync::atomic::Ordering; #[cfg(feature = "tokio")] use tokio::io::AsyncReadExt; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use wasm_bindgen::JsCast; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use wasm_bindgen::JsValue; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use web_sys::HtmlCanvasElement; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use web_sys::window; #[cfg(feature = "wgpu")] use wgpu_executor::WgpuExecutor; #[derive(Debug)] struct WindowWrapper { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] window: SurfaceHandle, - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] window: SurfaceHandle>, } -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] impl Drop for WindowWrapper { fn drop(&mut self) { let window = window().expect("should have a window in this context"); @@ -39,7 +40,7 @@ impl Drop for WindowWrapper { let wrapper = || { if let Ok(canvases) = Reflect::get(&window, &image_canvases_key) { // Convert key and value to JsValue - let js_key = JsValue::from_str(format!("canvas{}", self.window.window_id).as_str()); + let js_key = JsValue::from_str(self.window.window_id.to_string().as_str()); // Use Reflect API to set property Reflect::delete_property(&canvases.into(), &js_key)?; @@ -51,14 +52,14 @@ impl Drop for WindowWrapper { } } -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] unsafe impl Sync for WindowWrapper {} -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] unsafe impl Send for WindowWrapper {} #[derive(Debug, Default)] pub struct WasmApplicationIo { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] ids: AtomicU64, #[cfg(feature = "wgpu")] pub(crate) gpu_executor: Option, @@ -69,14 +70,6 @@ pub struct WasmApplicationIo { static WGPU_AVAILABLE: std::sync::atomic::AtomicI8 = std::sync::atomic::AtomicI8::new(-1); pub fn wgpu_available() -> Option { - // Always enable wgpu when running with Tauri - #[cfg(target_arch = "wasm32")] - if let Some(window) = web_sys::window() { - if js_sys::Reflect::get(&window, &wasm_bindgen::JsValue::from_str("__TAURI__")).is_ok() { - return Some(true); - } - } - match WGPU_AVAILABLE.load(Ordering::SeqCst) { -1 => None, 0 => Some(false), @@ -86,7 +79,7 @@ pub fn wgpu_available() -> Option { impl WasmApplicationIo { pub async fn new() -> Self { - #[cfg(all(feature = "wgpu", target_arch = "wasm32"))] + #[cfg(all(feature = "wgpu", target_family = "wasm"))] let executor = if let Some(gpu) = web_sys::window().map(|w| w.navigator().gpu()) { let request_adapter = || { let request_adapter = js_sys::Reflect::get(&gpu, &wasm_bindgen::JsValue::from_str("requestAdapter")).ok()?; @@ -102,7 +95,7 @@ impl WasmApplicationIo { None }; - #[cfg(all(feature = "wgpu", not(target_arch = "wasm32")))] + #[cfg(all(feature = "wgpu", not(target_family = "wasm")))] let executor = WgpuExecutor::new().await; #[cfg(not(feature = "wgpu"))] @@ -112,7 +105,7 @@ impl WasmApplicationIo { WGPU_AVAILABLE.store(wgpu_available as i8, Ordering::SeqCst); let mut io = Self { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] ids: AtomicU64::new(0), #[cfg(feature = "wgpu")] gpu_executor: executor, @@ -136,9 +129,8 @@ impl WasmApplicationIo { let wgpu_available = executor.is_some(); WGPU_AVAILABLE.store(wgpu_available as i8, Ordering::SeqCst); - // Always enable wgpu when running with Tauri let mut io = Self { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] ids: AtomicU64::new(0), #[cfg(feature = "wgpu")] gpu_executor: executor, @@ -148,6 +140,27 @@ impl WasmApplicationIo { io.resources.insert("null".to_string(), Arc::from(include_bytes!("null.png").to_vec())); + io + } + #[cfg(all(not(target_family = "wasm"), feature = "wgpu"))] + pub fn new_with_context(context: wgpu_executor::Context) -> Self { + #[cfg(feature = "wgpu")] + let executor = WgpuExecutor::with_context(context); + + #[cfg(not(feature = "wgpu"))] + let wgpu_available = false; + #[cfg(feature = "wgpu")] + let wgpu_available = executor.is_some(); + WGPU_AVAILABLE.store(wgpu_available as i8, Ordering::SeqCst); + + let mut io = Self { + gpu_executor: executor, + windows: Vec::new(), + resources: HashMap::new(), + }; + + io.resources.insert("null".to_string(), Arc::from(include_bytes!("null.png").to_vec())); + io } } @@ -171,16 +184,16 @@ impl<'a> From<&'a WasmApplicationIo> for &'a WgpuExecutor { pub type WasmEditorApi = graphene_application_io::EditorApi; impl ApplicationIo for WasmApplicationIo { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] type Surface = HtmlCanvasElement; - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] type Surface = Arc; #[cfg(feature = "wgpu")] type Executor = WgpuExecutor; #[cfg(not(feature = "wgpu"))] type Executor = (); - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] fn create_window(&self) -> SurfaceHandle { let wrapper = || { let document = window().expect("should have a window in this context").document().expect("window should have a document"); @@ -200,7 +213,7 @@ impl ApplicationIo for WasmApplicationIo { } // Convert key and value to JsValue - let js_key = JsValue::from_str(format!("canvas{}", id).as_str()); + let js_key = JsValue::from_str(id.to_string().as_str()); let js_value = JsValue::from(canvas.clone()); let canvases = Object::from(canvases.unwrap()); @@ -215,31 +228,35 @@ impl ApplicationIo for WasmApplicationIo { wrapper().expect("should be able to set canvas in global scope") } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] fn create_window(&self) -> SurfaceHandle { - log::trace!("Spawning window"); + todo!("winit api changed, calling create_window on EventLoop is deprecated"); - #[cfg(all(not(test), target_os = "linux", feature = "wayland"))] - use winit::platform::wayland::EventLoopBuilderExtWayland; + // log::trace!("Spawning window"); - #[cfg(all(not(test), target_os = "linux", feature = "wayland"))] - let event_loop = winit::event_loop::EventLoopBuilder::new().with_any_thread(true).build().unwrap(); - #[cfg(not(all(not(test), target_os = "linux", feature = "wayland")))] - let event_loop = winit::event_loop::EventLoop::new().unwrap(); + // #[cfg(all(not(test), target_os = "linux", feature = "wayland"))] + // use winit::platform::wayland::EventLoopBuilderExtWayland; - let window = winit::window::WindowBuilder::new() - .with_title("Graphite") - .with_inner_size(winit::dpi::PhysicalSize::new(800, 600)) - .build(&event_loop) - .unwrap(); + // #[cfg(all(not(test), target_os = "linux", feature = "wayland"))] + // let event_loop = winit::event_loop::EventLoopBuilder::new().with_any_thread(true).build().unwrap(); + // #[cfg(not(all(not(test), target_os = "linux", feature = "wayland")))] + // let event_loop = winit::event_loop::EventLoop::new().unwrap(); - SurfaceHandle { - window_id: SurfaceId(window.id().into()), - surface: Arc::new(window), - } + // let window = event_loop + // .create_window( + // winit::window::WindowAttributes::default() + // .with_title("Graphite") + // .with_inner_size(winit::dpi::PhysicalSize::new(800, 600)), + // ) + // .unwrap(); + + // SurfaceHandle { + // window_id: SurfaceId(window.id().into()), + // surface: Arc::new(window), + // } } - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] fn destroy_window(&self, surface_id: SurfaceId) { let window = window().expect("should have a window in this context"); let window = Object::from(window); @@ -249,7 +266,7 @@ impl ApplicationIo for WasmApplicationIo { let wrapper = || { if let Ok(canvases) = Reflect::get(&window, &image_canvases_key) { // Convert key and value to JsValue - let js_key = JsValue::from_str(format!("canvas{}", surface_id.0).as_str()); + let js_key = JsValue::from_str(surface_id.0.to_string().as_str()); // Use Reflect API to set property Reflect::delete_property(&canvases.into(), &js_key)?; @@ -260,7 +277,7 @@ impl ApplicationIo for WasmApplicationIo { wrapper().expect("should be able to set canvas in global scope") } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] fn destroy_window(&self, _surface_id: SurfaceId) {} #[cfg(feature = "wgpu")] @@ -329,9 +346,9 @@ impl graphene_application_io::GetEditorPreferences for EditorPreferences { impl Default for EditorPreferences { fn default() -> Self { Self { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] use_vello: false, - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] use_vello: true, } } diff --git a/node-graph/graphene-cli/Cargo.toml b/node-graph/graphene-cli/Cargo.toml index 84bf96e7cd..f897b0a8c0 100644 --- a/node-graph/graphene-cli/Cargo.toml +++ b/node-graph/graphene-cli/Cargo.toml @@ -10,8 +10,6 @@ license = "MIT OR Apache-2.0" default = ["wgpu"] wgpu = ["wgpu-executor", "gpu", "graphene-std/wgpu"] wayland = ["graphene-std/wayland"] -profiling = ["wgpu-executor/profiling"] -passthrough = ["wgpu-executor/passthrough"] gpu = ["interpreted-executor/gpu", "graphene-std/gpu", "wgpu-executor"] [dependencies] @@ -29,9 +27,7 @@ fern = { workspace = true } chrono = { workspace = true } wgpu = { workspace = true } tokio = { workspace = true, features = ["rt-multi-thread"] } - -# Required dependencies -clap = { version = "4.5.31", features = ["cargo", "derive"] } +clap = { workspace = true, features = ["cargo", "derive"] } # Optional local dependencies wgpu-executor = { path = "../wgpu-executor", optional = true } diff --git a/node-graph/graphene-cli/src/main.rs b/node-graph/graphene-cli/src/main.rs index 049878cc3b..39de026cd9 100644 --- a/node-graph/graphene-cli/src/main.rs +++ b/node-graph/graphene-cli/src/main.rs @@ -88,10 +88,7 @@ async fn main() -> Result<(), Box> { } let device = application_io.gpu_executor().unwrap().context.device.clone(); - let preferences = EditorPreferences { - use_vello: true, - ..Default::default() - }; + let preferences = EditorPreferences { use_vello: true }; let editor_api = Arc::new(WasmEditorApi { font_cache: FontCache::default(), application_io: Some(application_io.into()), @@ -104,7 +101,7 @@ async fn main() -> Result<(), Box> { match app.command { Command::Compile { print_proto, .. } => { if print_proto { - println!("{}", proto_graph); + println!("{proto_graph}"); } } Command::Run { run_loop, .. } => { @@ -120,7 +117,7 @@ async fn main() -> Result<(), Box> { loop { let result = (&executor).execute(render_config).await?; if !run_loop { - println!("{:?}", result); + println!("{result:?}"); break; } tokio::time::sleep(std::time::Duration::from_millis(16)).await; diff --git a/node-graph/graster-nodes/Cargo.toml b/node-graph/graster-nodes/Cargo.toml index 3bc97e7e9b..c0844b98b1 100644 --- a/node-graph/graster-nodes/Cargo.toml +++ b/node-graph/graster-nodes/Cargo.toml @@ -7,28 +7,45 @@ authors = ["Graphite Authors "] license = "MIT OR Apache-2.0" [features] -default = ["serde"] -serde = ["dep:serde"] +default = ["std"] +std = [ + "dep:graphene-core", + "dep:dyn-any", + "dep:image", + "dep:ndarray", + "dep:rand", + "dep:rand_chacha", + "dep:fastnoise-lite", + "dep:serde", + "dep:specta", + "dep:kurbo", + "glam/debug-glam-assert", + "glam/serde", +] [dependencies] # Local dependencies -dyn-any = { workspace = true } -graphene-core = { workspace = true } +graphene-core-shaders = { workspace = true } node-macro = { workspace = true } -# Workspace dependencies -glam = { workspace = true } -specta = { workspace = true } -image = { workspace = true } -bytemuck = { workspace = true } -ndarray = { workspace = true } -bezier-rs = { workspace = true } -rand = { workspace = true } -rand_chacha = { workspace = true } -fastnoise-lite = { workspace = true } +# Local std dependencies +dyn-any = { workspace = true, optional = true } +graphene-core = { workspace = true, optional = true } -# Optional workspace dependencies -serde = { workspace = true, optional = true, features = ["derive"] } +# Workspace dependencies +bytemuck = { workspace = true } +glam = { workspace = true } +num-traits = { workspace = true } + +# Workspace std dependencies +specta = { workspace = true, optional = true } +image = { workspace = true, optional = true } +ndarray = { workspace = true, optional = true } +rand = { workspace = true, optional = true } +rand_chacha = { workspace = true, optional = true } +fastnoise-lite = { workspace = true, optional = true } +serde = { workspace = true, optional = true } +kurbo = { workspace = true, optional = true } [dev-dependencies] tokio = { workspace = true } diff --git a/node-graph/graster-nodes/src/adjust.rs b/node-graph/graster-nodes/src/adjust.rs new file mode 100644 index 0000000000..1b95f97d41 --- /dev/null +++ b/node-graph/graster-nodes/src/adjust.rs @@ -0,0 +1,49 @@ +use graphene_core_shaders::color::Color; + +pub trait Adjust

{ + fn adjust(&mut self, map_fn: impl Fn(&P) -> P); +} +impl Adjust for Color { + fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { + *self = map_fn(self); + } +} + +#[cfg(feature = "std")] +mod adjust_std { + use super::*; + use graphene_core::gradient::GradientStops; + use graphene_core::raster_types::{CPU, Raster}; + use graphene_core::table::Table; + + impl Adjust for Table> { + fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { + for row in self.iter_mut() { + for color in row.element.data_mut().data.iter_mut() { + *color = map_fn(color); + } + } + } + } + impl Adjust for Table { + fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { + for row in self.iter_mut() { + *row.element = map_fn(row.element); + } + } + } + impl Adjust for Table { + fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { + for row in self.iter_mut() { + row.element.adjust(&map_fn); + } + } + } + impl Adjust for GradientStops { + fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { + for (_, color) in self.iter_mut() { + *color = map_fn(color); + } + } + } +} diff --git a/node-graph/graster-nodes/src/adjustments.rs b/node-graph/graster-nodes/src/adjustments.rs index eb516a723f..1274ef5fe4 100644 --- a/node-graph/graster-nodes/src/adjustments.rs +++ b/node-graph/graster-nodes/src/adjustments.rs @@ -1,18 +1,19 @@ #![allow(clippy::too_many_arguments)] -use crate::curve::CubicSplines; -use dyn_any::DynAny; -use graphene_core::Node; -use graphene_core::blending::BlendMode; -use graphene_core::color::Color; -use graphene_core::color::Pixel; -use graphene_core::context::Ctx; +use crate::adjust::Adjust; +use crate::cubic_spline::CubicSplines; +use core::fmt::Debug; +#[cfg(feature = "std")] use graphene_core::gradient::GradientStops; -use graphene_core::raster::image::Image; -use graphene_core::raster_types::{CPU, Raster, RasterDataTable}; -use graphene_core::registry::types::{Angle, Percentage, SignedPercentage}; -use std::cmp::Ordering; -use std::fmt::Debug; +#[cfg(feature = "std")] +use graphene_core::raster_types::{CPU, Raster}; +#[cfg(feature = "std")] +use graphene_core::table::Table; +use graphene_core_shaders::color::Color; +use graphene_core_shaders::context::Ctx; +use graphene_core_shaders::registry::types::{AngleF32, PercentageF32, SignedPercentageF32}; +#[cfg(not(feature = "std"))] +use num_traits::float::Float; // TODO: Implement the following: // Color Balance @@ -29,7 +30,8 @@ use std::fmt::Debug; // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27clrL%27%20%3D%20Color%20Lookup // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Color%20Lookup%20(Photoshop%20CS6 -#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, DynAny, Hash, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] #[widget(Dropdown)] pub enum LuminanceCalculation { #[default] @@ -41,12 +43,13 @@ pub enum LuminanceCalculation { MaximumChannels, } -#[node_macro::node(category("Raster: Adjustment"))] +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] fn luminance>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, @@ -65,32 +68,34 @@ fn luminance>( input } -#[node_macro::node(category("Raster"))] +#[node_macro::node(category("Raster"), shader_node(PerPixelAdjust))] fn gamma_correction>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, #[default(2.2)] #[range((0.01, 10.))] #[hard_min(0.0001)] - gamma: f64, + gamma: f32, inverse: bool, ) -> T { let exponent = if inverse { 1. / gamma } else { gamma }; - input.adjust(|color| color.gamma(exponent as f32)); + input.adjust(|color| color.gamma(exponent)); input } -#[node_macro::node(category("Raster: Channels"))] +#[node_macro::node(category("Raster: Channels"), shader_node(PerPixelAdjust))] fn extract_channel>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, @@ -108,12 +113,13 @@ fn extract_channel>( input } -#[node_macro::node(category("Raster: Channels"))] +#[node_macro::node(category("Raster: Channels"), shader_node(PerPixelAdjust))] fn make_opaque>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, @@ -122,7 +128,7 @@ fn make_opaque>( if color.a() == 0. { return color.with_alpha(1.); } - Color::from_rgbaf32(color.r() / color.a(), color.g() / color.a(), color.b() / color.a(), 1.).unwrap() + Color::from_rgbaf32_unchecked(color.r() / color.a(), color.g() / color.a(), color.b() / color.a(), 1.) }); input } @@ -133,24 +139,25 @@ fn make_opaque>( // // Some further analysis available at: // https://geraldbakker.nl/psnumbers/brightness-contrast.html -#[node_macro::node(name("Brightness/Contrast"), category("Raster: Adjustment"), properties("brightness_contrast_properties"))] +#[node_macro::node(name("Brightness/Contrast"), category("Raster: Adjustment"), properties("brightness_contrast_properties"), shader_node(PerPixelAdjust))] fn brightness_contrast>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, - GradientStops, -)] + Table>, + Table, + Table, + GradientStops, + )] mut input: T, - brightness: SignedPercentage, - contrast: SignedPercentage, + brightness: SignedPercentageF32, + contrast: SignedPercentageF32, use_classic: bool, ) -> T { if use_classic { - let brightness = brightness as f32 / 255.; + let brightness = brightness / 255.; - let contrast = contrast as f32 / 100.; - let contrast = if contrast > 0. { (contrast * std::f32::consts::FRAC_PI_2 - 0.01).tan() } else { contrast }; + let contrast = contrast / 100.; + let contrast = if contrast > 0. { (contrast * core::f32::consts::FRAC_PI_2 - 0.01).tan() } else { contrast }; let offset = brightness * contrast + brightness - contrast / 2.; @@ -166,19 +173,19 @@ fn brightness_contrast>( // We clamp the brightness before the two curve X-axis points `130 - brightness * 26` and `233 - brightness * 48` intersect. // Beyond the point of intersection, the cubic spline fitting becomes invalid and fails an assertion, which we need to avoid. // See the intersection of the red lines at x = 103/22*100 = 468.18182 in the graph: https://www.desmos.com/calculator/ekvz4zyd9c - let brightness = (brightness.abs() / 100.).min(103. / 22. - 0.00001) as f32; + let brightness = (brightness.abs() / 100.).min(103. / 22. - 0.00001); let brightness_curve_points = CubicSplines { x: [0., 130. - brightness * 26., 233. - brightness * 48., 255.].map(|x| x / 255.), y: [0., 130. + brightness * 51., 233. + brightness * 10., 255.].map(|x| x / 255.), }; let brightness_curve_solutions = brightness_curve_points.solve(); - let mut brightness_lut: [f32; WINDOW_SIZE] = std::array::from_fn(|i| { + let mut brightness_lut: [f32; WINDOW_SIZE] = core::array::from_fn(|i| { let x = i as f32 / (WINDOW_SIZE as f32 - 1.); brightness_curve_points.interpolate(x, &brightness_curve_solutions) }); // Special handling for when brightness is negative if brightness_is_negative { - brightness_lut = std::array::from_fn(|i| { + brightness_lut = core::array::from_fn(|i| { let mut x = i; while x > 1 && brightness_lut[x] > i as f32 / WINDOW_SIZE as f32 { x -= 1; @@ -191,13 +198,13 @@ fn brightness_contrast>( // Unlike with brightness, the X-axis points `64` and `192` don't intersect at any contrast value, because they are constants. // So we don't have to worry about clamping the contrast value to avoid invalid cubic spline fitting. // See the graph: https://www.desmos.com/calculator/iql9vsca56 - let contrast = contrast as f32 / 100.; + let contrast = contrast / 100.; let contrast_curve_points = CubicSplines { x: [0., 64., 192., 255.].map(|x| x / 255.), y: [0., 64. - contrast * 30., 192. + contrast * 30., 255.].map(|x| x / 255.), }; let contrast_curve_solutions = contrast_curve_points.solve(); - let contrast_lut: [f32; WINDOW_SIZE] = std::array::from_fn(|i| { + let contrast_lut: [f32; WINDOW_SIZE] = core::array::from_fn(|i| { let x = i as f32 / (WINDOW_SIZE as f32 - 1.); contrast_curve_points.interpolate(x, &contrast_curve_solutions) }); @@ -222,32 +229,33 @@ fn brightness_contrast>( // // Some further analysis available at: // https://geraldbakker.nl/psnumbers/levels.html -#[node_macro::node(category("Raster: Adjustment"))] +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] fn levels>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut image: T, - #[default(0.)] shadows: Percentage, - #[default(50.)] midtones: Percentage, - #[default(100.)] highlights: Percentage, - #[default(0.)] output_minimums: Percentage, - #[default(100.)] output_maximums: Percentage, + #[default(0.)] shadows: PercentageF32, + #[default(50.)] midtones: PercentageF32, + #[default(100.)] highlights: PercentageF32, + #[default(0.)] output_minimums: PercentageF32, + #[default(100.)] output_maximums: PercentageF32, ) -> T { image.adjust(|color| { let color = color.to_gamma_srgb(); // Input Range (Range: 0-1) - let input_shadows = (shadows / 100.) as f32; - let input_midtones = (midtones / 100.) as f32; - let input_highlights = (highlights / 100.) as f32; + let input_shadows = shadows / 100.; + let input_midtones = midtones / 100.; + let input_highlights = highlights / 100.; // Output Range (Range: 0-1) - let output_minimums = (output_minimums / 100.) as f32; - let output_maximums = (output_maximums / 100.) as f32; + let output_minimums = output_minimums / 100.; + let output_maximums = output_maximums / 100.; // Midtones interpolation factor between minimums and maximums (Range: 0-1) let midtones = output_minimums + (output_maximums - output_minimums) * input_midtones; @@ -289,44 +297,45 @@ fn levels>( // Algorithm from: // https://stackoverflow.com/a/55233732/775283 // Works the same for gamma and linear color -#[node_macro::node(name("Black & White"), category("Raster: Adjustment"))] -async fn black_and_white>( +#[node_macro::node(name("Black & White"), category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn black_and_white>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut image: T, #[default(Color::BLACK)] tint: Color, #[default(40.)] #[range((-200., 300.))] - reds: Percentage, + reds: PercentageF32, #[default(60.)] #[range((-200., 300.))] - yellows: Percentage, + yellows: PercentageF32, #[default(40.)] #[range((-200., 300.))] - greens: Percentage, + greens: PercentageF32, #[default(60.)] #[range((-200., 300.))] - cyans: Percentage, + cyans: PercentageF32, #[default(20.)] #[range((-200., 300.))] - blues: Percentage, + blues: PercentageF32, #[default(80.)] #[range((-200., 300.))] - magentas: Percentage, + magentas: PercentageF32, ) -> T { image.adjust(|color| { let color = color.to_gamma_srgb(); - let reds = reds as f32 / 100.; - let yellows = yellows as f32 / 100.; - let greens = greens as f32 / 100.; - let cyans = cyans as f32 / 100.; - let blues = blues as f32 / 100.; - let magentas = magentas as f32 / 100.; + let reds = reds / 100.; + let yellows = yellows / 100.; + let greens = greens / 100.; + let cyans = cyans / 100.; + let blues = blues / 100.; + let magentas = magentas / 100.; let gray_base = color.r().min(color.g()).min(color.b()); @@ -351,7 +360,7 @@ async fn black_and_white>( // TODO: Fix "Color" blend mode implementation so it matches the expected behavior perfectly (it's currently close) let color = tint.with_luminance(luminance); - let color = Color::from_rgbaf32(color.r(), color.g(), color.b(), alpha_part).unwrap(); + let color = Color::from_rgbaf32_unchecked(color.r(), color.g(), color.b(), alpha_part); color.to_linear_srgb() }); @@ -361,18 +370,19 @@ async fn black_and_white>( // Aims for interoperable compatibility with: // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27hue%20%27%20%3D%20Old,saturation%2C%20Photoshop%205.0 // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=0%20%3D%20Use%20other.-,Hue/Saturation,-Hue/Saturation%20settings -#[node_macro::node(name("Hue/Saturation"), category("Raster: Adjustment"))] -async fn hue_saturation>( +#[node_macro::node(name("Hue/Saturation"), category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn hue_saturation>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, - hue_shift: Angle, - saturation_shift: SignedPercentage, - lightness_shift: SignedPercentage, + hue_shift: AngleF32, + saturation_shift: SignedPercentageF32, + lightness_shift: SignedPercentageF32, ) -> T { input.adjust(|color| { let color = color.to_gamma_srgb(); @@ -380,11 +390,11 @@ async fn hue_saturation>( let [hue, saturation, lightness, alpha] = color.to_hsla(); let color = Color::from_hsla( - (hue + hue_shift as f32 / 360.) % 1., + (hue + hue_shift / 360.) % 1., // TODO: Improve the way saturation works (it's slightly off) - (saturation + saturation_shift as f32 / 100.).clamp(0., 1.), + (saturation + saturation_shift / 100.).clamp(0., 1.), // TODO: Fix the way lightness works (it's very off) - (lightness + lightness_shift as f32 / 100.).clamp(0., 1.), + (lightness + lightness_shift / 100.).clamp(0., 1.), alpha, ); @@ -395,12 +405,13 @@ async fn hue_saturation>( // Aims for interoperable compatibility with: // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27%20%3D%20Color%20Lookup-,%27nvrt%27%20%3D%20Invert,-%27post%27%20%3D%20Posterize -#[node_macro::node(category("Raster: Adjustment"))] -async fn invert>( +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn invert>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, @@ -417,22 +428,23 @@ async fn invert>( // Aims for interoperable compatibility with: // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=post%27%20%3D%20Posterize-,%27thrs%27%20%3D%20Threshold,-%27grdm%27%20%3D%20Gradient -#[node_macro::node(category("Raster: Adjustment"))] -async fn threshold>( +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn threshold>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut image: T, - #[default(50.)] min_luminance: Percentage, - #[default(100.)] max_luminance: Percentage, + #[default(50.)] min_luminance: PercentageF32, + #[default(100.)] max_luminance: PercentageF32, luminance_calc: LuminanceCalculation, ) -> T { image.adjust(|color| { - let min_luminance = Color::srgb_to_linear(min_luminance as f32 / 100.); - let max_luminance = Color::srgb_to_linear(max_luminance as f32 / 100.); + let min_luminance = Color::srgb_to_linear(min_luminance / 100.); + let max_luminance = Color::srgb_to_linear(max_luminance / 100.); let luminance = match luminance_calc { LuminanceCalculation::SRGB => color.luminance_srgb(), @@ -447,202 +459,6 @@ async fn threshold>( image } -trait Blend { - fn blend(&self, under: &Self, blend_fn: impl Fn(P, P) -> P) -> Self; -} -impl Blend for Color { - fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { - blend_fn(*self, *under) - } -} -impl Blend for Option { - fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { - match (self, under) { - (Some(a), Some(b)) => Some(blend_fn(*a, *b)), - (a, None) => *a, - (None, b) => *b, - } - } -} -impl Blend for RasterDataTable { - fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { - let mut result_table = self.clone(); - - for (over, under) in result_table.instance_mut_iter().zip(under.instance_ref_iter()) { - let data = over.instance.data.iter().zip(under.instance.data.iter()).map(|(a, b)| blend_fn(*a, *b)).collect(); - - *over.instance = Raster::new_cpu(Image { - data, - width: over.instance.width, - height: over.instance.height, - base64_string: None, - }); - } - - result_table - } -} -impl Blend for GradientStops { - fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { - let mut combined_stops = self.iter().map(|(position, _)| position).chain(under.iter().map(|(position, _)| position)).collect::>(); - combined_stops.dedup_by(|&mut a, &mut b| (a - b).abs() < 1e-6); - combined_stops.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal)); - - let stops = combined_stops - .into_iter() - .map(|&position| { - let over_color = self.evaluate(position); - let under_color = under.evaluate(position); - let color = blend_fn(over_color, under_color); - (position, color) - }) - .collect::>(); - - GradientStops::new(stops) - } -} - -#[node_macro::node(category("Raster"))] -async fn blend + Send>( - _: impl Ctx, - #[implementations( - Color, - RasterDataTable, - GradientStops, - )] - over: T, - #[expose] - #[implementations( - Color, - RasterDataTable, - GradientStops, - )] - under: T, - blend_mode: BlendMode, - #[default(100.)] opacity: Percentage, -) -> T { - over.blend(&under, |a, b| blend_colors(a, b, blend_mode, opacity / 100.)) -} - -#[node_macro::node(category(""), skip_impl)] -fn blend_color_pair(input: (Color, Color), blend_mode: &'n BlendModeNode, opacity: &'n OpacityNode) -> Color -where - BlendModeNode: Node<'n, (), Output = BlendMode> + 'n, - OpacityNode: Node<'n, (), Output = Percentage> + 'n, -{ - let blend_mode = blend_mode.eval(()); - let opacity = opacity.eval(()); - blend_colors(input.0, input.1, blend_mode, opacity / 100.) -} - -pub fn apply_blend_mode(foreground: Color, background: Color, blend_mode: BlendMode) -> Color { - match blend_mode { - // Normal group - BlendMode::Normal => background.blend_rgb(foreground, Color::blend_normal), - // Darken group - BlendMode::Darken => background.blend_rgb(foreground, Color::blend_darken), - BlendMode::Multiply => background.blend_rgb(foreground, Color::blend_multiply), - BlendMode::ColorBurn => background.blend_rgb(foreground, Color::blend_color_burn), - BlendMode::LinearBurn => background.blend_rgb(foreground, Color::blend_linear_burn), - BlendMode::DarkerColor => background.blend_darker_color(foreground), - // Lighten group - BlendMode::Lighten => background.blend_rgb(foreground, Color::blend_lighten), - BlendMode::Screen => background.blend_rgb(foreground, Color::blend_screen), - BlendMode::ColorDodge => background.blend_rgb(foreground, Color::blend_color_dodge), - BlendMode::LinearDodge => background.blend_rgb(foreground, Color::blend_linear_dodge), - BlendMode::LighterColor => background.blend_lighter_color(foreground), - // Contrast group - BlendMode::Overlay => foreground.blend_rgb(background, Color::blend_hardlight), - BlendMode::SoftLight => background.blend_rgb(foreground, Color::blend_softlight), - BlendMode::HardLight => background.blend_rgb(foreground, Color::blend_hardlight), - BlendMode::VividLight => background.blend_rgb(foreground, Color::blend_vivid_light), - BlendMode::LinearLight => background.blend_rgb(foreground, Color::blend_linear_light), - BlendMode::PinLight => background.blend_rgb(foreground, Color::blend_pin_light), - BlendMode::HardMix => background.blend_rgb(foreground, Color::blend_hard_mix), - // Inversion group - BlendMode::Difference => background.blend_rgb(foreground, Color::blend_difference), - BlendMode::Exclusion => background.blend_rgb(foreground, Color::blend_exclusion), - BlendMode::Subtract => background.blend_rgb(foreground, Color::blend_subtract), - BlendMode::Divide => background.blend_rgb(foreground, Color::blend_divide), - // Component group - BlendMode::Hue => background.blend_hue(foreground), - BlendMode::Saturation => background.blend_saturation(foreground), - BlendMode::Color => background.blend_color(foreground), - BlendMode::Luminosity => background.blend_luminosity(foreground), - // Other utility blend modes (hidden from the normal list) - do not have alpha blend - _ => panic!("Used blend mode without alpha blend"), - } -} - -trait Adjust

{ - fn adjust(&mut self, map_fn: impl Fn(&P) -> P); -} -impl Adjust for Color { - fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { - *self = map_fn(self); - } -} -impl Adjust for Option { - fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { - if let Some(v) = self { - *v = map_fn(v) - } - } -} -impl Adjust for GradientStops { - fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { - for (_pos, c) in self.iter_mut() { - *c = map_fn(c); - } - } -} -impl Adjust for RasterDataTable { - fn adjust(&mut self, map_fn: impl Fn(&Color) -> Color) { - for instance in self.instance_mut_iter() { - for c in instance.instance.data_mut().data.iter_mut() { - *c = map_fn(c); - } - } - } -} - -#[inline(always)] -pub fn blend_colors(foreground: Color, background: Color, blend_mode: BlendMode, opacity: f64) -> Color { - let target_color = match blend_mode { - // Other utility blend modes (hidden from the normal list) - do not have alpha blend - BlendMode::Erase => return background.alpha_subtract(foreground), - BlendMode::Restore => return background.alpha_add(foreground), - BlendMode::MultiplyAlpha => return background.alpha_multiply(foreground), - blend_mode => apply_blend_mode(foreground, background, blend_mode), - }; - - background.alpha_blend(target_color.to_associated_alpha(opacity as f32)) -} - -// Aims for interoperable compatibility with: -// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27grdm%27%20%3D%20Gradient%20Map -// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Gradient%20settings%20(Photoshop%206.0) -#[node_macro::node(category("Raster: Adjustment"))] -async fn gradient_map>( - _: impl Ctx, - #[implementations( - Color, - RasterDataTable, - GradientStops, - )] - mut image: T, - gradient: GradientStops, - reverse: bool, -) -> T { - image.adjust(|color| { - let intensity = color.luminance_srgb(); - let intensity = if reverse { 1. - intensity } else { intensity }; - gradient.evaluate(intensity as f64).to_linear_srgb() - }); - - image -} - // Aims for interoperable compatibility with: // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27-,vibA%27%20%3D%20Vibrance,-%27hue%20%27%20%3D%20Old // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Vibrance%20(Photoshop%20CS3) @@ -658,19 +474,20 @@ async fn gradient_map>( // It's not the same as the saturation component of Hue/Saturation/Value. Vibrance and Saturation are both separable. // When both parameters are set, it is equivalent to running this adjustment twice, with only vibrance set and then only saturation set. // (Except for some noise probably due to rounding error.) -#[node_macro::node(category("Raster: Adjustment"))] -async fn vibrance>( +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn vibrance>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut image: T, - vibrance: SignedPercentage, + vibrance: SignedPercentageF32, ) -> T { image.adjust(|color| { - let vibrance = vibrance as f32 / 100.; + let vibrance = vibrance / 100.; // Slow the effect down by half when it's negative, since artifacts begin appearing past -50%. // So this scales the 0% to -50% range to 0% to -100%. let slowed_vibrance = if vibrance >= 0. { vibrance } else { vibrance * 0.5 }; @@ -720,7 +537,8 @@ async fn vibrance>( } /// Color Channel -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] #[widget(Radio)] pub enum RedGreenBlue { #[default] @@ -730,7 +548,8 @@ pub enum RedGreenBlue { } /// Color Channel -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] #[widget(Radio)] pub enum RedGreenBlueAlpha { #[default] @@ -741,7 +560,8 @@ pub enum RedGreenBlueAlpha { } /// Style of noise pattern -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] #[widget(Dropdown)] pub enum NoiseType { #[default] @@ -756,7 +576,8 @@ pub enum NoiseType { WhiteNoise, } -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] /// Style of layered levels of the noise pattern pub enum FractalType { #[default] @@ -772,7 +593,8 @@ pub enum FractalType { } /// Distance function used by the cellular noise -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub enum CellularDistanceFunction { #[default] Euclidean, @@ -782,7 +604,8 @@ pub enum CellularDistanceFunction { Hybrid, } -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub enum CellularReturnType { CellValue, #[default] @@ -801,7 +624,8 @@ pub enum CellularReturnType { } /// Type of domain warp -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] #[widget(Dropdown)] pub enum DomainWarpType { #[default] @@ -816,12 +640,13 @@ pub enum DomainWarpType { // Aims for interoperable compatibility with: // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27mixr%27%20%3D%20Channel%20Mixer // https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Lab%20color%20only-,Channel%20Mixer,-Key%20is%20%27mixr -#[node_macro::node(category("Raster: Adjustment"), properties("channel_mixer_properties"))] -async fn channel_mixer>( +#[node_macro::node(category("Raster: Adjustment"), properties("channel_mixer_properties"), shader_node(PerPixelAdjust))] +fn channel_mixer>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut image: T, @@ -830,55 +655,55 @@ async fn channel_mixer>( #[default(40.)] #[name("Red")] - monochrome_r: f64, + monochrome_r: f32, #[default(40.)] #[name("Green")] - monochrome_g: f64, + monochrome_g: f32, #[default(20.)] #[name("Blue")] - monochrome_b: f64, + monochrome_b: f32, #[default(0.)] #[name("Constant")] - monochrome_c: f64, + monochrome_c: f32, #[default(100.)] #[name("(Red) Red")] - red_r: f64, + red_r: f32, #[default(0.)] #[name("(Red) Green")] - red_g: f64, + red_g: f32, #[default(0.)] #[name("(Red) Blue")] - red_b: f64, + red_b: f32, #[default(0.)] #[name("(Red) Constant")] - red_c: f64, + red_c: f32, #[default(0.)] #[name("(Green) Red")] - green_r: f64, + green_r: f32, #[default(100.)] #[name("(Green) Green")] - green_g: f64, + green_g: f32, #[default(0.)] #[name("(Green) Blue")] - green_b: f64, + green_b: f32, #[default(0.)] #[name("(Green) Constant")] - green_c: f64, + green_c: f32, #[default(0.)] #[name("(Blue) Red")] - blue_r: f64, + blue_r: f32, #[default(0.)] #[name("(Blue) Green")] - blue_g: f64, + blue_g: f32, #[default(100.)] #[name("(Blue) Blue")] - blue_b: f64, + blue_b: f32, #[default(0.)] #[name("(Blue) Constant")] - blue_c: f64, + blue_c: f32, // Display-only properties (not used within the node) _output_channel: RedGreenBlue, @@ -889,15 +714,15 @@ async fn channel_mixer>( let (r, g, b, a) = color.components(); let color = if monochrome { - let (monochrome_r, monochrome_g, monochrome_b, monochrome_c) = (monochrome_r as f32 / 100., monochrome_g as f32 / 100., monochrome_b as f32 / 100., monochrome_c as f32 / 100.); + let (monochrome_r, monochrome_g, monochrome_b, monochrome_c) = (monochrome_r / 100., monochrome_g / 100., monochrome_b / 100., monochrome_c / 100.); let gray = (r * monochrome_r + g * monochrome_g + b * monochrome_b + monochrome_c).clamp(0., 1.); Color::from_rgbaf32_unchecked(gray, gray, gray, a) } else { - let (red_r, red_g, red_b, red_c) = (red_r as f32 / 100., red_g as f32 / 100., red_b as f32 / 100., red_c as f32 / 100.); - let (green_r, green_g, green_b, green_c) = (green_r as f32 / 100., green_g as f32 / 100., green_b as f32 / 100., green_c as f32 / 100.); - let (blue_r, blue_g, blue_b, blue_c) = (blue_r as f32 / 100., blue_g as f32 / 100., blue_b as f32 / 100., blue_c as f32 / 100.); + let (red_r, red_g, red_b, red_c) = (red_r / 100., red_g / 100., red_b / 100., red_c / 100.); + let (green_r, green_g, green_b, green_c) = (green_r / 100., green_g / 100., green_b / 100., green_c / 100.); + let (blue_r, blue_g, blue_b, blue_c) = (blue_r / 100., blue_g / 100., blue_b / 100., blue_c / 100.); let red = (r * red_r + g * red_g + b * red_b + red_c).clamp(0., 1.); let green = (r * green_r + g * green_g + b * green_b + green_c).clamp(0., 1.); @@ -911,7 +736,8 @@ async fn channel_mixer>( image } -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] #[widget(Radio)] pub enum RelativeAbsolute { #[default] @@ -920,7 +746,8 @@ pub enum RelativeAbsolute { } #[repr(C)] -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, DynAny, node_macro::ChoiceType, specta::Type, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, node_macro::ChoiceType)] +#[cfg_attr(feature = "std", derive(dyn_any::DynAny, specta::Type, serde::Serialize, serde::Deserialize))] pub enum SelectiveColorChoice { #[default] Reds, @@ -942,62 +769,63 @@ pub enum SelectiveColorChoice { // // Algorithm based on: // https://blog.pkh.me/p/22-understanding-selective-coloring-in-adobe-photoshop.html -#[node_macro::node(category("Raster: Adjustment"), properties("selective_color_properties"))] -async fn selective_color>( +#[node_macro::node(category("Raster: Adjustment"), properties("selective_color_properties"), shader_node(PerPixelAdjust))] +fn selective_color>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut image: T, mode: RelativeAbsolute, - #[name("(Reds) Cyan")] r_c: f64, - #[name("(Reds) Magenta")] r_m: f64, - #[name("(Reds) Yellow")] r_y: f64, - #[name("(Reds) Black")] r_k: f64, + #[name("(Reds) Cyan")] r_c: f32, + #[name("(Reds) Magenta")] r_m: f32, + #[name("(Reds) Yellow")] r_y: f32, + #[name("(Reds) Black")] r_k: f32, - #[name("(Yellows) Cyan")] y_c: f64, - #[name("(Yellows) Magenta")] y_m: f64, - #[name("(Yellows) Yellow")] y_y: f64, - #[name("(Yellows) Black")] y_k: f64, + #[name("(Yellows) Cyan")] y_c: f32, + #[name("(Yellows) Magenta")] y_m: f32, + #[name("(Yellows) Yellow")] y_y: f32, + #[name("(Yellows) Black")] y_k: f32, - #[name("(Greens) Cyan")] g_c: f64, - #[name("(Greens) Magenta")] g_m: f64, - #[name("(Greens) Yellow")] g_y: f64, - #[name("(Greens) Black")] g_k: f64, + #[name("(Greens) Cyan")] g_c: f32, + #[name("(Greens) Magenta")] g_m: f32, + #[name("(Greens) Yellow")] g_y: f32, + #[name("(Greens) Black")] g_k: f32, - #[name("(Cyans) Cyan")] c_c: f64, - #[name("(Cyans) Magenta")] c_m: f64, - #[name("(Cyans) Yellow")] c_y: f64, - #[name("(Cyans) Black")] c_k: f64, + #[name("(Cyans) Cyan")] c_c: f32, + #[name("(Cyans) Magenta")] c_m: f32, + #[name("(Cyans) Yellow")] c_y: f32, + #[name("(Cyans) Black")] c_k: f32, - #[name("(Blues) Cyan")] b_c: f64, - #[name("(Blues) Magenta")] b_m: f64, - #[name("(Blues) Yellow")] b_y: f64, - #[name("(Blues) Black")] b_k: f64, + #[name("(Blues) Cyan")] b_c: f32, + #[name("(Blues) Magenta")] b_m: f32, + #[name("(Blues) Yellow")] b_y: f32, + #[name("(Blues) Black")] b_k: f32, - #[name("(Magentas) Cyan")] m_c: f64, - #[name("(Magentas) Magenta")] m_m: f64, - #[name("(Magentas) Yellow")] m_y: f64, - #[name("(Magentas) Black")] m_k: f64, + #[name("(Magentas) Cyan")] m_c: f32, + #[name("(Magentas) Magenta")] m_m: f32, + #[name("(Magentas) Yellow")] m_y: f32, + #[name("(Magentas) Black")] m_k: f32, - #[name("(Whites) Cyan")] w_c: f64, - #[name("(Whites) Magenta")] w_m: f64, - #[name("(Whites) Yellow")] w_y: f64, - #[name("(Whites) Black")] w_k: f64, + #[name("(Whites) Cyan")] w_c: f32, + #[name("(Whites) Magenta")] w_m: f32, + #[name("(Whites) Yellow")] w_y: f32, + #[name("(Whites) Black")] w_k: f32, - #[name("(Neutrals) Cyan")] n_c: f64, - #[name("(Neutrals) Magenta")] n_m: f64, - #[name("(Neutrals) Yellow")] n_y: f64, - #[name("(Neutrals) Black")] n_k: f64, + #[name("(Neutrals) Cyan")] n_c: f32, + #[name("(Neutrals) Magenta")] n_m: f32, + #[name("(Neutrals) Yellow")] n_y: f32, + #[name("(Neutrals) Black")] n_k: f32, - #[name("(Blacks) Cyan")] k_c: f64, - #[name("(Blacks) Magenta")] k_m: f64, - #[name("(Blacks) Yellow")] k_y: f64, - #[name("(Blacks) Black")] k_k: f64, + #[name("(Blacks) Cyan")] k_c: f32, + #[name("(Blacks) Magenta")] k_m: f32, + #[name("(Blacks) Yellow")] k_y: f32, + #[name("(Blacks) Black")] k_k: f32, _colors: SelectiveColorChoice, ) -> T { @@ -1035,15 +863,15 @@ async fn selective_color>( }; let (sum_r, sum_g, sum_b) = [ - (SelectiveColorChoice::Reds, (r_c as f32, r_m as f32, r_y as f32, r_k as f32)), - (SelectiveColorChoice::Yellows, (y_c as f32, y_m as f32, y_y as f32, y_k as f32)), - (SelectiveColorChoice::Greens, (g_c as f32, g_m as f32, g_y as f32, g_k as f32)), - (SelectiveColorChoice::Cyans, (c_c as f32, c_m as f32, c_y as f32, c_k as f32)), - (SelectiveColorChoice::Blues, (b_c as f32, b_m as f32, b_y as f32, b_k as f32)), - (SelectiveColorChoice::Magentas, (m_c as f32, m_m as f32, m_y as f32, m_k as f32)), - (SelectiveColorChoice::Whites, (w_c as f32, w_m as f32, w_y as f32, w_k as f32)), - (SelectiveColorChoice::Neutrals, (n_c as f32, n_m as f32, n_y as f32, n_k as f32)), - (SelectiveColorChoice::Blacks, (k_c as f32, k_m as f32, k_y as f32, k_k as f32)), + (SelectiveColorChoice::Reds, (r_c, r_m, r_y, r_k)), + (SelectiveColorChoice::Yellows, (y_c, y_m, y_y, y_k)), + (SelectiveColorChoice::Greens, (g_c, g_m, g_y, g_k)), + (SelectiveColorChoice::Cyans, (c_c, c_m, c_y, c_k)), + (SelectiveColorChoice::Blues, (b_c, b_m, b_y, b_k)), + (SelectiveColorChoice::Magentas, (m_c, m_m, m_y, m_k)), + (SelectiveColorChoice::Whites, (w_c, w_m, w_y, w_k)), + (SelectiveColorChoice::Neutrals, (n_c, n_m, n_y, n_k)), + (SelectiveColorChoice::Blacks, (k_c, k_m, k_y, k_k)), ] .into_iter() .fold((0., 0., 0.), |acc, (color_parameter_group, (c, m, y, k))| { @@ -1084,12 +912,13 @@ async fn selective_color>( // Algorithm based on: // https://www.axiomx.com/posterize.htm // This algorithm produces fully accurate output in relation to the industry standard. -#[node_macro::node(category("Raster: Adjustment"))] -async fn posterize>( +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn posterize>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, @@ -1117,108 +946,33 @@ async fn posterize>( // // Algorithm based on: // https://geraldbakker.nl/psnumbers/exposure.html -#[node_macro::node(category("Raster: Adjustment"), properties("exposure_properties"))] -async fn exposure>( +#[node_macro::node(category("Raster: Adjustment"), properties("exposure_properties"), shader_node(PerPixelAdjust))] +fn exposure>( _: impl Ctx, #[implementations( - Color, - RasterDataTable, + Table>, + Table, + Table, GradientStops, )] mut input: T, - exposure: f64, - offset: f64, + exposure: f32, + offset: f32, #[default(1.)] #[range((0.01, 10.))] #[hard_min(0.0001)] - gamma_correction: f64, + gamma_correction: f32, ) -> T { input.adjust(|color| { let adjusted = color - // Exposure - .map_rgb(|c: f32| c * 2_f32.powf(exposure as f32)) - // Offset - .map_rgb(|c: f32| c + offset as f32) - // Gamma correction - .gamma(gamma_correction as f32); + // Exposure + .map_rgb(|c: f32| c * 2_f32.powf(exposure)) + // Offset + .map_rgb(|c: f32| c + offset) + // Gamma correction + .gamma(gamma_correction); adjusted.map_rgb(|c: f32| c.clamp(0., 1.)) }); input } - -#[node_macro::node(category("Raster: Adjustment"))] -fn color_overlay>( - _: impl Ctx, - #[implementations( - Color, - RasterDataTable, - GradientStops, - )] - mut image: T, - #[default(Color::BLACK)] color: Color, - blend_mode: BlendMode, - #[default(100.)] opacity: Percentage, -) -> T { - let opacity = (opacity as f32 / 100.).clamp(0., 1.); - - image.adjust(|pixel| { - let image = pixel.map_rgb(|channel| channel * (1. - opacity)); - - // The apply blend mode function divides rgb by the alpha channel for the background. This undoes that. - let associated_pixel = Color::from_rgbaf32_unchecked(pixel.r() * pixel.a(), pixel.g() * pixel.a(), pixel.b() * pixel.a(), pixel.a()); - let overlay = apply_blend_mode(color, associated_pixel, blend_mode).map_rgb(|channel| channel * opacity); - - Color::from_rgbaf32_unchecked(image.r() + overlay.r(), image.g() + overlay.g(), image.b() + overlay.b(), pixel.a()) - }); - image -} - -// pub use index_node::IndexNode; - -// mod index_node { -// use crate::raster::{Color, Image}; -// use crate::Ctx; - -// #[node_macro::node(category(""))] -// pub fn index( -// _: impl Ctx, -// #[implementations(Vec>, Vec)] -// #[widget(ParsedWidgetOverride::Hidden)] -// input: Vec, -// index: u32, -// ) -> T { -// if (index as usize) < input.len() { -// input[index as usize].clone() -// } else { -// warn!("The number of segments is {} but the requested segment is {}!", input.len(), index); -// Default::default() -// } -// } -// } - -#[cfg(test)] -mod test { - use graphene_core::blending::BlendMode; - use graphene_core::color::Color; - use graphene_core::raster::image::Image; - use graphene_core::raster_types::{Raster, RasterDataTable}; - - #[tokio::test] - async fn color_overlay_multiply() { - let image_color = Color::from_rgbaf32_unchecked(0.7, 0.6, 0.5, 0.4); - let image = Image::new(1, 1, image_color); - - // Color { red: 0., green: 1., blue: 0., alpha: 1. } - let overlay_color = Color::GREEN; - - // 100% of the output should come from the multiplied value - let opacity = 100_f64; - - let result = super::color_overlay((), RasterDataTable::new(Raster::new_cpu(image.clone())), overlay_color, BlendMode::Multiply, opacity); - let result = result.instance_ref_iter().next().unwrap().instance; - - // The output should just be the original green and alpha channels (as we multiply them by 1 and other channels by 0) - assert_eq!(result.data[0], Color::from_rgbaf32_unchecked(0., image_color.g(), 0., image_color.a())); - } -} diff --git a/node-graph/graster-nodes/src/blending_nodes.rs b/node-graph/graster-nodes/src/blending_nodes.rs new file mode 100644 index 0000000000..6efc335fbb --- /dev/null +++ b/node-graph/graster-nodes/src/blending_nodes.rs @@ -0,0 +1,212 @@ +use crate::adjust::Adjust; +#[cfg(feature = "std")] +use graphene_core::gradient::GradientStops; +#[cfg(feature = "std")] +use graphene_core::raster_types::{CPU, Raster}; +#[cfg(feature = "std")] +use graphene_core::table::Table; +use graphene_core_shaders::Ctx; +use graphene_core_shaders::blending::BlendMode; +use graphene_core_shaders::color::{Color, Pixel}; +use graphene_core_shaders::registry::types::PercentageF32; + +pub trait Blend { + fn blend(&self, under: &Self, blend_fn: impl Fn(P, P) -> P) -> Self; +} +impl Blend for Color { + fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { + blend_fn(*self, *under) + } +} + +#[cfg(feature = "std")] +mod blend_std { + use super::*; + use core::cmp::Ordering; + use graphene_core::raster::Image; + use graphene_core::raster_types::Raster; + use graphene_core::table::Table; + + impl Blend for Table> { + fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { + let mut result_table = self.clone(); + for (over, under) in result_table.iter_mut().zip(under.iter()) { + let data = over.element.data.iter().zip(under.element.data.iter()).map(|(a, b)| blend_fn(*a, *b)).collect(); + + *over.element = Raster::new_cpu(Image { + data, + width: over.element.width, + height: over.element.height, + base64_string: None, + }); + } + result_table + } + } + impl Blend for Table { + fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { + let mut result_table = self.clone(); + for (over, under) in result_table.iter_mut().zip(under.iter()) { + *over.element = blend_fn(*over.element, *under.element); + } + result_table + } + } + impl Blend for Table { + fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { + let mut result_table = self.clone(); + for (over, under) in result_table.iter_mut().zip(under.iter()) { + *over.element = over.element.blend(under.element, &blend_fn); + } + result_table + } + } + impl Blend for GradientStops { + fn blend(&self, under: &Self, blend_fn: impl Fn(Color, Color) -> Color) -> Self { + let mut combined_stops = self.iter().map(|(position, _)| position).chain(under.iter().map(|(position, _)| position)).collect::>(); + combined_stops.dedup_by(|&mut a, &mut b| (a - b).abs() < 1e-6); + combined_stops.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal)); + let stops = combined_stops + .into_iter() + .map(|&position| { + let over_color = self.evaluate(position); + let under_color = under.evaluate(position); + let color = blend_fn(over_color, under_color); + (position, color) + }) + .collect::>(); + GradientStops::new(stops) + } + } +} + +#[inline(always)] +pub fn blend_colors(foreground: Color, background: Color, blend_mode: BlendMode, opacity: f32) -> Color { + let target_color = match blend_mode { + // Other utility blend modes (hidden from the normal list) - do not have alpha blend + BlendMode::Erase => return background.alpha_subtract(foreground), + BlendMode::Restore => return background.alpha_add(foreground), + BlendMode::MultiplyAlpha => return background.alpha_multiply(foreground), + blend_mode => apply_blend_mode(foreground, background, blend_mode), + }; + + background.alpha_blend(target_color.to_associated_alpha(opacity as f32)) +} + +pub fn apply_blend_mode(foreground: Color, background: Color, blend_mode: BlendMode) -> Color { + match blend_mode { + // Normal group + BlendMode::Normal => background.blend_rgb(foreground, Color::blend_normal), + // Darken group + BlendMode::Darken => background.blend_rgb(foreground, Color::blend_darken), + BlendMode::Multiply => background.blend_rgb(foreground, Color::blend_multiply), + BlendMode::ColorBurn => background.blend_rgb(foreground, Color::blend_color_burn), + BlendMode::LinearBurn => background.blend_rgb(foreground, Color::blend_linear_burn), + BlendMode::DarkerColor => background.blend_darker_color(foreground), + // Lighten group + BlendMode::Lighten => background.blend_rgb(foreground, Color::blend_lighten), + BlendMode::Screen => background.blend_rgb(foreground, Color::blend_screen), + BlendMode::ColorDodge => background.blend_rgb(foreground, Color::blend_color_dodge), + BlendMode::LinearDodge => background.blend_rgb(foreground, Color::blend_linear_dodge), + BlendMode::LighterColor => background.blend_lighter_color(foreground), + // Contrast group + BlendMode::Overlay => foreground.blend_rgb(background, Color::blend_hardlight), + BlendMode::SoftLight => background.blend_rgb(foreground, Color::blend_softlight), + BlendMode::HardLight => background.blend_rgb(foreground, Color::blend_hardlight), + BlendMode::VividLight => background.blend_rgb(foreground, Color::blend_vivid_light), + BlendMode::LinearLight => background.blend_rgb(foreground, Color::blend_linear_light), + BlendMode::PinLight => background.blend_rgb(foreground, Color::blend_pin_light), + BlendMode::HardMix => background.blend_rgb(foreground, Color::blend_hard_mix), + // Inversion group + BlendMode::Difference => background.blend_rgb(foreground, Color::blend_difference), + BlendMode::Exclusion => background.blend_rgb(foreground, Color::blend_exclusion), + BlendMode::Subtract => background.blend_rgb(foreground, Color::blend_subtract), + BlendMode::Divide => background.blend_rgb(foreground, Color::blend_divide), + // Component group + BlendMode::Hue => background.blend_hue(foreground), + BlendMode::Saturation => background.blend_saturation(foreground), + BlendMode::Color => background.blend_color(foreground), + BlendMode::Luminosity => background.blend_luminosity(foreground), + // Other utility blend modes (hidden from the normal list) - do not have alpha blend + _ => panic!("Used blend mode without alpha blend"), + } +} + +#[node_macro::node(category("Raster"), shader_node(PerPixelAdjust))] +fn blend + Send>( + _: impl Ctx, + #[implementations( + Table>, + Table, + Table, + GradientStops, + )] + over: T, + #[expose] + #[implementations( + Table>, + Table, + Table, + GradientStops, + )] + under: T, + blend_mode: BlendMode, + #[default(100.)] opacity: PercentageF32, +) -> T { + over.blend(&under, |a, b| blend_colors(a, b, blend_mode, opacity / 100.)) +} + +#[node_macro::node(category("Raster: Adjustment"), shader_node(PerPixelAdjust))] +fn color_overlay>( + _: impl Ctx, + #[implementations( + Table>, + Table, + Table, + GradientStops, + )] + mut image: T, + #[default(Color::BLACK)] color: Color, + blend_mode: BlendMode, + #[default(100.)] opacity: PercentageF32, +) -> T { + let opacity = (opacity as f32 / 100.).clamp(0., 1.); + + image.adjust(|pixel| { + let image = pixel.map_rgb(|channel| channel * (1. - opacity)); + + // The apply blend mode function divides rgb by the alpha channel for the background. This undoes that. + let associated_pixel = Color::from_rgbaf32_unchecked(pixel.r() * pixel.a(), pixel.g() * pixel.a(), pixel.b() * pixel.a(), pixel.a()); + let overlay = apply_blend_mode(color, associated_pixel, blend_mode).map_rgb(|channel| channel * opacity); + + Color::from_rgbaf32_unchecked(image.r() + overlay.r(), image.g() + overlay.g(), image.b() + overlay.b(), pixel.a()) + }); + image +} + +#[cfg(all(feature = "std", test))] +mod test { + use graphene_core::blending::BlendMode; + use graphene_core::color::Color; + use graphene_core::raster::image::Image; + use graphene_core::raster_types::Raster; + use graphene_core::table::Table; + + #[tokio::test] + async fn color_overlay_multiply() { + let image_color = Color::from_rgbaf32_unchecked(0.7, 0.6, 0.5, 0.4); + let image = Image::new(1, 1, image_color); + + // Color { red: 0., green: 1., blue: 0., alpha: 1. } + let overlay_color = Color::GREEN; + + // 100% of the output should come from the multiplied value + let opacity = 100.; + + let result = super::color_overlay((), Table::new_from_element(Raster::new_cpu(image.clone())), overlay_color, BlendMode::Multiply, opacity); + let result = result.iter().next().unwrap().element; + + // The output should just be the original green and alpha channels (as we multiply them by 1 and other channels by 0) + assert_eq!(result.data[0], Color::from_rgbaf32_unchecked(0., image_color.g(), 0., image_color.a())); + } +} diff --git a/node-graph/graster-nodes/src/cubic_spline.rs b/node-graph/graster-nodes/src/cubic_spline.rs new file mode 100644 index 0000000000..f57f699beb --- /dev/null +++ b/node-graph/graster-nodes/src/cubic_spline.rs @@ -0,0 +1,123 @@ +#[derive(Debug)] +pub struct CubicSplines { + pub x: [f32; 4], + pub y: [f32; 4], +} + +impl CubicSplines { + pub fn solve(&self) -> [f32; 4] { + let (x, y) = (&self.x, &self.y); + + // Build an augmented matrix to solve the system of equations using Gaussian elimination + let mut augmented_matrix = [ + [ + 2. / (x[1] - x[0]), + 1. / (x[1] - x[0]), + 0., + 0., + // | + 3. * (y[1] - y[0]) / ((x[1] - x[0]) * (x[1] - x[0])), + ], + [ + 1. / (x[1] - x[0]), + 2. * (1. / (x[1] - x[0]) + 1. / (x[2] - x[1])), + 1. / (x[2] - x[1]), + 0., + // | + 3. * ((y[1] - y[0]) / ((x[1] - x[0]) * (x[1] - x[0])) + (y[2] - y[1]) / ((x[2] - x[1]) * (x[2] - x[1]))), + ], + [ + 0., + 1. / (x[2] - x[1]), + 2. * (1. / (x[2] - x[1]) + 1. / (x[3] - x[2])), + 1. / (x[3] - x[2]), + // | + 3. * ((y[2] - y[1]) / ((x[2] - x[1]) * (x[2] - x[1])) + (y[3] - y[2]) / ((x[3] - x[2]) * (x[3] - x[2]))), + ], + [ + 0., + 0., + 1. / (x[3] - x[2]), + 2. / (x[3] - x[2]), + // | + 3. * (y[3] - y[2]) / ((x[3] - x[2]) * (x[3] - x[2])), + ], + ]; + + // Gaussian elimination: forward elimination + for row in 0..4 { + let pivot_row_index = (row..4) + .max_by(|&a_row, &b_row| { + augmented_matrix[a_row][row] + .abs() + .partial_cmp(&augmented_matrix[b_row][row].abs()) + .unwrap_or(core::cmp::Ordering::Equal) + }) + .unwrap(); + + // Swap the current row with the row that has the largest pivot element + augmented_matrix.swap(row, pivot_row_index); + + // Eliminate the current column in all rows below the current one + for row_below_current in row + 1..4 { + assert!(augmented_matrix[row][row].abs() > f32::EPSILON); + + let scale_factor = augmented_matrix[row_below_current][row] / augmented_matrix[row][row]; + for col in row..5 { + augmented_matrix[row_below_current][col] -= augmented_matrix[row][col] * scale_factor + } + } + } + + // Gaussian elimination: back substitution + let mut solutions = [0.; 4]; + for col in (0..4).rev() { + assert!(augmented_matrix[col][col].abs() > f32::EPSILON); + + solutions[col] = augmented_matrix[col][4] / augmented_matrix[col][col]; + + for row in (0..col).rev() { + augmented_matrix[row][4] -= augmented_matrix[row][col] * solutions[col]; + augmented_matrix[row][col] = 0.; + } + } + + solutions + } + + pub fn interpolate(&self, input: f32, solutions: &[f32]) -> f32 { + if input <= self.x[0] { + return self.y[0]; + } + if input >= self.x[self.x.len() - 1] { + return self.y[self.x.len() - 1]; + } + + // Find the segment that the input falls between + let mut segment = 1; + while self.x[segment] < input { + segment += 1; + } + let segment_start = segment - 1; + let segment_end = segment; + + // Calculate the output value using quadratic interpolation + let input_value = self.x[segment_start]; + let input_value_prev = self.x[segment_end]; + let output_value = self.y[segment_start]; + let output_value_prev = self.y[segment_end]; + let solutions_value = solutions[segment_start]; + let solutions_value_prev = solutions[segment_end]; + + let output_delta = solutions_value_prev * (input_value - input_value_prev) - (output_value - output_value_prev); + let solution_delta = (output_value - output_value_prev) - solutions_value * (input_value - input_value_prev); + + let input_ratio = (input - input_value_prev) / (input_value - input_value_prev); + let prev_output_ratio = (1. - input_ratio) * output_value_prev; + let output_ratio = input_ratio * output_value; + let quadratic_ratio = input_ratio * (1. - input_ratio) * (output_delta * (1. - input_ratio) + solution_delta * input_ratio); + + let result = prev_output_ratio + output_ratio + quadratic_ratio; + result.clamp(0., 1.) + } +} diff --git a/node-graph/graster-nodes/src/curve.rs b/node-graph/graster-nodes/src/curve.rs index 188ef4a5fc..aa84d9ec5c 100644 --- a/node-graph/graster-nodes/src/curve.rs +++ b/node-graph/graster-nodes/src/curve.rs @@ -45,125 +45,6 @@ impl Hash for CurveManipulatorGroup { } } -#[derive(Debug)] -pub struct CubicSplines { - pub x: [f32; 4], - pub y: [f32; 4], -} - -impl CubicSplines { - pub fn solve(&self) -> [f32; 4] { - let (x, y) = (&self.x, &self.y); - - // Build an augmented matrix to solve the system of equations using Gaussian elimination - let mut augmented_matrix = [ - [ - 2. / (x[1] - x[0]), - 1. / (x[1] - x[0]), - 0., - 0., - // | - 3. * (y[1] - y[0]) / ((x[1] - x[0]) * (x[1] - x[0])), - ], - [ - 1. / (x[1] - x[0]), - 2. * (1. / (x[1] - x[0]) + 1. / (x[2] - x[1])), - 1. / (x[2] - x[1]), - 0., - // | - 3. * ((y[1] - y[0]) / ((x[1] - x[0]) * (x[1] - x[0])) + (y[2] - y[1]) / ((x[2] - x[1]) * (x[2] - x[1]))), - ], - [ - 0., - 1. / (x[2] - x[1]), - 2. * (1. / (x[2] - x[1]) + 1. / (x[3] - x[2])), - 1. / (x[3] - x[2]), - // | - 3. * ((y[2] - y[1]) / ((x[2] - x[1]) * (x[2] - x[1])) + (y[3] - y[2]) / ((x[3] - x[2]) * (x[3] - x[2]))), - ], - [ - 0., - 0., - 1. / (x[3] - x[2]), - 2. / (x[3] - x[2]), - // | - 3. * (y[3] - y[2]) / ((x[3] - x[2]) * (x[3] - x[2])), - ], - ]; - - // Gaussian elimination: forward elimination - for row in 0..4 { - let pivot_row_index = (row..4) - .max_by(|&a_row, &b_row| augmented_matrix[a_row][row].abs().partial_cmp(&augmented_matrix[b_row][row].abs()).unwrap_or(std::cmp::Ordering::Equal)) - .unwrap(); - - // Swap the current row with the row that has the largest pivot element - augmented_matrix.swap(row, pivot_row_index); - - // Eliminate the current column in all rows below the current one - for row_below_current in row + 1..4 { - assert!(augmented_matrix[row][row].abs() > f32::EPSILON); - - let scale_factor = augmented_matrix[row_below_current][row] / augmented_matrix[row][row]; - for col in row..5 { - augmented_matrix[row_below_current][col] -= augmented_matrix[row][col] * scale_factor - } - } - } - - // Gaussian elimination: back substitution - let mut solutions = [0.; 4]; - for col in (0..4).rev() { - assert!(augmented_matrix[col][col].abs() > f32::EPSILON); - - solutions[col] = augmented_matrix[col][4] / augmented_matrix[col][col]; - - for row in (0..col).rev() { - augmented_matrix[row][4] -= augmented_matrix[row][col] * solutions[col]; - augmented_matrix[row][col] = 0.; - } - } - - solutions - } - - pub fn interpolate(&self, input: f32, solutions: &[f32]) -> f32 { - if input <= self.x[0] { - return self.y[0]; - } - if input >= self.x[self.x.len() - 1] { - return self.y[self.x.len() - 1]; - } - - // Find the segment that the input falls between - let mut segment = 1; - while self.x[segment] < input { - segment += 1; - } - let segment_start = segment - 1; - let segment_end = segment; - - // Calculate the output value using quadratic interpolation - let input_value = self.x[segment_start]; - let input_value_prev = self.x[segment_end]; - let output_value = self.y[segment_start]; - let output_value_prev = self.y[segment_end]; - let solutions_value = solutions[segment_start]; - let solutions_value_prev = solutions[segment_end]; - - let output_delta = solutions_value_prev * (input_value - input_value_prev) - (output_value - output_value_prev); - let solution_delta = (output_value - output_value_prev) - solutions_value * (input_value - input_value_prev); - - let input_ratio = (input - input_value_prev) / (input_value - input_value_prev); - let prev_output_ratio = (1. - input_ratio) * output_value_prev; - let output_ratio = input_ratio * output_value; - let quadratic_ratio = input_ratio * (1. - input_ratio) * (output_delta * (1. - input_ratio) + solution_delta * input_ratio); - - let result = prev_output_ratio + output_ratio + quadratic_ratio; - result.clamp(0., 1.) - } -} - pub struct ValueMapperNode { lut: Vec, } diff --git a/node-graph/graster-nodes/src/dehaze.rs b/node-graph/graster-nodes/src/dehaze.rs index 6c6246b964..2e2eaffa13 100644 --- a/node-graph/graster-nodes/src/dehaze.rs +++ b/node-graph/graster-nodes/src/dehaze.rs @@ -1,17 +1,18 @@ use graphene_core::context::Ctx; use graphene_core::raster::image::Image; -use graphene_core::raster_types::{CPU, Raster, RasterDataTable}; +use graphene_core::raster_types::{CPU, Raster}; use graphene_core::registry::types::Percentage; +use graphene_core::table::Table; use image::{DynamicImage, GenericImage, GenericImageView, GrayImage, ImageBuffer, Luma, Rgba, RgbaImage}; use ndarray::{Array2, ArrayBase, Dim, OwnedRepr}; use std::cmp::{max, min}; #[node_macro::node(category("Raster: Filter"))] -async fn dehaze(_: impl Ctx, image_frame: RasterDataTable, strength: Percentage) -> RasterDataTable { +async fn dehaze(_: impl Ctx, image_frame: Table>, strength: Percentage) -> Table> { image_frame - .instance_iter() - .map(|mut image_frame_instance| { - let image = image_frame_instance.instance; + .into_iter() + .map(|mut row| { + let image = row.element; // Prepare the image data for processing let image_data = bytemuck::cast_vec(image.data.clone()); let image_buffer = image::Rgba32FImage::from_raw(image.width, image.height, image_data).expect("Failed to convert internal image format into image-rs data type."); @@ -30,9 +31,8 @@ async fn dehaze(_: impl Ctx, image_frame: RasterDataTable, strength: Percen base64_string: None, }; - image_frame_instance.instance = Raster::new_cpu(dehazed_image); - image_frame_instance.source_node_id = None; - image_frame_instance + row.element = Raster::new_cpu(dehazed_image); + row }) .collect() } diff --git a/node-graph/graster-nodes/src/filter.rs b/node-graph/graster-nodes/src/filter.rs index b5c4bbf9b4..6274b9abf6 100644 --- a/node-graph/graster-nodes/src/filter.rs +++ b/node-graph/graster-nodes/src/filter.rs @@ -2,15 +2,16 @@ use graphene_core::color::Color; use graphene_core::context::Ctx; use graphene_core::raster::image::Image; use graphene_core::raster::{Bitmap, BitmapMut}; -use graphene_core::raster_types::{CPU, Raster, RasterDataTable}; +use graphene_core::raster_types::{CPU, Raster}; use graphene_core::registry::types::PixelLength; +use graphene_core::table::Table; /// Blurs the image with a Gaussian or blur kernel filter. #[node_macro::node(category("Raster: Filter"))] async fn blur( _: impl Ctx, /// The image to be blurred. - image_frame: RasterDataTable, + image_frame: Table>, /// The radius of the blur kernel. #[range((0., 100.))] #[hard_min(0.)] @@ -19,11 +20,11 @@ async fn blur( box_blur: bool, /// Opt to incorrectly apply the filter with color calculations in gamma space for compatibility with the results from other software. gamma: bool, -) -> RasterDataTable { +) -> Table> { image_frame - .instance_iter() - .map(|mut image_instance| { - let image = image_instance.instance.clone(); + .into_iter() + .map(|mut row| { + let image = row.element.clone(); // Run blur algorithm let blurred_image = if radius < 0.1 { @@ -35,9 +36,8 @@ async fn blur( Raster::new_cpu(gaussian_blur_algorithm(image.into_data(), radius, gamma)) }; - image_instance.instance = blurred_image; - image_instance.source_node_id = None; - image_instance + row.element = blurred_image; + row }) .collect() } diff --git a/node-graph/graster-nodes/src/generate_curves.rs b/node-graph/graster-nodes/src/generate_curves.rs index b08c6ba5fb..d4ded79983 100644 --- a/node-graph/graster-nodes/src/generate_curves.rs +++ b/node-graph/graster-nodes/src/generate_curves.rs @@ -1,9 +1,8 @@ -//! requires bezier-rs - use crate::curve::{Curve, CurveManipulatorGroup, ValueMapperNode}; -use bezier_rs::{Bezier, TValue}; use graphene_core::color::{Channel, Linear}; use graphene_core::context::Ctx; +use graphene_core::vector::algorithms::bezpath_algorithms::pathseg_find_tvalues_for_x; +use kurbo::{CubicBez, ParamCurve, PathSeg, Point}; const WINDOW_SIZE: usize = 1024; @@ -18,7 +17,7 @@ fn generate_curves(_: impl Ctx, curve: Curve, #[implementat for sample in curve.manipulator_groups.iter().chain(std::iter::once(&end)) { let [x0, y0, x1, y1, x2, y2, x3, y3] = [pos[0], pos[1], param[0], param[1], sample.handles[0][0], sample.handles[0][1], sample.anchor[0], sample.anchor[1]].map(f64::from); - let bezier = Bezier::from_cubic_coordinates(x0, y0, x1, y1, x2, y2, x3, y3); + let segment = PathSeg::Cubic(CubicBez::new(Point::new(x0, y0), Point::new(x1, y1), Point::new(x2, y2), Point::new(x3, y3))); let [left, right] = [pos[0], sample.anchor[0]].map(|c| c.clamp(0., 1.)); let lut_index_left: usize = (left * (lut.len() - 1) as f32).floor() as _; @@ -30,10 +29,10 @@ fn generate_curves(_: impl Ctx, curve: Curve, #[implementat } else if x >= x3 { y3 } else { - bezier.find_tvalues_for_x(x) + pathseg_find_tvalues_for_x(segment, x) .next() - .map(|t| bezier.evaluate(TValue::Parametric(t.clamp(0., 1.))).y) - // Fall back to a very bad approximation if Bezier-rs fails + .map(|t| segment.eval(t.clamp(0., 1.)).y) + // Fall back to a very bad approximation if the above fails .unwrap_or_else(|| (x - x0) / (x3 - x0) * (y3 - y0) + y0) }; lut[index] = C::from_f64(y); diff --git a/node-graph/graster-nodes/src/gradient_map.rs b/node-graph/graster-nodes/src/gradient_map.rs new file mode 100644 index 0000000000..82082d984a --- /dev/null +++ b/node-graph/graster-nodes/src/gradient_map.rs @@ -0,0 +1,32 @@ +//! Not immediately shader compatible due to needing [`GradientStops`] as a param, which needs [`Vec`] + +use crate::adjust::Adjust; +use graphene_core::gradient::GradientStops; +use graphene_core::raster_types::{CPU, Raster}; +use graphene_core::table::Table; +use graphene_core::{Color, Ctx}; + +// Aims for interoperable compatibility with: +// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=%27grdm%27%20%3D%20Gradient%20Map +// https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#:~:text=Gradient%20settings%20(Photoshop%206.0) +#[node_macro::node(category("Raster: Adjustment"))] +async fn gradient_map>( + _: impl Ctx, + #[implementations( + Table>, + Table, + Table, + GradientStops, + )] + mut image: T, + gradient: GradientStops, + reverse: bool, +) -> T { + image.adjust(|color| { + let intensity = color.luminance_srgb(); + let intensity = if reverse { 1. - intensity } else { intensity }; + gradient.evaluate(intensity as f64).to_linear_srgb() + }); + + image +} diff --git a/node-graph/graster-nodes/src/image_color_palette.rs b/node-graph/graster-nodes/src/image_color_palette.rs index 6163c88bb4..c5f0415d76 100644 --- a/node-graph/graster-nodes/src/image_color_palette.rs +++ b/node-graph/graster-nodes/src/image_color_palette.rs @@ -1,24 +1,25 @@ use graphene_core::color::Color; use graphene_core::context::Ctx; -use graphene_core::raster_types::{CPU, RasterDataTable}; +use graphene_core::raster_types::{CPU, Raster}; +use graphene_core::table::{Table, TableRow}; #[node_macro::node(category("Color"))] async fn image_color_palette( _: impl Ctx, - image: RasterDataTable, + image: Table>, #[hard_min(1.)] #[soft_max(28.)] max_size: u32, -) -> Vec { +) -> Table { const GRID: f32 = 3.; let bins = GRID * GRID * GRID; - let mut histogram: Vec = vec![0; (bins + 1.) as usize]; - let mut colors: Vec> = vec![vec![]; (bins + 1.) as usize]; + let mut histogram = vec![0; (bins + 1.) as usize]; + let mut color_bins = vec![Vec::new(); (bins + 1.) as usize]; - for image_instance in image.instance_ref_iter() { - for pixel in image_instance.instance.data.iter() { + for row in image.iter() { + for pixel in row.element.data.iter() { let r = pixel.r() * GRID; let g = pixel.g() * GRID; let b = pixel.b() * GRID; @@ -26,53 +27,51 @@ async fn image_color_palette( let bin = (r * GRID + g * GRID + b * GRID) as usize; histogram[bin] += 1; - colors[bin].push(pixel.to_gamma_srgb()); + color_bins[bin].push(pixel.to_gamma_srgb()); } } let shorted = histogram.iter().enumerate().filter(|&(_, &count)| count > 0).map(|(i, _)| i).collect::>(); - let mut palette = vec![]; + shorted + .iter() + .take(max_size as usize) + .flat_map(|&i| { + let list = &color_bins[i]; - for i in shorted.iter().take(max_size as usize) { - let list = colors[*i].clone(); + let mut r = 0.; + let mut g = 0.; + let mut b = 0.; + let mut a = 0.; - let mut r = 0.; - let mut g = 0.; - let mut b = 0.; - let mut a = 0.; + for color in list.iter() { + r += color.r(); + g += color.g(); + b += color.b(); + a += color.a(); + } - for color in list.iter() { - r += color.r(); - g += color.g(); - b += color.b(); - a += color.a(); - } + r /= list.len() as f32; + g /= list.len() as f32; + b /= list.len() as f32; + a /= list.len() as f32; - r /= list.len() as f32; - g /= list.len() as f32; - b /= list.len() as f32; - a /= list.len() as f32; - - let color = Color::from_rgbaf32(r, g, b, a).unwrap(); - - palette.push(color); - } - - palette + Color::from_rgbaf32(r, g, b, a).map(TableRow::new_from_element).into_iter() + }) + .collect() } #[cfg(test)] mod test { use super::*; use graphene_core::raster::image::Image; - use graphene_core::raster_types::{Raster, RasterDataTable}; + use graphene_core::raster_types::Raster; #[test] fn test_image_color_palette() { let result = image_color_palette( (), - RasterDataTable::new(Raster::new_cpu(Image { + Table::new_from_element(Raster::new_cpu(Image { width: 100, height: 100, data: vec![Color::from_rgbaf32(0., 0., 0., 1.).unwrap(); 10000], @@ -80,6 +79,6 @@ mod test { })), 1, ); - assert_eq!(futures::executor::block_on(result), [Color::from_rgbaf32(0., 0., 0., 1.).unwrap()]); + assert_eq!(futures::executor::block_on(result), Table::new_from_element(Color::from_rgbaf32(0., 0., 0., 1.).unwrap())); } } diff --git a/node-graph/graster-nodes/src/lib.rs b/node-graph/graster-nodes/src/lib.rs index 938923db77..8dc169cea6 100644 --- a/node-graph/graster-nodes/src/lib.rs +++ b/node-graph/graster-nodes/src/lib.rs @@ -1,7 +1,21 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +pub mod adjust; pub mod adjustments; +pub mod blending_nodes; +pub mod cubic_spline; + +#[cfg(feature = "std")] pub mod curve; +#[cfg(feature = "std")] pub mod dehaze; +#[cfg(feature = "std")] pub mod filter; +#[cfg(feature = "std")] pub mod generate_curves; +#[cfg(feature = "std")] +pub mod gradient_map; +#[cfg(feature = "std")] pub mod image_color_palette; +#[cfg(feature = "std")] pub mod std_nodes; diff --git a/node-graph/graster-nodes/src/std_nodes.rs b/node-graph/graster-nodes/src/std_nodes.rs index 969a8bc969..03535a8f6f 100644 --- a/node-graph/graster-nodes/src/std_nodes.rs +++ b/node-graph/graster-nodes/src/std_nodes.rs @@ -4,17 +4,16 @@ use fastnoise_lite; use glam::{DAffine2, DVec2, Vec2}; use graphene_core::blending::AlphaBlending; use graphene_core::color::Color; -use graphene_core::color::{Alpha, AlphaMut, Channel, LinearChannel, Luminance, RGBMut}; +use graphene_core::color::{AlphaMut, Channel, LinearChannel, Luminance, RGBMut}; use graphene_core::context::{Ctx, ExtractFootprint}; -use graphene_core::instances::Instance; -use graphene_core::instances::Instances; use graphene_core::math::bbox::Bbox; use graphene_core::raster::image::Image; use graphene_core::raster::{Bitmap, BitmapMut}; -use graphene_core::raster_types::{CPU, Raster, RasterDataTable}; +use graphene_core::raster_types::{CPU, Raster}; +use graphene_core::table::{Table, TableRow}; use graphene_core::transform::Transform; -use graphene_core::vector::VectorDataTable; -use graphene_core::{GraphicElement, GraphicGroupTable}; +use graphene_core::vector::Vector; +use graphene_core::Graphic; use rand::prelude::*; use rand_chacha::ChaCha8Rng; use std::fmt::Debug; @@ -33,12 +32,12 @@ impl From for Error { } #[node_macro::node(category("Debug: Raster"))] -pub fn sample_image(ctx: impl ExtractFootprint + Clone + Send, image_frame: RasterDataTable) -> RasterDataTable { +pub fn sample_image(ctx: impl ExtractFootprint + Clone + Send, image_frame: Table>) -> Table> { image_frame - .instance_iter() - .filter_map(|mut image_frame_instance| { - let image_frame_transform = image_frame_instance.transform; - let image = image_frame_instance.instance; + .into_iter() + .filter_map(|mut row| { + let image_frame_transform = row.transform; + let image = row.element; // Resize the image using the image crate let data = bytemuck::cast_vec(image.data.clone()); @@ -90,10 +89,9 @@ pub fn sample_image(ctx: impl ExtractFootprint + Clone + Send, image_frame: Rast let new_transform = image_frame_transform * DAffine2::from_translation(offset) * DAffine2::from_scale(size); - image_frame_instance.transform = new_transform; - image_frame_instance.source_node_id = None; - image_frame_instance.instance = Raster::new_cpu(image); - Some(image_frame_instance) + row.transform = new_transform; + row.element = Raster::new_cpu(image); + Some(row) }) .collect() } @@ -102,38 +100,39 @@ pub fn sample_image(ctx: impl ExtractFootprint + Clone + Send, image_frame: Rast pub fn combine_channels( _: impl Ctx, _primary: (), - #[expose] red: RasterDataTable, - #[expose] green: RasterDataTable, - #[expose] blue: RasterDataTable, - #[expose] alpha: RasterDataTable, -) -> RasterDataTable { + #[expose] red: Table>, + #[expose] green: Table>, + #[expose] blue: Table>, + #[expose] alpha: Table>, +) -> Table> { let max_len = red.len().max(green.len()).max(blue.len()).max(alpha.len()); - let red = red.instance_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); - let green = green.instance_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); - let blue = blue.instance_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); - let alpha = alpha.instance_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); + let red = red.into_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); + let green = green.into_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); + let blue = blue.into_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); + let alpha = alpha.into_iter().map(Some).chain(std::iter::repeat(None)).take(max_len); red.zip(green) .zip(blue) .zip(alpha) .filter_map(|(((red, green), blue), alpha)| { - // Turn any default zero-sized image instances into None - let red = red.filter(|i| i.instance.width > 0 && i.instance.height > 0); - let green = green.filter(|i| i.instance.width > 0 && i.instance.height > 0); - let blue = blue.filter(|i| i.instance.width > 0 && i.instance.height > 0); - let alpha = alpha.filter(|i| i.instance.width > 0 && i.instance.height > 0); + // Turn any default zero-sized image rows into None + let red = red.filter(|i| i.element.width > 0 && i.element.height > 0); + let green = green.filter(|i| i.element.width > 0 && i.element.height > 0); + let blue = blue.filter(|i| i.element.width > 0 && i.element.height > 0); + let alpha = alpha.filter(|i| i.element.width > 0 && i.element.height > 0); - // Get this instance's transform and alpha blending mode from the first non-empty channel - let Some((transform, alpha_blending)) = [&red, &green, &blue, &alpha].iter().find_map(|i| i.as_ref()).map(|i| (i.transform, i.alpha_blending)) else { - return None; - }; + // Get this row's transform and alpha blending mode from the first non-empty channel + let (transform, alpha_blending, source_node_id) = [&red, &green, &blue, &alpha] + .iter() + .find_map(|i| i.as_ref()) + .map(|i| (i.transform, i.alpha_blending, i.source_node_id))?; // Get the common width and height of the channels, which must have equal dimensions let channel_dimensions = [ - red.as_ref().map(|r| (r.instance.width, r.instance.height)), - green.as_ref().map(|g| (g.instance.width, g.instance.height)), - blue.as_ref().map(|b| (b.instance.width, b.instance.height)), - alpha.as_ref().map(|a| (a.instance.width, a.instance.height)), + red.as_ref().map(|r| (r.element.width, r.element.height)), + green.as_ref().map(|g| (g.element.width, g.element.height)), + blue.as_ref().map(|b| (b.element.width, b.element.height)), + alpha.as_ref().map(|a| (a.element.width, a.element.height)), ]; if channel_dimensions.iter().all(Option::is_none) || channel_dimensions @@ -143,11 +142,9 @@ pub fn combine_channels( { return None; } - let Some(&(width, height)) = channel_dimensions.iter().flatten().next() else { - return None; - }; + let &(width, height) = channel_dimensions.iter().flatten().next()?; - // Create a new image for this instance output + // Create a new image for the output element let mut image = Image::new(width, height, Color::TRANSPARENT); // Iterate over all pixels in the image and set the color channels @@ -155,22 +152,22 @@ pub fn combine_channels( for x in 0..image.width() { let image_pixel = image.get_pixel_mut(x, y).unwrap(); - if let Some(r) = red.as_ref().and_then(|r| r.instance.get_pixel(x, y)) { + if let Some(r) = red.as_ref().and_then(|r| r.element.get_pixel(x, y)) { image_pixel.set_red(r.l().cast_linear_channel()); } else { image_pixel.set_red(Channel::from_linear(0.)); } - if let Some(g) = green.as_ref().and_then(|g| g.instance.get_pixel(x, y)) { + if let Some(g) = green.as_ref().and_then(|g| g.element.get_pixel(x, y)) { image_pixel.set_green(g.l().cast_linear_channel()); } else { image_pixel.set_green(Channel::from_linear(0.)); } - if let Some(b) = blue.as_ref().and_then(|b| b.instance.get_pixel(x, y)) { + if let Some(b) = blue.as_ref().and_then(|b| b.element.get_pixel(x, y)) { image_pixel.set_blue(b.l().cast_linear_channel()); } else { image_pixel.set_blue(Channel::from_linear(0.)); } - if let Some(a) = alpha.as_ref().and_then(|a| a.instance.get_pixel(x, y)) { + if let Some(a) = alpha.as_ref().and_then(|a| a.element.get_pixel(x, y)) { image_pixel.set_alpha(a.l().cast_linear_channel()); } else { image_pixel.set_alpha(Channel::from_linear(1.)); @@ -178,12 +175,12 @@ pub fn combine_channels( } } - Some(Instance { - instance: Raster::new_cpu(image), + Some(TableRow { + element: Raster::new_cpu(image), mask: None, transform, alpha_blending, - source_node_id: None, + source_node_id, }) }) .collect() @@ -194,102 +191,62 @@ pub fn mask( _: impl Ctx, /// The image to be masked. #[implementations( - VectorDataTable, - VectorDataTable, - VectorDataTable, - RasterDataTable, - RasterDataTable, - RasterDataTable, - GraphicGroupTable, - GraphicGroupTable, - GraphicGroupTable + Table, + Table, + Table>, + Table, + Table, + Table>, + Table, + Table, + Table>, )] - mut image: Instances, - /// The stencil to be used for masking. + mut image: Table, + #[expose] #[implementations( - VectorDataTable, - RasterDataTable, - GraphicGroupTable, - VectorDataTable, - RasterDataTable, - GraphicGroupTable, - VectorDataTable, - RasterDataTable, - GraphicGroupTable + Table, + Table, + Table, + Table, + Table, + Table, + Table>, + Table>, + Table>, )] - stencil: Instances, -) -> Instances + stencil: Table, +) -> Table where - Instances: Into + Clone, + Table: Into + Clone, { - for instance in image.instance_mut_iter() { + for instance in image.iter_mut() { *instance.mask = Some(stencil.clone().into()); } image } // TODO: Use as in-place raster modifier -fn _mask_lambda(image: RasterDataTable, stencil: RasterDataTable) -> RasterDataTable { - // TODO: Support multiple stencil instances - let Some(stencil_instance) = stencil.instance_iter().next() else { - // No stencil provided so we return the original image - return image; - }; - let stencil_size = DVec2::new(stencil_instance.instance.width as f64, stencil_instance.instance.height as f64); - - image - .instance_iter() - .filter_map(|mut image_instance| { - let image_size = DVec2::new(image_instance.instance.width as f64, image_instance.instance.height as f64); - let mask_size = stencil_instance.transform.decompose_scale(); - - if mask_size == DVec2::ZERO { - return None; - } - - // Transforms a point from the background image to the foreground image - let bg_to_fg = image_instance.transform * DAffine2::from_scale(1. / image_size); - let stencil_transform_inverse = stencil_instance.transform.inverse(); - - for y in 0..image_instance.instance.height { - for x in 0..image_instance.instance.width { - let image_point = DVec2::new(x as f64, y as f64); - let mask_point = bg_to_fg.transform_point2(image_point); - let local_mask_point = stencil_transform_inverse.transform_point2(mask_point); - let mask_point = stencil_instance.transform.transform_point2(local_mask_point.clamp(DVec2::ZERO, DVec2::ONE)); - let mask_point = (DAffine2::from_scale(stencil_size) * stencil_instance.transform.inverse()).transform_point2(mask_point); - - let image_pixel = image_instance.instance.data_mut().get_pixel_mut(x, y).unwrap(); - let mask_pixel = stencil_instance.instance.sample(mask_point); - *image_pixel = image_pixel.multiplied_alpha(mask_pixel.l().cast_linear_channel()); - } - } - - Some(image_instance) - }) - .collect() -} #[node_macro::node(category(""))] -pub fn extend_image_to_bounds(_: impl Ctx, image: RasterDataTable, bounds: DAffine2) -> RasterDataTable { +pub fn extend_image_to_bounds(_: impl Ctx, image: Table>, bounds: DAffine2) -> Table> { image - .instance_iter() - .map(|mut image_instance| { - let image_aabb = Bbox::unit().affine_transform(image_instance.transform).to_axis_aligned_bbox(); + .into_iter() + .map(|mut row| { + let image_aabb = Bbox::unit().affine_transform(row.transform).to_axis_aligned_bbox(); let bounds_aabb = Bbox::unit().affine_transform(bounds.transform()).to_axis_aligned_bbox(); if image_aabb.contains(bounds_aabb.start) && image_aabb.contains(bounds_aabb.end) { - return image_instance; + return row; } - let image_data = &image_instance.instance.data; - let (image_width, image_height) = (image_instance.instance.width, image_instance.instance.height); + let image_data = &row.element.data; + let (image_width, image_height) = (row.element.width, row.element.height); if image_width == 0 || image_height == 0 { - return empty_image((), bounds, Color::TRANSPARENT).instance_iter().next().unwrap(); + return empty_image((), bounds, Table::new_from_element(Color::TRANSPARENT)).into_iter().next().unwrap(); } let orig_image_scale = DVec2::new(image_width as f64, image_height as f64); - let layer_to_image_space = DAffine2::from_scale(orig_image_scale) * image_instance.transform.inverse(); + let layer_to_image_space = DAffine2::from_scale(orig_image_scale) * row.transform.inverse(); let bounds_in_image_space = Bbox::unit().affine_transform(layer_to_image_space * bounds).to_axis_aligned_bbox(); let new_start = bounds_in_image_space.start.floor().min(DVec2::ZERO); @@ -309,27 +266,27 @@ pub fn extend_image_to_bounds(_: impl Ctx, image: RasterDataTable, bounds: // Compute new transform. // let layer_to_new_texture_space = (DAffine2::from_scale(1. / new_scale) * DAffine2::from_translation(new_start) * layer_to_image_space).inverse(); - let new_texture_to_layer_space = image_instance.transform * DAffine2::from_scale(1. / orig_image_scale) * DAffine2::from_translation(new_start) * DAffine2::from_scale(new_scale); + let new_texture_to_layer_space = row.transform * DAffine2::from_scale(1. / orig_image_scale) * DAffine2::from_translation(new_start) * DAffine2::from_scale(new_scale); - image_instance.instance = Raster::new_cpu(new_image); - image_instance.transform = new_texture_to_layer_space; - image_instance.source_node_id = None; - image_instance + row.element = Raster::new_cpu(new_image); + row.transform = new_texture_to_layer_space; + row }) .collect() } #[node_macro::node(category("Debug: Raster"))] -pub fn empty_image(_: impl Ctx, transform: DAffine2, color: Color) -> RasterDataTable { +pub fn empty_image(_: impl Ctx, transform: DAffine2, color: Table) -> Table> { let width = transform.transform_vector2(DVec2::new(1., 0.)).length() as u32; let height = transform.transform_vector2(DVec2::new(0., 1.)).length() as u32; - let image = Image::new(width, height, color); + let color: Option = color.into(); + let image = Image::new(width, height, color.unwrap_or(Color::WHITE)); - let mut result_table = RasterDataTable::new(Raster::new_cpu(image)); - let image_instance = result_table.get_mut(0).unwrap(); - *image_instance.transform = transform; - *image_instance.alpha_blending = AlphaBlending::default(); + let mut result_table = Table::new_from_element(Raster::new_cpu(image)); + let row = result_table.get_mut(0).unwrap(); + *row.transform = transform; + *row.alpha_blending = AlphaBlending::default(); // Callers of empty_image can safely unwrap on returned table result_table @@ -337,7 +294,7 @@ pub fn empty_image(_: impl Ctx, transform: DAffine2, color: Color) -> RasterData /// Constructs a raster image. #[node_macro::node(category(""))] -pub fn image_value(_: impl Ctx, _primary: (), image: RasterDataTable) -> RasterDataTable { +pub fn image_value(_: impl Ctx, _primary: (), image: Table>) -> Table> { image } @@ -361,7 +318,7 @@ pub fn noise_pattern( cellular_distance_function: CellularDistanceFunction, cellular_return_type: CellularReturnType, cellular_jitter: f64, -) -> RasterDataTable { +) -> Table> { let footprint = ctx.footprint(); let viewport_bounds = footprint.viewport_bounds_in_local_space(); @@ -379,7 +336,7 @@ pub fn noise_pattern( // If the image would not be visible, return an empty image if size.x <= 0. || size.y <= 0. { - return RasterDataTable::default(); + return Table::new(); } let footprint_scale = footprint.scale(); @@ -423,8 +380,8 @@ pub fn noise_pattern( } } - return RasterDataTable::new_instance(Instance { - instance: Raster::new_cpu(image), + return Table::new_from_row(TableRow { + element: Raster::new_cpu(image), transform: DAffine2::from_translation(offset) * DAffine2::from_scale(size), ..Default::default() }); @@ -485,15 +442,15 @@ pub fn noise_pattern( } } - RasterDataTable::new_instance(Instance { - instance: Raster::new_cpu(image), + Table::new_from_row(TableRow { + element: Raster::new_cpu(image), transform: DAffine2::from_translation(offset) * DAffine2::from_scale(size), ..Default::default() }) } #[node_macro::node(category("Raster: Pattern"))] -pub fn mandelbrot(ctx: impl ExtractFootprint + Send) -> RasterDataTable { +pub fn mandelbrot(ctx: impl ExtractFootprint + Send) -> Table> { let footprint = ctx.footprint(); let viewport_bounds = footprint.viewport_bounds_in_local_space(); @@ -505,7 +462,7 @@ pub fn mandelbrot(ctx: impl ExtractFootprint + Send) -> RasterDataTable { // If the image would not be visible, return an empty image if size.x <= 0. || size.y <= 0. { - return RasterDataTable::default(); + return Table::new(); } let scale = footprint.scale(); @@ -527,8 +484,8 @@ pub fn mandelbrot(ctx: impl ExtractFootprint + Send) -> RasterDataTable { } } - RasterDataTable::new_instance(Instance { - instance: Raster::new_cpu(Image { + Table::new_from_row(TableRow { + element: Raster::new_cpu(Image { width, height, data, diff --git a/node-graph/gstd/Cargo.toml b/node-graph/gstd/Cargo.toml index 0c20bd8f31..6eb7e8a075 100644 --- a/node-graph/gstd/Cargo.toml +++ b/node-graph/gstd/Cargo.toml @@ -36,15 +36,10 @@ graphene-raster-nodes = { workspace = true } graphene-brush = { workspace = true } # Workspace dependencies -fastnoise-lite = { workspace = true } log = { workspace = true } glam = { workspace = true } node-macro = { workspace = true } reqwest = { workspace = true } -futures = { workspace = true } -rand_chacha = { workspace = true } -rand = { workspace = true } -bytemuck = { workspace = true } image = { workspace = true } base64 = { workspace = true } @@ -65,8 +60,5 @@ web-sys = { workspace = true, optional = true, features = [ "ImageBitmapRenderingContext", ] } -# Required dependencies -ndarray = "0.16.1" - [dev-dependencies] tokio = { workspace = true } diff --git a/node-graph/gstd/src/any.rs b/node-graph/gstd/src/any.rs index 1a38d65b35..33c22c3884 100644 --- a/node-graph/gstd/src/any.rs +++ b/node-graph/gstd/src/any.rs @@ -1,6 +1,6 @@ use dyn_any::StaticType; pub use graph_craft::proto::{Any, NodeContainer, TypeErasedBox, TypeErasedNode}; -use graph_craft::proto::{DynFuture, FutureAny, SharedNodeContainer}; +use graph_craft::proto::{FutureAny, SharedNodeContainer}; use graphene_core::NodeIO; use graphene_core::WasmNotSend; pub use graphene_core::registry::{DowncastBothNode, DynAnyNode, FutureWrapperNode, PanicNode}; @@ -19,27 +19,6 @@ where } } -pub struct ComposeTypeErased { - first: SharedNodeContainer, - second: SharedNodeContainer, -} - -impl<'i> Node<'i, Any<'i>> for ComposeTypeErased { - type Output = DynFuture<'i, Any<'i>>; - fn eval(&'i self, input: Any<'i>) -> Self::Output { - Box::pin(async move { - let arg = self.first.eval(input).await; - self.second.eval(arg).await - }) - } -} - -impl ComposeTypeErased { - pub const fn new(first: SharedNodeContainer, second: SharedNodeContainer) -> Self { - ComposeTypeErased { first, second } - } -} - pub fn input_node(n: SharedNodeContainer) -> DowncastBothNode<(), O> { downcast_node(n) } diff --git a/node-graph/gstd/src/text.rs b/node-graph/gstd/src/text.rs index ec5df2522b..d1a094cc73 100644 --- a/node-graph/gstd/src/text.rs +++ b/node-graph/gstd/src/text.rs @@ -1,7 +1,6 @@ -use crate::vector::VectorDataTable; use graph_craft::wasm_application_io::WasmEditorApi; -use graphene_core::Ctx; pub use graphene_core::text::*; +use graphene_core::{Ctx, table::Table, vector::Vector}; #[node_macro::node(category(""))] fn text<'i: 'n>( @@ -18,20 +17,17 @@ fn text<'i: 'n>( #[unit(" px")] #[default(0.)] character_spacing: f64, - #[unit(" px")] - #[default(None)] - max_width: Option, - #[unit(" px")] - #[default(None)] - max_height: Option, + #[unit(" px")] max_width: Option, + #[unit(" px")] max_height: Option, /// Faux italic. #[unit("ยฐ")] #[default(0.)] tilt: f64, - /// Splits each text glyph into its own instance, i.e. row in the table of vector data. + align: TextAlign, + /// Splits each text glyph into its own row in the table of vector geometry. #[default(false)] per_glyph_instances: bool, -) -> VectorDataTable { +) -> Table { let typesetting = TypesettingConfig { font_size, line_height_ratio, @@ -39,6 +35,7 @@ fn text<'i: 'n>( max_width, max_height, tilt, + align, }; let font_data = editor.font_cache.get(&font_name).map(|f| load_font(f)); diff --git a/node-graph/gstd/src/wasm_application_io.rs b/node-graph/gstd/src/wasm_application_io.rs index a40309f88e..91771417a4 100644 --- a/node-graph/gstd/src/wasm_application_io.rs +++ b/node-graph/gstd/src/wasm_application_io.rs @@ -2,26 +2,26 @@ use graph_craft::document::value::RenderOutput; pub use graph_craft::document::value::RenderOutputType; pub use graph_craft::wasm_application_io::*; use graphene_application_io::{ApplicationIo, ExportFormat, RenderConfig}; -#[cfg(target_arch = "wasm32")] -use graphene_core::instances::Instances; -#[cfg(target_arch = "wasm32")] +use graphene_core::Artboard; +use graphene_core::gradient::GradientStops; +#[cfg(target_family = "wasm")] use graphene_core::math::bbox::Bbox; use graphene_core::raster::image::Image; -use graphene_core::raster_types::{CPU, Raster, RasterDataTable}; +use graphene_core::raster_types::{CPU, Raster}; +use graphene_core::table::Table; +#[cfg(target_family = "wasm")] use graphene_core::transform::Footprint; -use graphene_core::vector::VectorDataTable; -use graphene_core::{Color, Context, Ctx, ExtractFootprint, GraphicGroupTable, OwnedContextImpl, WasmNotSend}; +use graphene_core::vector::Vector; +use graphene_core::{Color, Context, Ctx, ExtractFootprint, Graphic, OwnedContextImpl, WasmNotSend}; use graphene_svg_renderer::RenderMetadata; -use graphene_svg_renderer::{GraphicElementRendered, RenderParams, RenderSvgSegmentList, SvgRender, format_transform_matrix}; +use graphene_svg_renderer::{Render, RenderParams, RenderSvgSegmentList, SvgRender, format_transform_matrix}; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use base64::Engine; -#[cfg(target_arch = "wasm32")] -use glam::DAffine2; use std::sync::Arc; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use wasm_bindgen::JsCast; -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] use web_sys::{CanvasRenderingContext2d, HtmlCanvasElement}; #[cfg(feature = "wgpu")] @@ -30,38 +30,9 @@ async fn create_surface<'a: 'n>(_: impl Ctx, editor: &'a WasmEditorApi) -> Arc, -// surface_handle: Arc, -// ) -> graphene_core::application_io::SurfaceHandleFrame { -// let image = image.instance_ref_iter().next().unwrap().instance; -// let image_data = image.image.data; -// let array: Clamped<&[u8]> = Clamped(bytemuck::cast_slice(image_data.as_slice())); -// if image.image.width > 0 && image.image.height > 0 { -// let canvas = &surface_handle.surface; -// canvas.set_width(image.image.width); -// canvas.set_height(image.image.height); -// // TODO: replace "2d" with "bitmaprenderer" once we switch to ImageBitmap (lives on gpu) from RasterData (lives on cpu) -// let context = canvas.get_context("2d").unwrap().unwrap().dyn_into::().unwrap(); -// let image_data = web_sys::ImageData::new_with_u8_clamped_array_and_sh(array, image.image.width, image.image.height).expect("Failed to construct RasterData"); -// context.put_image_data(&image_data, 0., 0.).unwrap(); -// } -// graphene_core::application_io::SurfaceHandleFrame { -// surface_handle, -// transform: image.transform, -// } -// } - #[node_macro::node(category("Web Request"))] async fn get_request(_: impl Ctx, _primary: (), #[name("URL")] url: String, discard_result: bool) -> String { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] { if discard_result { wasm_bindgen_futures::spawn_local(async move { @@ -70,7 +41,7 @@ async fn get_request(_: impl Ctx, _primary: (), #[name("URL")] url: String, disc return String::new(); } } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] { #[cfg(feature = "tokio")] if discard_result { @@ -91,7 +62,7 @@ async fn get_request(_: impl Ctx, _primary: (), #[name("URL")] url: String, disc #[node_macro::node(category("Web Request"))] async fn post_request(_: impl Ctx, _primary: (), #[name("URL")] url: String, body: Vec, discard_result: bool) -> String { - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] { if discard_result { wasm_bindgen_futures::spawn_local(async move { @@ -100,7 +71,7 @@ async fn post_request(_: impl Ctx, _primary: (), #[name("URL")] url: String, bod return String::new(); } } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] { #[cfg(feature = "tokio")] if discard_result { @@ -129,9 +100,9 @@ fn string_to_bytes(_: impl Ctx, string: String) -> Vec { } #[node_macro::node(category("Web Request"), name("Image to Bytes"))] -fn image_to_bytes(_: impl Ctx, image: RasterDataTable) -> Vec { - let Some(image) = image.instance_ref_iter().next() else { return vec![] }; - image.instance.data.iter().flat_map(|color| color.to_rgb8_srgb().into_iter()).collect::>() +fn image_to_bytes(_: impl Ctx, image: Table>) -> Vec { + let Some(image) = image.iter().next() else { return vec![] }; + image.element.data.iter().flat_map(|color| color.to_rgb8_srgb().into_iter()).collect::>() } #[node_macro::node(category("Web Request"))] @@ -150,9 +121,9 @@ async fn load_resource<'a: 'n>(_: impl Ctx, _primary: (), #[scope("editor-api")] } #[node_macro::node(category("Web Request"))] -fn decode_image(_: impl Ctx, data: Arc<[u8]>) -> RasterDataTable { +fn decode_image(_: impl Ctx, data: Arc<[u8]>) -> Table> { let Some(image) = image::load_from_memory(data.as_ref()).ok() else { - return RasterDataTable::default(); + return Table::new(); }; let image = image.to_rgba32f(); let image = Image { @@ -165,10 +136,12 @@ fn decode_image(_: impl Ctx, data: Arc<[u8]>) -> RasterDataTable { ..Default::default() }; - RasterDataTable::new(Raster::new_cpu(image)) + Table::new_from_element(Raster::new_cpu(image)) } -fn render_svg(data: impl GraphicElementRendered, mut render: SvgRender, render_params: RenderParams, footprint: Footprint) -> RenderOutputType { +fn render_svg(data: impl Render, mut render: SvgRender, render_params: RenderParams) -> RenderOutputType { + let footprint = render_params.footprint; + if !data.contains_artboard() && !render_params.hide_artboards { render.leaf_tag("rect", |attributes| { attributes.push("x", "0"); @@ -187,21 +160,19 @@ fn render_svg(data: impl GraphicElementRendered, mut render: SvgRender, render_p render.wrap_with_transform(footprint.transform, Some(footprint.resolution.as_dvec2())); - RenderOutputType::Svg(render.svg.to_svg_string()) + RenderOutputType::Svg { + svg: render.svg.to_svg_string(), + image_data: render.image_data, + } } #[cfg(feature = "vello")] -#[cfg_attr(not(target_arch = "wasm32"), allow(dead_code))] -async fn render_canvas( - render_config: RenderConfig, - data: impl GraphicElementRendered, - editor: &WasmEditorApi, - surface_handle: wgpu_executor::WgpuSurface, - render_params: RenderParams, -) -> RenderOutputType { - use graphene_application_io::SurfaceFrame; +#[cfg_attr(not(target_family = "wasm"), allow(dead_code))] +async fn render_canvas(render_config: RenderConfig, data: impl Render, editor: &WasmEditorApi, surface_handle: Option, render_params: RenderParams) -> RenderOutputType { + use graphene_application_io::{ImageTexture, SurfaceFrame}; - let footprint = render_config.viewport; + let mut footprint = render_config.viewport; + footprint.resolution = footprint.resolution.max(glam::UVec2::splat(1)); let Some(exec) = editor.application_io.as_ref().unwrap().gpu_executor() else { unreachable!("Attempted to render with Vello when no GPU executor is available"); }; @@ -220,40 +191,51 @@ async fn render_canvas( if !data.contains_artboard() && !render_config.hide_artboards { background = Color::WHITE; } - exec.render_vello_scene(&scene, &surface_handle, footprint.resolution, &context, background) - .await - .expect("Failed to render Vello scene"); + if let Some(surface_handle) = surface_handle { + exec.render_vello_scene(&scene, &surface_handle, footprint.resolution, &context, background) + .await + .expect("Failed to render Vello scene"); - let frame = SurfaceFrame { - surface_id: surface_handle.window_id, - resolution: render_config.viewport.resolution, - transform: glam::DAffine2::IDENTITY, - }; + let frame = SurfaceFrame { + surface_id: surface_handle.window_id, + resolution: render_config.viewport.resolution, + transform: glam::DAffine2::IDENTITY, + }; - RenderOutputType::CanvasFrame(frame) + RenderOutputType::CanvasFrame(frame) + } else { + let texture = exec + .render_vello_scene_to_texture(&scene, footprint.resolution, &context, background) + .await + .expect("Failed to render Vello scene"); + + RenderOutputType::Texture(ImageTexture { texture }) + } } -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] #[node_macro::node(category(""))] async fn rasterize( _: impl Ctx, #[implementations( - VectorDataTable, - RasterDataTable, - GraphicGroupTable, + Table, + Table>, + Table, + Table, + Table, )] - mut data: Instances, + mut data: Table, footprint: Footprint, surface_handle: Arc>, -) -> RasterDataTable +) -> Table> where - Instances: GraphicElementRendered, + Table: Render, { - use graphene_core::instances::Instance; + use graphene_core::table::TableRow; if footprint.transform.matrix2.determinant() == 0. { log::trace!("Invalid footprint received for rasterization"); - return RasterDataTable::default(); + return Table::new(); } let mut render = SvgRender::new(); @@ -261,12 +243,13 @@ where let size = aabb.size(); let resolution = footprint.resolution; let render_params = RenderParams { - culling_bounds: None, + footprint, + for_export: true, ..Default::default() }; - for instance in data.instance_mut_iter() { - *instance.transform = DAffine2::from_translation(-aabb.start) * *instance.transform; + for row in data.iter_mut() { + *row.transform = glam::DAffine2::from_translation(-aabb.start) * *row.transform; } data.render_svg(&mut render, &render_params); render.format_svg(glam::DVec2::ZERO, size); @@ -293,29 +276,24 @@ where let rasterized = context.get_image_data(0., 0., resolution.x as f64, resolution.y as f64).unwrap(); let image = Image::from_image_data(&rasterized.data().0, resolution.x as u32, resolution.y as u32); - RasterDataTable::new_instance(Instance { - instance: Raster::new_cpu(image), + Table::new_from_row(TableRow { + element: Raster::new_cpu(image), transform: footprint.transform, ..Default::default() }) } #[node_macro::node(category(""))] -async fn render<'a: 'n, T: 'n + GraphicElementRendered + WasmNotSend>( +async fn render<'a: 'n, T: 'n + Render + WasmNotSend>( render_config: RenderConfig, editor_api: impl Node, Output = &'a WasmEditorApi>, #[implementations( - Context -> VectorDataTable, - Context -> RasterDataTable, - Context -> GraphicGroupTable, - Context -> graphene_core::Artboard, - Context -> graphene_core::ArtboardGroupTable, - Context -> Option, - Context -> Vec, - Context -> bool, - Context -> f32, - Context -> f64, - Context -> String, + Context -> Table, + Context -> Table, + Context -> Table, + Context -> Table>, + Context -> Table, + Context -> Table, )] data: impl Node, Output = T>, _surface_handle: impl Node, Output = Option>, @@ -328,44 +306,43 @@ async fn render<'a: 'n, T: 'n + GraphicElementRendered + WasmNotSend>( .into_context(); ctx.footprint(); - let RenderConfig { hide_artboards, for_export, .. } = render_config; let render_params = RenderParams { view_mode: render_config.view_mode, - culling_bounds: None, - thumbnail: false, - hide_artboards, - for_export, - for_mask: false, - alignment_parent_transform: None, + hide_artboards: render_config.hide_artboards, + for_export: render_config.for_export, + footprint, + ..Default::default() }; let data = data.eval(ctx.clone()).await; let editor_api = editor_api.eval(None).await; - #[cfg(all(feature = "vello", not(test)))] - let surface_handle = _surface_handle.eval(None).await; + #[cfg(all(feature = "vello", not(test), target_family = "wasm"))] + let _surface_handle = _surface_handle.eval(None).await; + #[cfg(not(target_family = "wasm"))] + let _surface_handle: Option = None; let use_vello = editor_api.editor_preferences.use_vello(); - #[cfg(all(feature = "vello", not(test)))] - let use_vello = use_vello && surface_handle.is_some(); + #[cfg(all(feature = "vello", not(test), target_family = "wasm"))] + let use_vello = use_vello && _surface_handle.is_some(); let mut metadata = RenderMetadata::default(); data.collect_metadata(&mut metadata, footprint, None); let output_format = render_config.export_format; let data = match output_format { - ExportFormat::Svg => render_svg(data, SvgRender::new(), render_params, footprint), + ExportFormat::Svg => render_svg(data, SvgRender::new(), render_params), ExportFormat::Canvas => { if use_vello && editor_api.application_io.as_ref().unwrap().gpu_executor().is_some() { #[cfg(all(feature = "vello", not(test)))] return RenderOutput { - data: render_canvas(render_config, data, editor_api, surface_handle.unwrap(), render_params).await, + data: render_canvas(render_config, data, editor_api, _surface_handle, render_params).await, metadata, }; #[cfg(any(not(feature = "vello"), test))] - render_svg(data, SvgRender::new(), render_params, footprint) + render_svg(data, SvgRender::new(), render_params) } else { - render_svg(data, SvgRender::new(), render_params, footprint) + render_svg(data, SvgRender::new(), render_params) } } _ => todo!("Non-SVG render output for {output_format:?}"), diff --git a/node-graph/gsvg-renderer/Cargo.toml b/node-graph/gsvg-renderer/Cargo.toml index 86b3b14aa2..a6d0e395c5 100644 --- a/node-graph/gsvg-renderer/Cargo.toml +++ b/node-graph/gsvg-renderer/Cargo.toml @@ -6,14 +6,10 @@ description = "graphene svg renderer" authors = ["Graphite Authors "] license = "MIT OR Apache-2.0" -[features] -vello = ["dep:vello", "bezier-rs/kurbo"] - [dependencies] # Local dependencies dyn-any = { workspace = true } graphene-core = { workspace = true } -bezier-rs = { workspace = true } # Workspace dependencies glam = { workspace = true } @@ -22,6 +18,7 @@ base64 = { workspace = true } log = { workspace = true } num-traits = { workspace = true } usvg = { workspace = true } +kurbo = { workspace = true } # Optional workspace dependencies vello = { workspace = true, optional = true } diff --git a/node-graph/gsvg-renderer/src/convert_usvg_path.rs b/node-graph/gsvg-renderer/src/convert_usvg_path.rs index 7ba7688ae0..a04ca08ccb 100644 --- a/node-graph/gsvg-renderer/src/convert_usvg_path.rs +++ b/node-graph/gsvg-renderer/src/convert_usvg_path.rs @@ -1,10 +1,10 @@ -use bezier_rs::{ManipulatorGroup, Subpath}; use glam::DVec2; +use graphene_core::subpath::{ManipulatorGroup, Subpath}; use graphene_core::vector::PointId; pub fn convert_usvg_path(path: &usvg::Path) -> Vec> { let mut subpaths = Vec::new(); - let mut groups = Vec::new(); + let mut manipulators_list = Vec::new(); let mut points = path.data().points().iter(); let to_vec = |p: &usvg::tiny_skia_path::Point| DVec2::new(p.x as f64, p.y as f64); @@ -12,36 +12,36 @@ pub fn convert_usvg_path(path: &usvg::Path) -> Vec> { for verb in path.data().verbs() { match verb { usvg::tiny_skia_path::PathVerb::Move => { - subpaths.push(Subpath::new(std::mem::take(&mut groups), false)); + subpaths.push(Subpath::new(std::mem::take(&mut manipulators_list), false)); let Some(start) = points.next().map(to_vec) else { continue }; - groups.push(ManipulatorGroup::new(start, Some(start), Some(start))); + manipulators_list.push(ManipulatorGroup::new(start, Some(start), Some(start))); } usvg::tiny_skia_path::PathVerb::Line => { let Some(end) = points.next().map(to_vec) else { continue }; - groups.push(ManipulatorGroup::new(end, Some(end), Some(end))); + manipulators_list.push(ManipulatorGroup::new(end, Some(end), Some(end))); } usvg::tiny_skia_path::PathVerb::Quad => { let Some(handle) = points.next().map(to_vec) else { continue }; let Some(end) = points.next().map(to_vec) else { continue }; - if let Some(last) = groups.last_mut() { + if let Some(last) = manipulators_list.last_mut() { last.out_handle = Some(last.anchor + (2. / 3.) * (handle - last.anchor)); } - groups.push(ManipulatorGroup::new(end, Some(end + (2. / 3.) * (handle - end)), Some(end))); + manipulators_list.push(ManipulatorGroup::new(end, Some(end + (2. / 3.) * (handle - end)), Some(end))); } usvg::tiny_skia_path::PathVerb::Cubic => { let Some(first_handle) = points.next().map(to_vec) else { continue }; let Some(second_handle) = points.next().map(to_vec) else { continue }; let Some(end) = points.next().map(to_vec) else { continue }; - if let Some(last) = groups.last_mut() { + if let Some(last) = manipulators_list.last_mut() { last.out_handle = Some(first_handle); } - groups.push(ManipulatorGroup::new(end, Some(second_handle), Some(end))); + manipulators_list.push(ManipulatorGroup::new(end, Some(second_handle), Some(end))); } usvg::tiny_skia_path::PathVerb::Close => { - subpaths.push(Subpath::new(std::mem::take(&mut groups), true)); + subpaths.push(Subpath::new(std::mem::take(&mut manipulators_list), true)); } } } - subpaths.push(Subpath::new(groups, false)); + subpaths.push(Subpath::new(manipulators_list, false)); subpaths } diff --git a/node-graph/gsvg-renderer/src/render_ext.rs b/node-graph/gsvg-renderer/src/render_ext.rs index d0d7c16cc8..47655a26af 100644 --- a/node-graph/gsvg-renderer/src/render_ext.rs +++ b/node-graph/gsvg-renderer/src/render_ext.rs @@ -1,5 +1,5 @@ use crate::renderer::{RenderParams, format_transform_matrix}; -use glam::{DAffine2, DVec2}; +use glam::DAffine2; use graphene_core::consts::{LAYER_OUTLINE_STROKE_COLOR, LAYER_OUTLINE_STROKE_WEIGHT}; use graphene_core::gradient::{Gradient, GradientType}; use graphene_core::uuid::generate_uuid; @@ -8,39 +8,14 @@ use std::fmt::Write; pub trait RenderExt { type Output; - fn render( - &self, - svg_defs: &mut String, - element_transform: DAffine2, - stroke_transform: DAffine2, - bounds: [DVec2; 2], - transformed_bounds: [DVec2; 2], - aligned_strokes: bool, - override_paint_order: bool, - render_params: &RenderParams, - ) -> Self::Output; + fn render(&self, svg_defs: &mut String, element_transform: DAffine2, stroke_transform: DAffine2, bounds: DAffine2, transformed_bounds: DAffine2, render_params: &RenderParams) -> Self::Output; } impl RenderExt for Gradient { type Output = u64; // /// Adds the gradient def through mutating the first argument, returning the gradient ID. - fn render( - &self, - svg_defs: &mut String, - element_transform: DAffine2, - stroke_transform: DAffine2, - bounds: [DVec2; 2], - transformed_bounds: [DVec2; 2], - _aligned_strokes: bool, - _override_paint_order: bool, - _render_params: &RenderParams, - ) -> Self::Output { - // TODO: Figure out how to use `self.transform` as part of the gradient transform, since that field (`Gradient::transform`) is currently never read from, it's only written to. - - let bound_transform = DAffine2::from_scale_angle_translation(bounds[1] - bounds[0], 0., bounds[0]); - let transformed_bound_transform = element_transform * DAffine2::from_scale_angle_translation(transformed_bounds[1] - transformed_bounds[0], 0., transformed_bounds[0]); - + fn render(&self, svg_defs: &mut String, element_transform: DAffine2, stroke_transform: DAffine2, bounds: DAffine2, transformed_bounds: DAffine2, _render_params: &RenderParams) -> Self::Output { let mut stop = String::new(); for (position, color) in self.stops.0.iter() { stop.push_str("") } - let mod_gradient = if transformed_bound_transform.matrix2.determinant() != 0. { - transformed_bound_transform.inverse() + let transform_points = element_transform * stroke_transform * bounds; + let start = transform_points.transform_point2(self.start); + let end = transform_points.transform_point2(self.end); + + let gradient_transform = if transformed_bounds.matrix2.determinant() != 0. { + transformed_bounds.inverse() } else { DAffine2::IDENTITY // Ignore if the transform cannot be inverted (the bounds are zero). See issue #1944. }; - let mod_points = element_transform * stroke_transform * bound_transform; - - let start = mod_points.transform_point2(self.start); - let end = mod_points.transform_point2(self.end); + let gradient_transform = format_transform_matrix(gradient_transform); + let gradient_transform = if gradient_transform.is_empty() { + String::new() + } else { + format!(r#" gradientTransform="{gradient_transform}""#) + }; let gradient_id = generate_uuid(); - let matrix = format_transform_matrix(mod_gradient); - let gradient_transform = if matrix.is_empty() { String::new() } else { format!(r#" gradientTransform="{}""#, matrix) }; - match self.gradient_type { GradientType::Linear => { let _ = write!( svg_defs, - r#"{}"#, - gradient_id, start.x, end.x, start.y, end.y, stop + r#"{}"#, + gradient_id, start.x, start.y, end.x, end.y, stop ); } GradientType::Radial => { @@ -95,17 +73,7 @@ impl RenderExt for Fill { type Output = String; /// Renders the fill, adding necessary defs through mutating the first argument. - fn render( - &self, - svg_defs: &mut String, - element_transform: DAffine2, - stroke_transform: DAffine2, - bounds: [DVec2; 2], - transformed_bounds: [DVec2; 2], - aligned_strokes: bool, - override_paint_order: bool, - render_params: &RenderParams, - ) -> Self::Output { + fn render(&self, svg_defs: &mut String, element_transform: DAffine2, stroke_transform: DAffine2, bounds: DAffine2, transformed_bounds: DAffine2, render_params: &RenderParams) -> Self::Output { match self { Self::None => r#" fill="none""#.to_string(), Self::Solid(color) => { @@ -116,16 +84,7 @@ impl RenderExt for Fill { result } Self::Gradient(gradient) => { - let gradient_id = gradient.render( - svg_defs, - element_transform, - stroke_transform, - bounds, - transformed_bounds, - aligned_strokes, - override_paint_order, - render_params, - ); + let gradient_id = gradient.render(svg_defs, element_transform, stroke_transform, bounds, transformed_bounds, render_params); format!(r##" fill="url('#{gradient_id}')""##) } } @@ -141,11 +100,9 @@ impl RenderExt for Stroke { _svg_defs: &mut String, _element_transform: DAffine2, _stroke_transform: DAffine2, - _bounds: [DVec2; 2], - _transformed_bounds: [DVec2; 2], - aligned_strokes: bool, - override_paint_order: bool, - _render_params: &RenderParams, + _bounds: DAffine2, + _transformed_bounds: DAffine2, + render_params: &RenderParams, ) -> Self::Output { // Don't render a stroke at all if it would be invisible let Some(color) = self.color else { return String::new() }; @@ -161,7 +118,7 @@ impl RenderExt for Stroke { let stroke_join = (self.join != StrokeJoin::Miter).then_some(self.join); let stroke_join_miter_limit = (self.join_miter_limit != 4.).then_some(self.join_miter_limit); let stroke_align = (self.align != StrokeAlign::Center).then_some(self.align); - let paint_order = (self.paint_order != PaintOrder::StrokeAbove || override_paint_order).then_some(PaintOrder::StrokeBelow); + let paint_order = (self.paint_order != PaintOrder::StrokeAbove || render_params.override_paint_order).then_some(PaintOrder::StrokeBelow); // Render the needed stroke attributes let mut attributes = format!(r##" stroke="#{}""##, color.to_rgb_hex_srgb_from_gamma()); @@ -169,16 +126,16 @@ impl RenderExt for Stroke { let _ = write!(&mut attributes, r#" stroke-opacity="{}""#, (color.a() * 1000.).round() / 1000.); } if let Some(mut weight) = weight { - if stroke_align.is_some() && aligned_strokes { + if stroke_align.is_some() && render_params.aligned_strokes { weight *= 2.; } - let _ = write!(&mut attributes, r#" stroke-width="{}""#, weight); + let _ = write!(&mut attributes, r#" stroke-width="{weight}""#); } if let Some(dash_array) = dash_array { - let _ = write!(&mut attributes, r#" stroke-dasharray="{}""#, dash_array); + let _ = write!(&mut attributes, r#" stroke-dasharray="{dash_array}""#); } if let Some(dash_offset) = dash_offset { - let _ = write!(&mut attributes, r#" stroke-dashoffset="{}""#, dash_offset); + let _ = write!(&mut attributes, r#" stroke-dashoffset="{dash_offset}""#); } if let Some(stroke_cap) = stroke_cap { let _ = write!(&mut attributes, r#" stroke-linecap="{}""#, stroke_cap.svg_name()); @@ -187,7 +144,7 @@ impl RenderExt for Stroke { let _ = write!(&mut attributes, r#" stroke-linejoin="{}""#, stroke_join.svg_name()); } if let Some(stroke_join_miter_limit) = stroke_join_miter_limit { - let _ = write!(&mut attributes, r#" stroke-miterlimit="{}""#, stroke_join_miter_limit); + let _ = write!(&mut attributes, r#" stroke-miterlimit="{stroke_join_miter_limit}""#); } // Add vector-effect attribute to make strokes non-scaling if self.non_scaling { @@ -205,71 +162,23 @@ impl RenderExt for PathStyle { /// Renders the shape's fill and stroke attributes as a string with them concatenated together. #[allow(clippy::too_many_arguments)] - fn render( - &self, - svg_defs: &mut String, - element_transform: DAffine2, - stroke_transform: DAffine2, - bounds: [DVec2; 2], - transformed_bounds: [DVec2; 2], - aligned_strokes: bool, - override_paint_order: bool, - render_params: &RenderParams, - ) -> String { + fn render(&self, svg_defs: &mut String, element_transform: DAffine2, stroke_transform: DAffine2, bounds: DAffine2, transformed_bounds: DAffine2, render_params: &RenderParams) -> String { let view_mode = render_params.view_mode; match view_mode { ViewMode::Outline => { - let fill_attribute = Fill::None.render( - svg_defs, - element_transform, - stroke_transform, - bounds, - transformed_bounds, - aligned_strokes, - override_paint_order, - render_params, - ); + let fill_attribute = Fill::None.render(svg_defs, element_transform, stroke_transform, bounds, transformed_bounds, render_params); let mut outline_stroke = Stroke::new(Some(LAYER_OUTLINE_STROKE_COLOR), LAYER_OUTLINE_STROKE_WEIGHT); // Outline strokes should be non-scaling by default outline_stroke.non_scaling = true; - let stroke_attribute = outline_stroke.render( - svg_defs, - element_transform, - stroke_transform, - bounds, - transformed_bounds, - aligned_strokes, - override_paint_order, - render_params, - ); + let stroke_attribute = outline_stroke.render(svg_defs, element_transform, stroke_transform, bounds, transformed_bounds, render_params); format!("{fill_attribute}{stroke_attribute}") } _ => { - let fill_attribute = self.fill.render( - svg_defs, - element_transform, - stroke_transform, - bounds, - transformed_bounds, - aligned_strokes, - override_paint_order, - render_params, - ); + let fill_attribute = self.fill.render(svg_defs, element_transform, stroke_transform, bounds, transformed_bounds, render_params); let stroke_attribute = self .stroke .as_ref() - .map(|stroke| { - stroke.render( - svg_defs, - element_transform, - stroke_transform, - bounds, - transformed_bounds, - aligned_strokes, - override_paint_order, - render_params, - ) - }) + .map(|stroke| stroke.render(svg_defs, element_transform, stroke_transform, bounds, transformed_bounds, render_params)) .unwrap_or_default(); format!("{fill_attribute}{stroke_attribute}") } diff --git a/node-graph/gsvg-renderer/src/renderer.rs b/node-graph/gsvg-renderer/src/renderer.rs index d50a9a6288..df5f3a1afa 100644 --- a/node-graph/gsvg-renderer/src/renderer.rs +++ b/node-graph/gsvg-renderer/src/renderer.rs @@ -1,25 +1,33 @@ use crate::render_ext::RenderExt; use crate::to_peniko::BlendModeExt; -use bezier_rs::Subpath; use dyn_any::DynAny; use glam::{DAffine2, DVec2}; use graphene_core::blending::BlendMode; use graphene_core::bounds::BoundingBox; +use graphene_core::bounds::RenderBoundingBox; use graphene_core::color::Color; -use graphene_core::instances::Instance; +use graphene_core::gradient::GradientStops; +use graphene_core::gradient::GradientType; use graphene_core::math::quad::Quad; +use graphene_core::raster::BitmapMut; use graphene_core::raster::Image; -use graphene_core::raster_types::{CPU, GPU, RasterDataTable}; +use graphene_core::raster_types::{CPU, GPU, Raster}; use graphene_core::render_complexity::RenderComplexity; +use graphene_core::subpath::Subpath; +use graphene_core::table::{Table, TableRow}; use graphene_core::transform::{Footprint, Transform}; use graphene_core::uuid::{NodeId, generate_uuid}; -use graphene_core::vector::VectorDataTable; +use graphene_core::vector::Vector; use graphene_core::vector::click_target::{ClickTarget, FreePoint}; -use graphene_core::vector::style::{Fill, Stroke, StrokeAlign, ViewMode}; -use graphene_core::{AlphaBlending, Artboard, ArtboardGroupTable, GraphicElement, GraphicGroupTable}; +use graphene_core::vector::style::{Fill, PaintOrder, Stroke, StrokeAlign, ViewMode}; +use graphene_core::{Artboard, Graphic}; +use kurbo::Affine; use num_traits::Zero; use std::collections::{HashMap, HashSet}; use std::fmt::Write; +use std::hash::{DefaultHasher, Hash, Hasher}; +use std::ops::Deref; +use std::sync::{Arc, LazyLock}; #[cfg(feature = "vello")] use vello::*; @@ -145,23 +153,25 @@ impl Default for SvgRender { #[derive(Clone, Debug, Default)] pub struct RenderContext { #[cfg(feature = "vello")] - pub resource_overrides: HashMap, + pub resource_overrides: Vec<(peniko::Image, wgpu::Texture)>, } /// Static state used whilst rendering -#[derive(Default)] +#[derive(Default, Clone)] pub struct RenderParams { pub view_mode: ViewMode, - pub culling_bounds: Option<[DVec2; 2]>, + pub footprint: Footprint, pub thumbnail: bool, /// Don't render the rectangle for an artboard to allow exporting with a transparent background. pub hide_artboards: bool, - /// Are we exporting? Causes the text above an artboard to be hidden. + /// Are we exporting as a standalone SVG? pub for_export: bool, /// Are we generating a mask in this render pass? Used to see if fill should be multiplied with alpha. pub for_mask: bool, - /// Are we generating a mask for alignment? Used to prevent unnecesary transforms in masks + /// Are we generating a mask for alignment? Used to prevent unnecessary transforms in masks pub alignment_parent_transform: Option, + pub aligned_strokes: bool, + pub override_paint_order: bool, } impl RenderParams { @@ -173,6 +183,10 @@ impl RenderParams { let alignment_parent_transform = Some(transform); Self { alignment_parent_transform, ..*self } } + + pub fn to_canvas(&self) -> bool { + !self.for_export && !self.thumbnail && !self.for_mask + } } pub fn format_transform_matrix(transform: DAffine2) -> String { @@ -188,6 +202,12 @@ pub fn format_transform_matrix(transform: DAffine2) -> String { }) + ")" } +fn max_scale(transform: DAffine2) -> f64 { + let sx = transform.x_axis.length_squared(); + let sy = transform.y_axis.length_squared(); + (sx + sy).sqrt() +} + pub fn to_transform(transform: DAffine2) -> usvg::Transform { let cols = transform.to_cols_array(); usvg::Transform::from_row(cols[0] as f32, cols[1] as f32, cols[2] as f32, cols[3] as f32, cols[4] as f32, cols[5] as f32) @@ -199,13 +219,13 @@ pub fn to_transform(transform: DAffine2) -> usvg::Transform { pub struct RenderMetadata { pub upstream_footprints: HashMap, pub local_transforms: HashMap, - pub first_instance_source_id: HashMap>, + pub first_element_source_id: HashMap>, pub click_targets: HashMap>, pub clip_targets: HashSet, } // TODO: Rename to "Graphical" -pub trait GraphicElementRendered: BoundingBox + RenderComplexity { +pub trait Render: BoundingBox + RenderComplexity { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams); #[cfg(feature = "vello")] @@ -217,7 +237,7 @@ pub trait GraphicElementRendered: BoundingBox + RenderComplexity { // TODO: Store all click targets in a vec which contains the AABB, click target, and path // fn add_click_targets(&self, click_targets: &mut Vec<([DVec2; 2], ClickTarget, Vec)>, current_path: Option) {} - /// Recursively iterate over data in the render (including groups upstream from vector data in the case of a boolean operation) to collect the footprints, click targets, and vector modify. + /// Recursively iterate over data in the render (including nested layer stacks upstream of a vector node, in the case of a boolean operation) to collect the footprints, click targets, and vector modify. fn collect_metadata(&self, _metadata: &mut RenderMetadata, _footprint: Footprint, _element_id: Option) {} fn contains_artboard(&self) -> bool { @@ -227,642 +247,126 @@ pub trait GraphicElementRendered: BoundingBox + RenderComplexity { fn new_ids_from_hash(&mut self, _reference: Option) {} } -impl GraphicElementRendered for GraphicGroupTable { +impl Render for Graphic { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { - let mut iter = self.instance_ref_iter().peekable(); - let mut mask_state = None; - - while let Some(instance) = iter.next() { - render.parent_tag( - "g", - |attributes| { - let matrix = format_transform_matrix(*instance.transform); - if !matrix.is_empty() { - attributes.push("transform", matrix); - } - - let factor = if render_params.for_mask { 1. } else { instance.alpha_blending.fill }; - let opacity = instance.alpha_blending.opacity * factor; - if opacity < 1. { - attributes.push("opacity", opacity.to_string()); - } - - if instance.alpha_blending.blend_mode != BlendMode::default() { - attributes.push("style", instance.alpha_blending.blend_mode.render()); - } - - let next_clips = iter.peek().is_some_and(|next_instance| next_instance.instance.had_clip_enabled()); - - if next_clips && mask_state.is_none() { - let uuid = generate_uuid(); - let mask_type = if instance.instance.can_reduce_to_clip_path() { MaskType::Clip } else { MaskType::Mask }; - mask_state = Some((uuid, mask_type)); - let mut svg = SvgRender::new(); - instance.instance.render_svg(&mut svg, &render_params.for_clipper()); - - write!(&mut attributes.0.svg_defs, r##"{}"##, svg.svg_defs).unwrap(); - mask_type.write_to_defs(&mut attributes.0.svg_defs, uuid, svg.svg.to_svg_string()); - } else if let Some((uuid, mask_type)) = mask_state { - if !next_clips { - mask_state = None; - } - - let id = format!("mask-{uuid}"); - let selector = format!("url(#{id})"); - - attributes.push(mask_type.to_attribute(), selector); - } - - if let Some(mask) = instance.mask { - attributes.push_mask(mask, render_params.for_clipper()); - } - }, - |render| { - instance.instance.render_svg(render, render_params); - }, - ); + match self { + Graphic::Graphic(table) => table.render_svg(render, render_params), + Graphic::Vector(table) => table.render_svg(render, render_params), + Graphic::RasterCPU(table) => table.render_svg(render, render_params), + Graphic::RasterGPU(_) => (), + Graphic::Color(table) => table.render_svg(render, render_params), + Graphic::Gradient(table) => table.render_svg(render, render_params), } } #[cfg(feature = "vello")] fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, render_params: &RenderParams) { - let mut iter = self.instance_ref_iter().peekable(); - let mut mask_instance_state = None; - - while let Some(instance) = iter.next() { - let transform = transform * *instance.transform; - let alpha_blending = *instance.alpha_blending; - - let mut layer = false; - - let blend_mode = match render_params.view_mode { - ViewMode::Outline => peniko::Mix::Normal, - _ => alpha_blending.blend_mode.to_peniko(), - }; - let mut bounds = None; - - let factor = if render_params.for_mask { 1. } else { alpha_blending.fill }; - let opacity = alpha_blending.opacity * factor; - if opacity < 1. || (render_params.view_mode != ViewMode::Outline && alpha_blending.blend_mode != BlendMode::default()) { - bounds = self - .instance_ref_iter() - .filter_map(|element| element.instance.bounding_box(transform, true)) - .reduce(Quad::combine_bounds); - - if let Some(bounds) = bounds { - scene.push_layer( - peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver), - opacity, - kurbo::Affine::IDENTITY, - &kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y), - ); - layer = true; - } - } - - let mut masked = false; - if let Some(mask) = instance.mask { - let bounds = mask.bounding_box(transform, true); - - if let Some(bounds) = bounds { - masked = true; - let rect = vello::kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); - - scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); - mask.render_to_vello(scene, transform, context, &render_params.for_clipper()); - scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect); - } - } - - let next_clips = iter.peek().is_some_and(|next_instance| next_instance.instance.had_clip_enabled()); - if next_clips && mask_instance_state.is_none() { - mask_instance_state = Some((instance.instance, transform)); - - instance.instance.render_to_vello(scene, transform, context, render_params); - } else if let Some((instance_mask, transform_mask)) = mask_instance_state { - if !next_clips { - mask_instance_state = None; - } - if !layer { - bounds = self - .instance_ref_iter() - .filter_map(|element| element.instance.bounding_box(transform, true)) - .reduce(Quad::combine_bounds); - } - - if let Some(bounds) = bounds { - let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); - - scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); - instance_mask.render_to_vello(scene, transform_mask, context, &render_params.for_clipper()); - scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect); - } - - instance.instance.render_to_vello(scene, transform, context, render_params); - - if bounds.is_some() { - scene.pop_layer(); - scene.pop_layer(); - } - } else { - instance.instance.render_to_vello(scene, transform, context, render_params); - } - - if masked { - scene.pop_layer(); - scene.pop_layer(); - } - - if layer { - scene.pop_layer(); - } + match self { + Graphic::Graphic(table) => table.render_to_vello(scene, transform, context, render_params), + Graphic::Vector(table) => table.render_to_vello(scene, transform, context, render_params), + Graphic::RasterCPU(table) => table.render_to_vello(scene, transform, context, render_params), + Graphic::RasterGPU(table) => table.render_to_vello(scene, transform, context, render_params), + Graphic::Color(table) => table.render_to_vello(scene, transform, context, render_params), + Graphic::Gradient(table) => table.render_to_vello(scene, transform, context, render_params), } } fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option) { - for instance in self.instance_ref_iter() { - if let Some(element_id) = instance.source_node_id { - let mut footprint = footprint; - footprint.transform *= *instance.transform; + if let Some(element_id) = element_id { + match self { + Graphic::Graphic(_) => { + metadata.upstream_footprints.insert(element_id, footprint); + } + Graphic::Vector(table) => { + metadata.upstream_footprints.insert(element_id, footprint); + // TODO: Find a way to handle more than the first row + if let Some(row) = table.iter().next() { + metadata.first_element_source_id.insert(element_id, *row.source_node_id); + metadata.local_transforms.insert(element_id, *row.transform); + } + } + Graphic::RasterCPU(table) => { + metadata.upstream_footprints.insert(element_id, footprint); - instance.instance.collect_metadata(metadata, footprint, Some(*element_id)); + // TODO: Find a way to handle more than the first row + if let Some(row) = table.iter().next() { + metadata.local_transforms.insert(element_id, *row.transform); + } + } + Graphic::RasterGPU(table) => { + metadata.upstream_footprints.insert(element_id, footprint); + + // TODO: Find a way to handle more than the first row + if let Some(row) = table.iter().next() { + metadata.local_transforms.insert(element_id, *row.transform); + } + } + Graphic::Color(table) => { + metadata.upstream_footprints.insert(element_id, footprint); + + // TODO: Find a way to handle more than the first row + if let Some(row) = table.iter().next() { + metadata.local_transforms.insert(element_id, *row.transform); + } + } + Graphic::Gradient(table) => { + metadata.upstream_footprints.insert(element_id, footprint); + + // TODO: Find a way to handle more than the first row + if let Some(row) = table.iter().next() { + metadata.local_transforms.insert(element_id, *row.transform); + } + } } } - if let Some(graphic_group_id) = element_id { - let mut all_upstream_click_targets = Vec::new(); - - for instance in self.instance_ref_iter() { - let mut new_click_targets = Vec::new(); - instance.instance.add_upstream_click_targets(&mut new_click_targets); - - for click_target in new_click_targets.iter_mut() { - click_target.apply_transform(*instance.transform) - } - - all_upstream_click_targets.extend(new_click_targets); - } - - metadata.click_targets.insert(graphic_group_id, all_upstream_click_targets); + match self { + Graphic::Graphic(table) => table.collect_metadata(metadata, footprint, element_id), + Graphic::Vector(table) => table.collect_metadata(metadata, footprint, element_id), + Graphic::RasterCPU(table) => table.collect_metadata(metadata, footprint, element_id), + Graphic::RasterGPU(table) => table.collect_metadata(metadata, footprint, element_id), + Graphic::Color(table) => table.collect_metadata(metadata, footprint, element_id), + Graphic::Gradient(table) => table.collect_metadata(metadata, footprint, element_id), } } fn add_upstream_click_targets(&self, click_targets: &mut Vec) { - for instance in self.instance_ref_iter() { - let mut new_click_targets = Vec::new(); - - instance.instance.add_upstream_click_targets(&mut new_click_targets); - - for click_target in new_click_targets.iter_mut() { - click_target.apply_transform(*instance.transform) - } - - click_targets.extend(new_click_targets); + match self { + Graphic::Graphic(table) => table.add_upstream_click_targets(click_targets), + Graphic::Vector(table) => table.add_upstream_click_targets(click_targets), + Graphic::RasterCPU(table) => table.add_upstream_click_targets(click_targets), + Graphic::RasterGPU(table) => table.add_upstream_click_targets(click_targets), + Graphic::Color(table) => table.add_upstream_click_targets(click_targets), + Graphic::Gradient(table) => table.add_upstream_click_targets(click_targets), } } fn contains_artboard(&self) -> bool { - self.instance_ref_iter().any(|instance| instance.instance.contains_artboard()) - } - - fn new_ids_from_hash(&mut self, _reference: Option) { - for instance in self.instance_mut_iter() { - instance.instance.new_ids_from_hash(*instance.source_node_id); - } - } -} - -impl GraphicElementRendered for VectorDataTable { - fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { - for instance in self.instance_ref_iter() { - let multiplied_transform = *instance.transform; - let vector_data = &instance.instance; - // Only consider strokes with non-zero weight, since default strokes with zero weight would prevent assigning the correct stroke transform - let has_real_stroke = vector_data.style.stroke().filter(|stroke| stroke.weight() > 0.); - let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.); - let applied_stroke_transform = set_stroke_transform.unwrap_or(*instance.transform); - let applied_stroke_transform = render_params.alignment_parent_transform.unwrap_or(applied_stroke_transform); - let element_transform = set_stroke_transform.map(|stroke_transform| multiplied_transform * stroke_transform.inverse()); - let element_transform = element_transform.unwrap_or(DAffine2::IDENTITY); - let layer_bounds = vector_data.bounding_box().unwrap_or_default(); - let transformed_bounds = vector_data.bounding_box_with_transform(applied_stroke_transform).unwrap_or_default(); - - let mut path = String::new(); - - for subpath in instance.instance.stroke_bezier_paths() { - let _ = subpath.subpath_to_svg(&mut path, applied_stroke_transform); - } - - let connected = vector_data.stroke_bezier_paths().all(|path| path.closed()); - let can_draw_aligned_stroke = vector_data.style.stroke().is_some_and(|stroke| stroke.has_renderable_stroke() && stroke.align.is_not_centered()) && connected; - let mut push_id = None; - - if can_draw_aligned_stroke { - let mask_type = if vector_data.style.stroke().unwrap().align == StrokeAlign::Inside { - MaskType::Clip - } else { - MaskType::Mask - }; - - let can_use_order = !instance.instance.style.fill().is_none() && mask_type == MaskType::Mask; - if !can_use_order { - let id = format!("alignment-{}", generate_uuid()); - - let mut fill_instance = instance.instance.clone(); - fill_instance.style.clear_stroke(); - fill_instance.style.set_fill(Fill::solid(Color::BLACK)); - - let vector_row = VectorDataTable::new_instance(Instance { - instance: fill_instance, - mask: None, - alpha_blending: *instance.alpha_blending, - transform: *instance.transform, - source_node_id: None, - }); - - push_id = Some((id, mask_type, vector_row)); - } - } - - render.leaf_tag("path", |attributes| { - attributes.push("d", path); - let matrix = format_transform_matrix(element_transform); - if !matrix.is_empty() { - attributes.push("transform", matrix); - } - - let defs = &mut attributes.0.svg_defs; - if let Some((ref id, mask_type, ref vector_row)) = push_id { - let mut svg = SvgRender::new(); - vector_row.render_svg(&mut svg, &render_params.for_alignment(applied_stroke_transform)); - - let weight = instance.instance.style.stroke().unwrap().weight * instance.transform.matrix2.determinant(); - let quad = Quad::from_box(transformed_bounds).inflate(weight); - let (x, y) = quad.top_left().into(); - let (width, height) = (quad.bottom_right() - quad.top_left()).into(); - write!(defs, r##"{}"##, svg.svg_defs).unwrap(); - let rect = format!(r##""##); - match mask_type { - MaskType::Clip => write!(defs, r##"{}"##, svg.svg.to_svg_string()).unwrap(), - MaskType::Mask => write!(defs, r##"{}{}"##, rect, svg.svg.to_svg_string()).unwrap(), - } - } - - let fill_and_stroke = instance.instance.style.render( - defs, - element_transform, - applied_stroke_transform, - layer_bounds, - transformed_bounds, - can_draw_aligned_stroke, - can_draw_aligned_stroke && push_id.is_none(), - render_params, - ); - - if let Some((id, mask_type, _)) = push_id { - let selector = format!("url(#{id})"); - attributes.push(mask_type.to_attribute(), selector); - } - - if let Some(mask) = instance.mask { - attributes.push_mask(mask, render_params.for_clipper()); - } - - attributes.push_val(fill_and_stroke); - - let factor = if render_params.for_mask { 1. } else { instance.alpha_blending.fill }; - let opacity = instance.alpha_blending.opacity * factor; - if opacity < 1. { - attributes.push("opacity", opacity.to_string()); - } - - if instance.alpha_blending.blend_mode != BlendMode::default() { - attributes.push("style", instance.alpha_blending.blend_mode.render()); - } - }); - } - } - - #[cfg(feature = "vello")] - fn render_to_vello(&self, scene: &mut Scene, parent_transform: DAffine2, _context: &mut RenderContext, render_params: &RenderParams) { - use graphene_core::consts::{LAYER_OUTLINE_STROKE_COLOR, LAYER_OUTLINE_STROKE_WEIGHT}; - use graphene_core::vector::style::{GradientType, StrokeCap, StrokeJoin}; - use vello::kurbo::{Cap, Join}; - use vello::peniko; - - for instance in self.instance_ref_iter() { - let multiplied_transform = parent_transform * *instance.transform; - let has_real_stroke = instance.instance.style.stroke().filter(|stroke| stroke.weight() > 0.); - let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.); - let applied_stroke_transform = set_stroke_transform.unwrap_or(multiplied_transform); - let applied_stroke_transform = render_params.alignment_parent_transform.unwrap_or(applied_stroke_transform); - let element_transform = set_stroke_transform.map(|stroke_transform| multiplied_transform * stroke_transform.inverse()); - let element_transform = element_transform.unwrap_or(DAffine2::IDENTITY); - let layer_bounds = instance.instance.bounding_box().unwrap_or_default(); - - let to_point = |p: DVec2| kurbo::Point::new(p.x, p.y); - let mut path = kurbo::BezPath::new(); - for subpath in instance.instance.stroke_bezier_paths() { - subpath.to_vello_path(applied_stroke_transform, &mut path); - } - - // If we're using opacity or a blend mode, we need to push a layer - let blend_mode = match render_params.view_mode { - ViewMode::Outline => peniko::Mix::Normal, - _ => instance.alpha_blending.blend_mode.to_peniko(), - }; - let mut layer = false; - let factor = if render_params.for_mask { 1. } else { instance.alpha_blending.fill }; - let opacity = instance.alpha_blending.opacity * factor; - if opacity < 1. || instance.alpha_blending.blend_mode != BlendMode::default() { - layer = true; - scene.push_layer( - peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver), - opacity, - kurbo::Affine::new(multiplied_transform.to_cols_array()), - &kurbo::Rect::new(layer_bounds[0].x, layer_bounds[0].y, layer_bounds[1].x, layer_bounds[1].y), - ); - } - - let mut masked = false; - if let Some(mask) = instance.mask { - let bounds = mask.bounding_box(element_transform, true); - - if let Some(bounds) = bounds { - masked = true; - let rect = vello::kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); - - scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); - mask.render_to_vello(scene, element_transform, _context, &render_params.for_clipper()); - scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect); - } - } - - let can_draw_aligned_stroke = instance.instance.style.stroke().is_some_and(|stroke| stroke.has_renderable_stroke() && stroke.align.is_not_centered()) - && instance.instance.stroke_bezier_paths().all(|path| path.closed()); - - let reorder_for_outside = instance - .instance - .style - .stroke() - .is_some_and(|stroke| stroke.align == StrokeAlign::Outside && !instance.instance.style.fill().is_none()); - if can_draw_aligned_stroke && !reorder_for_outside { - let mut fill_instance = instance.instance.clone(); - fill_instance.style.clear_stroke(); - fill_instance.style.set_fill(Fill::solid(Color::BLACK)); - - let vector_data = VectorDataTable::new_instance(Instance { - instance: fill_instance, - mask: None, - alpha_blending: *instance.alpha_blending, - transform: *instance.transform, - source_node_id: None, - }); - - let weight = instance.instance.style.stroke().unwrap().weight; - let quad = Quad::from_box(layer_bounds).inflate(weight * element_transform.matrix2.determinant()); - let rect = kurbo::Rect::new(quad.top_left().x, quad.top_left().y, quad.bottom_right().x, quad.bottom_right().y); - - let inside = instance.instance.style.stroke().unwrap().align == StrokeAlign::Inside; - let compose = if inside { peniko::Compose::SrcIn } else { peniko::Compose::SrcOut }; - scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); - vector_data.render_to_vello(scene, parent_transform, _context, &render_params.for_alignment(applied_stroke_transform)); - scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, compose), 1., kurbo::Affine::IDENTITY, &rect); - } - - // Render the path - match render_params.view_mode { - ViewMode::Outline => { - let outline_stroke = kurbo::Stroke { - width: LAYER_OUTLINE_STROKE_WEIGHT, - miter_limit: 4., - join: Join::Miter, - start_cap: Cap::Butt, - end_cap: Cap::Butt, - dash_pattern: Default::default(), - dash_offset: 0., - }; - let outline_color = peniko::Color::new([ - LAYER_OUTLINE_STROKE_COLOR.r(), - LAYER_OUTLINE_STROKE_COLOR.g(), - LAYER_OUTLINE_STROKE_COLOR.b(), - LAYER_OUTLINE_STROKE_COLOR.a(), - ]); - - scene.stroke(&outline_stroke, kurbo::Affine::new(element_transform.to_cols_array()), outline_color, None, &path); - } - _ => { - enum Op { - Fill, - Stroke, - } - - let order = match instance.instance.style.stroke().is_some_and(|stroke| !stroke.paint_order.is_default()) || reorder_for_outside { - true => [Op::Stroke, Op::Fill], - false => [Op::Fill, Op::Stroke], // Default - }; - for operation in order { - match operation { - Op::Fill => { - match instance.instance.style.fill() { - Fill::Solid(color) => { - let fill = peniko::Brush::Solid(peniko::Color::new([color.r(), color.g(), color.b(), color.a()])); - scene.fill(peniko::Fill::NonZero, kurbo::Affine::new(element_transform.to_cols_array()), &fill, None, &path); - } - Fill::Gradient(gradient) => { - let mut stops = peniko::ColorStops::new(); - for &(offset, color) in &gradient.stops { - stops.push(peniko::ColorStop { - offset: offset as f32, - color: peniko::color::DynamicColor::from_alpha_color(peniko::Color::new([color.r(), color.g(), color.b(), color.a()])), - }); - } - // Compute bounding box of the shape to determine the gradient start and end points - let bounds = instance.instance.nonzero_bounding_box(); - let bound_transform = DAffine2::from_scale_angle_translation(bounds[1] - bounds[0], 0., bounds[0]); - - let inverse_parent_transform = if parent_transform.matrix2.determinant() != 0. { - parent_transform.inverse() - } else { - Default::default() - }; - let mod_points = inverse_parent_transform * multiplied_transform * bound_transform; - - let start = mod_points.transform_point2(gradient.start); - let end = mod_points.transform_point2(gradient.end); - - let fill = peniko::Brush::Gradient(peniko::Gradient { - kind: match gradient.gradient_type { - GradientType::Linear => peniko::GradientKind::Linear { - start: to_point(start), - end: to_point(end), - }, - GradientType::Radial => { - let radius = start.distance(end); - peniko::GradientKind::Radial { - start_center: to_point(start), - start_radius: 0., - end_center: to_point(start), - end_radius: radius as f32, - } - } - }, - stops, - ..Default::default() - }); - // Vello does `element_transform * brush_transform` internally. We don't want element_transform to have any impact so we need to left multiply by the inverse. - // This makes the final internal brush transform equal to `parent_transform`, allowing you to stretch a gradient by transforming the parent folder. - let inverse_element_transform = if element_transform.matrix2.determinant() != 0. { - element_transform.inverse() - } else { - Default::default() - }; - let brush_transform = kurbo::Affine::new((inverse_element_transform * parent_transform).to_cols_array()); - scene.fill(peniko::Fill::NonZero, kurbo::Affine::new(element_transform.to_cols_array()), &fill, Some(brush_transform), &path); - } - Fill::None => {} - }; - } - Op::Stroke => { - if let Some(stroke) = instance.instance.style.stroke() { - let color = match stroke.color { - Some(color) => peniko::Color::new([color.r(), color.g(), color.b(), color.a()]), - None => peniko::Color::TRANSPARENT, - }; - let cap = match stroke.cap { - StrokeCap::Butt => Cap::Butt, - StrokeCap::Round => Cap::Round, - StrokeCap::Square => Cap::Square, - }; - let join = match stroke.join { - StrokeJoin::Miter => Join::Miter, - StrokeJoin::Bevel => Join::Bevel, - StrokeJoin::Round => Join::Round, - }; - let stroke = kurbo::Stroke { - width: stroke.weight * if can_draw_aligned_stroke { 2. } else { 1. }, - miter_limit: stroke.join_miter_limit, - join, - start_cap: cap, - end_cap: cap, - dash_pattern: stroke.dash_lengths.into(), - dash_offset: stroke.dash_offset, - }; - - // Draw the stroke if it's visible - if stroke.width > 0. { - scene.stroke(&stroke, kurbo::Affine::new(element_transform.to_cols_array()), color, None, &path); - } - } - } - } - } - } - } - - if can_draw_aligned_stroke { - scene.pop_layer(); - scene.pop_layer(); - } - - if masked { - scene.pop_layer(); - scene.pop_layer(); - } - - // If we pushed a layer for opacity or a blend mode, we need to pop it - if layer { - scene.pop_layer(); - } - } - } - - fn collect_metadata(&self, metadata: &mut RenderMetadata, mut footprint: Footprint, element_id: Option) { - for instance in self.instance_ref_iter() { - let instance_transform = *instance.transform; - let instance = instance.instance; - - if let Some(element_id) = element_id { - let stroke_width = instance.style.stroke().as_ref().map_or(0., Stroke::weight); - let filled = instance.style.fill() != &Fill::None; - let fill = |mut subpath: Subpath<_>| { - if filled { - subpath.set_closed(true); - } - subpath - }; - - // For free-floating anchors, we need to add a click target for each - let single_anchors_targets = instance.point_domain.ids().iter().filter_map(|&point_id| { - if instance.connected_count(point_id) == 0 { - let anchor = instance.point_domain.position_from_id(point_id).unwrap_or_default(); - let point = FreePoint::new(point_id, anchor); - - Some(ClickTarget::new_with_free_point(point)) - } else { - None - } - }); - - let click_targets = instance - .stroke_bezier_paths() - .map(fill) - .map(|subpath| ClickTarget::new_with_subpath(subpath, stroke_width)) - .chain(single_anchors_targets.into_iter()) - .collect::>(); - - metadata.click_targets.entry(element_id).or_insert(click_targets); - } - - if let Some(upstream_graphic_group) = &instance.upstream_graphic_group { - footprint.transform *= instance_transform; - upstream_graphic_group.collect_metadata(metadata, footprint, None); - } - } - } - - fn add_upstream_click_targets(&self, click_targets: &mut Vec) { - for instance in self.instance_ref_iter() { - let stroke_width = instance.instance.style.stroke().as_ref().map_or(0., Stroke::weight); - let filled = instance.instance.style.fill() != &Fill::None; - let fill = |mut subpath: Subpath<_>| { - if filled { - subpath.set_closed(true); - } - subpath - }; - click_targets.extend(instance.instance.stroke_bezier_paths().map(fill).map(|subpath| { - let mut click_target = ClickTarget::new_with_subpath(subpath, stroke_width); - click_target.apply_transform(*instance.transform); - click_target - })); - - // For free-floating anchors, we need to add a click target for each - let single_anchors_targets = instance.instance.point_domain.ids().iter().filter_map(|&point_id| { - if instance.instance.connected_count(point_id) > 0 { - return None; - } - - let anchor = instance.instance.point_domain.position_from_id(point_id).unwrap_or_default(); - let point = FreePoint::new(point_id, anchor); - - let mut click_target = ClickTarget::new_with_free_point(point); - click_target.apply_transform(*instance.transform); - Some(click_target) - }); - click_targets.extend(single_anchors_targets); + match self { + Graphic::Graphic(table) => table.contains_artboard(), + Graphic::Vector(table) => table.contains_artboard(), + Graphic::RasterCPU(table) => table.contains_artboard(), + Graphic::RasterGPU(table) => table.contains_artboard(), + Graphic::Color(table) => table.contains_artboard(), + Graphic::Gradient(table) => table.contains_artboard(), } } fn new_ids_from_hash(&mut self, reference: Option) { - for instance in self.instance_mut_iter() { - instance.instance.vector_new_ids_from_hash(reference.map(|id| id.0).unwrap_or_default()); + match self { + Graphic::Graphic(table) => table.new_ids_from_hash(reference), + Graphic::Vector(table) => table.new_ids_from_hash(reference), + Graphic::RasterCPU(_) => (), + Graphic::RasterGPU(_) => (), + Graphic::Color(_) => (), + Graphic::Gradient(_) => (), } } } -impl GraphicElementRendered for Artboard { +impl Render for Artboard { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { + // Rectangle for the artboard if !render_params.hide_artboards { // Background render.leaf_tag("rect", |attributes| { @@ -877,7 +381,7 @@ impl GraphicElementRendered for Artboard { }); } - // Contents group (includes the artwork but not the background) + // Artwork render.parent_tag( // SVG group tag "g", @@ -901,9 +405,9 @@ impl GraphicElementRendered for Artboard { attributes.push("clip-path", selector); } }, - // Artboard contents + // Artwork content |render| { - self.graphic_group.render_svg(render, render_params); + self.content.render_svg(render, render_params); }, ); } @@ -925,9 +429,9 @@ impl GraphicElementRendered for Artboard { let blend_mode = peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcOver); scene.push_layer(blend_mode, 1., kurbo::Affine::new(transform.to_cols_array()), &rect); } - // Since the graphic group's transform is right multiplied in when rendering the graphic group, we just need to right multiply by the offset here. + // Since the content's transform is right multiplied in when rendering the content, we just need to right multiply by the artboard offset here. let child_transform = transform * DAffine2::from_translation(self.location.as_dvec2()); - self.graphic_group.render_to_vello(scene, child_transform, context, render_params); + self.content.render_to_vello(scene, child_transform, context, render_params); if self.clip { scene.pop_layer(); } @@ -944,7 +448,7 @@ impl GraphicElementRendered for Artboard { } } footprint.transform *= self.transform(); - self.graphic_group.collect_metadata(metadata, footprint, None); + self.content.collect_metadata(metadata, footprint, None); } fn add_upstream_click_targets(&self, click_targets: &mut Vec) { @@ -957,85 +461,838 @@ impl GraphicElementRendered for Artboard { } } -impl GraphicElementRendered for ArtboardGroupTable { +impl Render for Table { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { - for artboard in self.instance_ref_iter() { - artboard.instance.render_svg(render, render_params); + for artboard in self.iter() { + artboard.element.render_svg(render, render_params); } } #[cfg(feature = "vello")] fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, render_params: &RenderParams) { - for instance in self.instance_ref_iter() { - instance.instance.render_to_vello(scene, transform, context, render_params); + for row in self.iter() { + row.element.render_to_vello(scene, transform, context, render_params); } } fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, _element_id: Option) { - for instance in self.instance_ref_iter() { - instance.instance.collect_metadata(metadata, footprint, *instance.source_node_id); + for row in self.iter() { + row.element.collect_metadata(metadata, footprint, *row.source_node_id); } } fn add_upstream_click_targets(&self, click_targets: &mut Vec) { - for instance in self.instance_ref_iter() { - instance.instance.add_upstream_click_targets(click_targets); + for row in self.iter() { + row.element.add_upstream_click_targets(click_targets); } } fn contains_artboard(&self) -> bool { - self.instance_ref_iter().count() > 0 + self.iter().count() > 0 } } -impl GraphicElementRendered for RasterDataTable { +impl Render for Table { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { - for instance in self.instance_ref_iter() { - let transform = *instance.transform; + let mut iter = self.iter().peekable(); + let mut mask_state = None; - let image = &instance.instance; - if image.data.is_empty() { - return; - } - - let base64_string = image.base64_string.clone().unwrap_or_else(|| { - use base64::Engine; - - let output = image.to_png(); - let preamble = "data:image/png;base64,"; - let mut base64_string = String::with_capacity(preamble.len() + output.len() * 4); - base64_string.push_str(preamble); - base64::engine::general_purpose::STANDARD.encode_string(output, &mut base64_string); - base64_string - }); - - let render_image = |render: &mut SvgRender| { - render.leaf_tag("image", |attributes| { - attributes.push("width", 1.to_string()); - attributes.push("height", 1.to_string()); - attributes.push("preserveAspectRatio", "none"); - attributes.push("href", base64_string); - let matrix = format_transform_matrix(transform); + while let Some(row) = iter.next() { + render.parent_tag( + "g", + |attributes| { + let matrix = format_transform_matrix(*row.transform); if !matrix.is_empty() { attributes.push("transform", matrix); } - let factor = if render_params.for_mask { 1. } else { instance.alpha_blending.fill }; - let opacity = instance.alpha_blending.opacity * factor; + + let opacity = row.alpha_blending.opacity(render_params.for_mask); if opacity < 1. { attributes.push("opacity", opacity.to_string()); } - if instance.alpha_blending.blend_mode != BlendMode::default() { - attributes.push("style", instance.alpha_blending.blend_mode.render()); + + if row.alpha_blending.blend_mode != BlendMode::default() { + attributes.push("style", row.alpha_blending.blend_mode.render()); } - }) + + let next_clips = iter.peek().is_some_and(|next_row| next_row.element.had_clip_enabled()); + + if next_clips && mask_state.is_none() { + let uuid = generate_uuid(); + let mask_type = if row.element.can_reduce_to_clip_path() { MaskType::Clip } else { MaskType::Mask }; + mask_state = Some((uuid, mask_type)); + let mut svg = SvgRender::new(); + row.element.render_svg(&mut svg, &render_params.for_clipper()); + + write!(&mut attributes.0.svg_defs, r##"{}"##, svg.svg_defs).unwrap(); + mask_type.write_to_defs(&mut attributes.0.svg_defs, uuid, svg.svg.to_svg_string()); + } else if let Some((uuid, mask_type)) = mask_state { + if !next_clips { + mask_state = None; + } + + let id = format!("mask-{uuid}"); + let selector = format!("url(#{id})"); + + attributes.push(mask_type.to_attribute(), selector); + } + + if let Some(mask) = row.mask { + attributes.push_mask(mask, render_params.for_clipper()); + } + }, + |render| { + row.element.render_svg(render, render_params); + }, + ); + } + } + + #[cfg(feature = "vello")] + fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, render_params: &RenderParams) { + let mut iter = self.iter().peekable(); + let mut mask_element_and_transform = None; + + while let Some(row) = iter.next() { + let transform = transform * *row.transform; + let alpha_blending = *row.alpha_blending; + + let mut layer = false; + + let blend_mode = match render_params.view_mode { + ViewMode::Outline => peniko::Mix::Normal, + _ => alpha_blending.blend_mode.to_peniko(), + }; + let mut bounds = RenderBoundingBox::None; + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. || (render_params.view_mode != ViewMode::Outline && alpha_blending.blend_mode != BlendMode::default()) { + bounds = row.element.bounding_box(transform, true); + + if let RenderBoundingBox::Rectangle(bounds) = bounds { + scene.push_layer( + peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver), + opacity, + kurbo::Affine::IDENTITY, + &kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y), + ); + layer = true; + } + } + + let mut masked = false; + if let Some(mask) = row.mask { + let bounds = mask.bounding_box(transform, true); + + if let RenderBoundingBox::Rectangle(bounds) = bounds { + masked = true; + let rect = vello::kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + + scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + mask.render_to_vello(scene, transform, context, &render_params.for_clipper()); + scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect); + } + } + + let next_clips = iter.peek().is_some_and(|next_row| next_row.element.had_clip_enabled()); + if next_clips && mask_element_and_transform.is_none() { + mask_element_and_transform = Some((row.element, transform)); + + row.element.render_to_vello(scene, transform, context, render_params); + } else if let Some((mask_element, transform_mask)) = mask_element_and_transform { + if !next_clips { + mask_element_and_transform = None; + } + if !layer { + bounds = row.element.bounding_box(transform, true); + } + + if let RenderBoundingBox::Rectangle(bounds) = bounds { + let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + + scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + mask_element.render_to_vello(scene, transform_mask, context, &render_params.for_clipper()); + scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect); + } + + row.element.render_to_vello(scene, transform, context, render_params); + + if matches!(bounds, RenderBoundingBox::Rectangle(_)) { + scene.pop_layer(); + scene.pop_layer(); + } + } else { + row.element.render_to_vello(scene, transform, context, render_params); + } + + if masked { + scene.pop_layer(); + scene.pop_layer(); + } + + if layer { + scene.pop_layer(); + } + } + } + + fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option) { + for row in self.iter() { + if let Some(element_id) = row.source_node_id { + let mut footprint = footprint; + footprint.transform *= *row.transform; + + row.element.collect_metadata(metadata, footprint, Some(*element_id)); + } + } + + if let Some(element_id) = element_id { + let mut all_upstream_click_targets = Vec::new(); + + for row in self.iter() { + let mut new_click_targets = Vec::new(); + row.element.add_upstream_click_targets(&mut new_click_targets); + + for click_target in new_click_targets.iter_mut() { + click_target.apply_transform(*row.transform) + } + + all_upstream_click_targets.extend(new_click_targets); + } + + metadata.click_targets.insert(element_id, all_upstream_click_targets); + } + } + + fn add_upstream_click_targets(&self, click_targets: &mut Vec) { + for row in self.iter() { + let mut new_click_targets = Vec::new(); + + row.element.add_upstream_click_targets(&mut new_click_targets); + + for click_target in new_click_targets.iter_mut() { + click_target.apply_transform(*row.transform) + } + + click_targets.extend(new_click_targets); + } + } + + fn contains_artboard(&self) -> bool { + self.iter().any(|row| row.element.contains_artboard()) + } + + fn new_ids_from_hash(&mut self, _reference: Option) { + for row in self.iter_mut() { + row.element.new_ids_from_hash(*row.source_node_id); + } + } +} + +impl Render for Table { + fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { + for row in self.iter() { + let multiplied_transform = *row.transform; + let vector = &row.element; + // Only consider strokes with non-zero weight, since default strokes with zero weight would prevent assigning the correct stroke transform + let has_real_stroke = vector.style.stroke().filter(|stroke| stroke.weight() > 0.); + let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.); + let applied_stroke_transform = set_stroke_transform.unwrap_or(*row.transform); + let applied_stroke_transform = render_params.alignment_parent_transform.unwrap_or(applied_stroke_transform); + let element_transform = set_stroke_transform.map(|stroke_transform| multiplied_transform * stroke_transform.inverse()); + let element_transform = element_transform.unwrap_or(DAffine2::IDENTITY); + let layer_bounds = vector.bounding_box().unwrap_or_default(); + let transformed_bounds = vector.bounding_box_with_transform(applied_stroke_transform).unwrap_or_default(); + + let bounds_matrix = DAffine2::from_scale_angle_translation(layer_bounds[1] - layer_bounds[0], 0., layer_bounds[0]); + let transformed_bounds_matrix = element_transform * DAffine2::from_scale_angle_translation(transformed_bounds[1] - transformed_bounds[0], 0., transformed_bounds[0]); + + let mut path = String::new(); + + for mut bezpath in row.element.stroke_bezpath_iter() { + bezpath.apply_affine(Affine::new(applied_stroke_transform.to_cols_array())); + path.push_str(bezpath.to_svg().as_str()); + } + + let mask_type = if vector.style.stroke().map(|x| x.align) == Some(StrokeAlign::Inside) { + MaskType::Clip + } else { + MaskType::Mask }; - // Unlike path and g elements, the mask attribute of image element is broken and - // behaves differently across different browsers. And so we use g to have it work correctly. - if let Some(mask) = instance.mask { - render.parent_tag("g", |attributes| attributes.push_mask(mask, render_params.for_clipper()), render_image); + let path_is_closed = vector.stroke_bezier_paths().all(|path| path.closed()); + let can_draw_aligned_stroke = path_is_closed && vector.style.stroke().is_some_and(|stroke| stroke.has_renderable_stroke() && stroke.align.is_not_centered()); + let can_use_paint_order = !(row.element.style.fill().is_none() || !row.element.style.fill().is_opaque() || mask_type == MaskType::Clip); + + let needs_separate_fill = can_draw_aligned_stroke && !can_use_paint_order; + let wants_stroke_below = vector.style.stroke().map(|s| s.paint_order) == Some(PaintOrder::StrokeBelow); + + if needs_separate_fill && !wants_stroke_below { + render.leaf_tag("path", |attributes| { + attributes.push("d", path.clone()); + let matrix = format_transform_matrix(element_transform); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + let mut style = row.element.style.clone(); + style.clear_stroke(); + let fill_and_stroke = style.render( + &mut attributes.0.svg_defs, + element_transform, + applied_stroke_transform, + bounds_matrix, + transformed_bounds_matrix, + &render_params, + ); + attributes.push_val(fill_and_stroke); + }); + } + + let push_id = needs_separate_fill.then_some({ + let id = format!("alignment-{}", generate_uuid()); + + let mut element = row.element.clone(); + element.style.clear_stroke(); + element.style.set_fill(Fill::solid(Color::BLACK)); + + let vector_row = Table::new_from_row(TableRow { + element, + mask: None, + alpha_blending: *row.alpha_blending, + transform: *row.transform, + source_node_id: None, + }); + + (id, mask_type, vector_row) + }); + + render.leaf_tag("path", |attributes| { + attributes.push("d", path.clone()); + let matrix = format_transform_matrix(element_transform); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + + let defs = &mut attributes.0.svg_defs; + if let Some((ref id, mask_type, ref vector_row)) = push_id { + let mut svg = SvgRender::new(); + vector_row.render_svg(&mut svg, &render_params.for_alignment(applied_stroke_transform)); + let stroke = row.element.style.stroke().unwrap(); + let weight = stroke.effective_width() * max_scale(applied_stroke_transform); + let quad = Quad::from_box(transformed_bounds).inflate(weight); + let (x, y) = quad.top_left().into(); + let (width, height) = (quad.bottom_right() - quad.top_left()).into(); + + write!(defs, r##"{}"##, svg.svg_defs).unwrap(); + let rect = format!(r##""##); + + match mask_type { + MaskType::Clip => write!(defs, r##"{}"##, svg.svg.to_svg_string()).unwrap(), + MaskType::Mask => write!( + defs, + r##"{}{}"##, + rect, + svg.svg.to_svg_string() + ) + .unwrap(), + } + } + + let mut render_params = render_params.clone(); + render_params.aligned_strokes = can_draw_aligned_stroke; + render_params.override_paint_order = can_draw_aligned_stroke && can_use_paint_order; + + let mut style = row.element.style.clone(); + if needs_separate_fill { + style.clear_fill(); + } + + let fill_and_stroke = style.render(defs, element_transform, applied_stroke_transform, bounds_matrix, transformed_bounds_matrix, &render_params); + + if let Some((id, mask_type, _)) = push_id { + let selector = format!("url(#{id})"); + attributes.push(mask_type.to_attribute(), selector); + } + + if let Some(mask) = row.mask { + attributes.push_mask(mask, render_params.for_clipper()); + } + + attributes.push_val(fill_and_stroke); + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. { + attributes.push("opacity", opacity.to_string()); + } + + if row.alpha_blending.blend_mode != BlendMode::default() { + attributes.push("style", row.alpha_blending.blend_mode.render()); + } + }); + + // When splitting passes and stroke is below, draw the fill after the stroke. + if needs_separate_fill && wants_stroke_below { + render.leaf_tag("path", |attributes| { + attributes.push("d", path); + let matrix = format_transform_matrix(element_transform); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + let mut style = row.element.style.clone(); + style.clear_stroke(); + let fill_and_stroke = style.render( + &mut attributes.0.svg_defs, + element_transform, + applied_stroke_transform, + bounds_matrix, + transformed_bounds_matrix, + &render_params, + ); + attributes.push_val(fill_and_stroke); + }); + } + } + } + + #[cfg(feature = "vello")] + fn render_to_vello(&self, scene: &mut Scene, parent_transform: DAffine2, _context: &mut RenderContext, render_params: &RenderParams) { + use graphene_core::consts::{LAYER_OUTLINE_STROKE_COLOR, LAYER_OUTLINE_STROKE_WEIGHT}; + use graphene_core::vector::style::{GradientType, StrokeCap, StrokeJoin}; + use vello::kurbo::{Cap, Join}; + use vello::peniko; + + for row in self.iter() { + let multiplied_transform = parent_transform * *row.transform; + let has_real_stroke = row.element.style.stroke().filter(|stroke| stroke.weight() > 0.); + let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.); + let applied_stroke_transform = set_stroke_transform.unwrap_or(multiplied_transform); + let applied_stroke_transform = render_params.alignment_parent_transform.unwrap_or(applied_stroke_transform); + let element_transform = set_stroke_transform.map(|stroke_transform| multiplied_transform * stroke_transform.inverse()); + let element_transform = element_transform.unwrap_or(DAffine2::IDENTITY); + let layer_bounds = row.element.bounding_box().unwrap_or_default(); + + let to_point = |p: DVec2| kurbo::Point::new(p.x, p.y); + let mut path = kurbo::BezPath::new(); + for mut bezpath in row.element.stroke_bezpath_iter() { + bezpath.apply_affine(Affine::new(applied_stroke_transform.to_cols_array())); + for element in bezpath { + path.push(element); + } + } + + // If we're using opacity or a blend mode, we need to push a layer + let blend_mode = match render_params.view_mode { + ViewMode::Outline => peniko::Mix::Normal, + _ => row.alpha_blending.blend_mode.to_peniko(), + }; + let mut layer = false; + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. || row.alpha_blending.blend_mode != BlendMode::default() { + layer = true; + let weight = row.element.style.stroke().unwrap().effective_width(); + let quad = Quad::from_box(layer_bounds).inflate(weight * max_scale(applied_stroke_transform)); + let layer_bounds = quad.bounding_box(); + scene.push_layer( + peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver), + opacity, + kurbo::Affine::new(multiplied_transform.to_cols_array()), + &kurbo::Rect::new(layer_bounds[0].x, layer_bounds[0].y, layer_bounds[1].x, layer_bounds[1].y), + ); + } + + let mut masked = false; + if let Some(mask) = row.mask { + let bounds = mask.bounding_box(element_transform, true); + + if let RenderBoundingBox::Rectangle(bounds) = bounds { + masked = true; + let rect = vello::kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + + scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + mask.render_to_vello(scene, element_transform, _context, &render_params.for_clipper()); + scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, peniko::Compose::SrcIn), 1., kurbo::Affine::IDENTITY, &rect); + } + } + + let can_draw_aligned_stroke = + row.element.style.stroke().is_some_and(|stroke| stroke.has_renderable_stroke() && stroke.align.is_not_centered()) && row.element.stroke_bezier_paths().all(|path| path.closed()); + + let use_layer = can_draw_aligned_stroke; + let wants_stroke_below = row.element.style.stroke().is_some_and(|s| s.paint_order == graphene_core::vector::style::PaintOrder::StrokeBelow); + + // Closures to avoid duplicated fill/stroke drawing logic + let do_fill = |scene: &mut Scene| match row.element.style.fill() { + Fill::Solid(color) => { + let fill = peniko::Brush::Solid(peniko::Color::new([color.r(), color.g(), color.b(), color.a()])); + scene.fill(peniko::Fill::NonZero, kurbo::Affine::new(element_transform.to_cols_array()), &fill, None, &path); + } + Fill::Gradient(gradient) => { + let mut stops = peniko::ColorStops::new(); + for &(offset, color) in &gradient.stops { + stops.push(peniko::ColorStop { + offset: offset as f32, + color: peniko::color::DynamicColor::from_alpha_color(peniko::Color::new([color.r(), color.g(), color.b(), color.a()])), + }); + } + + let bounds = row.element.nonzero_bounding_box(); + let bound_transform = DAffine2::from_scale_angle_translation(bounds[1] - bounds[0], 0., bounds[0]); + + let inverse_parent_transform = if parent_transform.matrix2.determinant() != 0. { + parent_transform.inverse() + } else { + Default::default() + }; + let mod_points = inverse_parent_transform * multiplied_transform * bound_transform; + + let start = mod_points.transform_point2(gradient.start); + let end = mod_points.transform_point2(gradient.end); + + let fill = peniko::Brush::Gradient(peniko::Gradient { + kind: match gradient.gradient_type { + GradientType::Linear => peniko::GradientKind::Linear { + start: to_point(start), + end: to_point(end), + }, + GradientType::Radial => { + let radius = start.distance(end); + peniko::GradientKind::Radial { + start_center: to_point(start), + start_radius: 0., + end_center: to_point(start), + end_radius: radius as f32, + } + } + }, + stops, + ..Default::default() + }); + let inverse_element_transform = if element_transform.matrix2.determinant() != 0. { + element_transform.inverse() + } else { + Default::default() + }; + let brush_transform = kurbo::Affine::new((inverse_element_transform * parent_transform).to_cols_array()); + scene.fill(peniko::Fill::NonZero, kurbo::Affine::new(element_transform.to_cols_array()), &fill, Some(brush_transform), &path); + } + Fill::None => {} + }; + + let do_stroke = |scene: &mut Scene, width_scale: f64| { + if let Some(stroke) = row.element.style.stroke() { + let color = match stroke.color { + Some(color) => peniko::Color::new([color.r(), color.g(), color.b(), color.a()]), + None => peniko::Color::TRANSPARENT, + }; + let cap = match stroke.cap { + StrokeCap::Butt => Cap::Butt, + StrokeCap::Round => Cap::Round, + StrokeCap::Square => Cap::Square, + }; + let join = match stroke.join { + StrokeJoin::Miter => Join::Miter, + StrokeJoin::Bevel => Join::Bevel, + StrokeJoin::Round => Join::Round, + }; + let stroke = kurbo::Stroke { + width: stroke.weight * width_scale, + miter_limit: stroke.join_miter_limit, + join, + start_cap: cap, + end_cap: cap, + dash_pattern: stroke.dash_lengths.into(), + dash_offset: stroke.dash_offset, + }; + + if stroke.width > 0. { + scene.stroke(&stroke, kurbo::Affine::new(element_transform.to_cols_array()), color, None, &path); + } + } + }; + + // Render the path + match render_params.view_mode { + ViewMode::Outline => { + let outline_stroke = kurbo::Stroke { + width: LAYER_OUTLINE_STROKE_WEIGHT, + miter_limit: 4., + join: Join::Miter, + start_cap: Cap::Butt, + end_cap: Cap::Butt, + dash_pattern: Default::default(), + dash_offset: 0., + }; + let outline_color = peniko::Color::new([ + LAYER_OUTLINE_STROKE_COLOR.r(), + LAYER_OUTLINE_STROKE_COLOR.g(), + LAYER_OUTLINE_STROKE_COLOR.b(), + LAYER_OUTLINE_STROKE_COLOR.a(), + ]); + + scene.stroke(&outline_stroke, kurbo::Affine::new(element_transform.to_cols_array()), outline_color, None, &path); + } + _ => { + if use_layer { + let mut element = row.element.clone(); + element.style.clear_stroke(); + element.style.set_fill(Fill::solid(Color::BLACK)); + + let vector_table = Table::new_from_row(TableRow { + element, + mask: None, + alpha_blending: *row.alpha_blending, + transform: *row.transform, + source_node_id: None, + }); + + let bounds = row.element.bounding_box_with_transform(multiplied_transform).unwrap_or(layer_bounds); + let weight = row.element.style.stroke().unwrap().effective_width(); + let quad = Quad::from_box(bounds).inflate(weight * max_scale(applied_stroke_transform)); + let bounds = quad.bounding_box(); + let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + + let compose = if row.element.style.stroke().is_some_and(|x| x.align == StrokeAlign::Outside) { + peniko::Compose::SrcOut + } else { + peniko::Compose::SrcIn + }; + + if wants_stroke_below { + scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + vector_table.render_to_vello(scene, parent_transform, _context, &render_params.for_alignment(applied_stroke_transform)); + scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, compose), 1., kurbo::Affine::IDENTITY, &rect); + + do_stroke(scene, 2.); + + scene.pop_layer(); + scene.pop_layer(); + + do_fill(scene); + } else { + // Fill first (unclipped), then stroke (clipped) above + do_fill(scene); + + scene.push_layer(peniko::Mix::Normal, 1., kurbo::Affine::IDENTITY, &rect); + vector_table.render_to_vello(scene, parent_transform, _context, &render_params.for_alignment(applied_stroke_transform)); + scene.push_layer(peniko::BlendMode::new(peniko::Mix::Clip, compose), 1., kurbo::Affine::IDENTITY, &rect); + + do_stroke(scene, 2.); + + scene.pop_layer(); + scene.pop_layer(); + } + } else { + // Non-aligned strokes or open paths: default order behavior + enum Op { + Fill, + Stroke, + } + + let order = match row.element.style.stroke().is_some_and(|stroke| !stroke.paint_order.is_default()) { + true => [Op::Stroke, Op::Fill], + false => [Op::Fill, Op::Stroke], // Default + }; + + for operation in order { + match operation { + Op::Fill => do_fill(scene), + Op::Stroke => do_stroke(scene, 1.), + } + } + } + } + } + + if masked { + scene.pop_layer(); + scene.pop_layer(); + } + + // If we pushed a layer for opacity or a blend mode, we need to pop it + if layer { + scene.pop_layer(); + } + } + } + + fn collect_metadata(&self, metadata: &mut RenderMetadata, mut footprint: Footprint, element_id: Option) { + for row in self.iter() { + let transform = *row.transform; + let vector = row.element; + + if let Some(element_id) = element_id { + let stroke_width = vector.style.stroke().as_ref().map_or(0., Stroke::effective_width); + let filled = vector.style.fill() != &Fill::None; + let fill = |mut subpath: Subpath<_>| { + if filled { + subpath.set_closed(true); + } + subpath + }; + + // For free-floating anchors, we need to add a click target for each + let single_anchors_targets = vector.point_domain.ids().iter().filter_map(|&point_id| { + if vector.connected_count(point_id) == 0 { + let anchor = vector.point_domain.position_from_id(point_id).unwrap_or_default(); + let point = FreePoint::new(point_id, anchor); + + Some(ClickTarget::new_with_free_point(point)) + } else { + None + } + }); + + let click_targets = vector + .stroke_bezier_paths() + .map(fill) + .map(|subpath| ClickTarget::new_with_subpath(subpath, stroke_width)) + .chain(single_anchors_targets.into_iter()) + .collect::>(); + + metadata.click_targets.entry(element_id).or_insert(click_targets); + } + + if let Some(upstream_nested_layers) = &vector.upstream_nested_layers { + footprint.transform *= transform; + upstream_nested_layers.collect_metadata(metadata, footprint, None); + } + } + } + + fn add_upstream_click_targets(&self, click_targets: &mut Vec) { + for row in self.iter() { + let stroke_width = row.element.style.stroke().as_ref().map_or(0., Stroke::effective_width); + let filled = row.element.style.fill() != &Fill::None; + let fill = |mut subpath: Subpath<_>| { + if filled { + subpath.set_closed(true); + } + subpath + }; + click_targets.extend(row.element.stroke_bezier_paths().map(fill).map(|subpath| { + let mut click_target = ClickTarget::new_with_subpath(subpath, stroke_width); + click_target.apply_transform(*row.transform); + click_target + })); + + // For free-floating anchors, we need to add a click target for each + let single_anchors_targets = row.element.point_domain.ids().iter().filter_map(|&point_id| { + if row.element.connected_count(point_id) > 0 { + return None; + } + + let anchor = row.element.point_domain.position_from_id(point_id).unwrap_or_default(); + let point = FreePoint::new(point_id, anchor); + + let mut click_target = ClickTarget::new_with_free_point(point); + click_target.apply_transform(*row.transform); + Some(click_target) + }); + click_targets.extend(single_anchors_targets); + } + } + + fn new_ids_from_hash(&mut self, reference: Option) { + for row in self.iter_mut() { + row.element.vector_new_ids_from_hash(reference.map(|id| id.0).unwrap_or_default()); + } + } +} + +impl Render for Table> { + fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { + for row in self.iter() { + let image = row.element; + let transform = *row.transform; + + if image.data.is_empty() { + continue; + } + + if render_params.to_canvas() { + let id = row.source_node_id.map(|x| x.0).unwrap_or_else(|| { + let mut state = DefaultHasher::new(); + image.data().hash(&mut state); + state.finish() + }); + if !render.image_data.iter().any(|(old_id, _)| *old_id == id) { + let mut image = image.data().clone(); + image.map_pixels(|p| p.to_unassociated_alpha()); + render.image_data.push((id, image)); + } + render.parent_tag( + "foreignObject", + |attributes| { + let mut transform_values = transform.to_scale_angle_translation(); + let size = DVec2::new(image.width as f64, image.height as f64); + transform_values.0 /= size; + + let matrix = DAffine2::from_scale_angle_translation(transform_values.0, transform_values.1, transform_values.2); + let matrix = format_transform_matrix(matrix); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + + attributes.push("width", size.x.to_string()); + attributes.push("height", size.y.to_string()); + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. { + attributes.push("opacity", opacity.to_string()); + } + + if row.alpha_blending.blend_mode != BlendMode::default() { + attributes.push("style", row.alpha_blending.blend_mode.render()); + } + }, + |render| { + render.leaf_tag( + "img", // Must be a self-closing (void element) tag, so we can't use `div` or `span`, for example + |attributes| { + attributes.push("data-canvas-placeholder", id.to_string()); + }, + ) + }, + ); } else { - render_image(render) + let base64_string = image.base64_string.clone().unwrap_or_else(|| { + use base64::Engine; + + let output = image.to_png(); + let preamble = "data:image/png;base64,"; + let mut base64_string = String::with_capacity(preamble.len() + output.len() * 4); + base64_string.push_str(preamble); + base64::engine::general_purpose::STANDARD.encode_string(output, &mut base64_string); + base64_string + }); + + let render_image = |render: &mut SvgRender| { + render.leaf_tag("image", |attributes| { + attributes.push("width", "1"); + attributes.push("height", "1"); + attributes.push("preserveAspectRatio", "none"); + attributes.push("href", base64_string); + let matrix = format_transform_matrix(transform); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. { + attributes.push("opacity", opacity.to_string()); + } + if row.alpha_blending.blend_mode != BlendMode::default() { + attributes.push("style", row.alpha_blending.blend_mode.render()); + } + }); + }; + + if let Some(mask) = row.mask { + render.parent_tag("g", |attributes| attributes.push_mask(mask, render_params.for_clipper()), render_image); + } else { + render_image(render) + } } } } @@ -1044,19 +1301,35 @@ impl GraphicElementRendered for RasterDataTable { fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, _context: &mut RenderContext, render_params: &RenderParams) { use vello::peniko; - for instance in self.instance_ref_iter() { - let image = &instance.instance; + for row in self.iter() { + let image = &row.element; if image.data.is_empty() { - return; + continue; } + + let alpha_blending = *row.alpha_blending; + let blend_mode = alpha_blending.blend_mode.to_peniko(); + + let opacity = alpha_blending.opacity(render_params.for_mask); + let mut layer = false; + + if opacity < 1. || alpha_blending.blend_mode != BlendMode::default() { + if let RenderBoundingBox::Rectangle(bounds) = self.bounding_box(transform, false) { + let blending = peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver); + let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + scene.push_layer(blending, opacity, kurbo::Affine::IDENTITY, &rect); + layer = true; + } + } + let image = peniko::Image::new(image.to_flat_u8().0.into(), peniko::ImageFormat::Rgba8, image.width, image.height).with_extend(peniko::Extend::Repeat); - let transform = transform * *instance.transform * DAffine2::from_scale(1. / DVec2::new(image.width as f64, image.height as f64)); + let image_transform = transform * *row.transform * DAffine2::from_scale(1. / DVec2::new(image.width as f64, image.height as f64)); let mut masked = false; - if let Some(mask) = instance.mask { + if let Some(mask) = row.mask { let bounds = mask.bounding_box(transform, true); - if let Some(bounds) = bounds { + if let RenderBoundingBox::Rectangle(bounds) = bounds { masked = true; let rect = vello::kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); @@ -1066,12 +1339,16 @@ impl GraphicElementRendered for RasterDataTable { } } - scene.draw_image(&image, kurbo::Affine::new(transform.to_cols_array())); + scene.draw_image(&image, kurbo::Affine::new(image_transform.to_cols_array())); if masked { scene.pop_layer(); scene.pop_layer(); } + + if layer { + scene.pop_layer(); + } } } @@ -1081,9 +1358,9 @@ impl GraphicElementRendered for RasterDataTable { metadata.click_targets.insert(element_id, vec![ClickTarget::new_with_subpath(subpath, 0.)]); metadata.upstream_footprints.insert(element_id, footprint); - // TODO: Find a way to handle more than one row of the graphical data table - if let Some(image) = self.instance_ref_iter().next() { - metadata.local_transforms.insert(element_id, *image.transform); + // TODO: Find a way to handle more than one row of the raster table + if let Some(raster) = self.iter().next() { + metadata.local_transforms.insert(element_id, *raster.transform); } } @@ -1093,7 +1370,9 @@ impl GraphicElementRendered for RasterDataTable { } } -impl GraphicElementRendered for RasterDataTable { +static LAZY_ARC_VEC_ZERO_U8: LazyLock>> = LazyLock::new(|| Arc::new(Vec::new())); + +impl Render for Table> { fn render_svg(&self, _render: &mut SvgRender, _render_params: &RenderParams) { log::warn!("tried to render texture as an svg"); } @@ -1102,30 +1381,32 @@ impl GraphicElementRendered for RasterDataTable { fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, _render_params: &RenderParams) { use vello::peniko; - let mut render_stuff = |image: peniko::Image, instance_transform: DAffine2, blend_mode: AlphaBlending| { - let image_transform = transform * instance_transform * DAffine2::from_scale(1. / DVec2::new(image.width as f64, image.height as f64)); - let layer = blend_mode != Default::default(); - - let Some(bounds) = self.bounding_box(transform, true) else { return }; - let blending = peniko::BlendMode::new(blend_mode.blend_mode.to_peniko(), peniko::Compose::SrcOver); - - if layer { - let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); - scene.push_layer(blending, blend_mode.opacity, kurbo::Affine::IDENTITY, &rect); + for row in self.iter() { + let blend_mode = *row.alpha_blending; + let mut layer = false; + if blend_mode != Default::default() { + if let RenderBoundingBox::Rectangle(bounds) = self.bounding_box(transform, true) { + let blending = peniko::BlendMode::new(blend_mode.blend_mode.to_peniko(), peniko::Compose::SrcOver); + let rect = kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y); + scene.push_layer(blending, blend_mode.opacity, kurbo::Affine::IDENTITY, &rect); + layer = true; + } } + + let image = peniko::Image::new( + peniko::Blob::new(LAZY_ARC_VEC_ZERO_U8.deref().clone()), + peniko::ImageFormat::Rgba8, + row.element.data().width(), + row.element.data().height(), + ) + .with_extend(peniko::Extend::Repeat); + let image_transform = transform * *row.transform * DAffine2::from_scale(1. / DVec2::new(image.width as f64, image.height as f64)); scene.draw_image(&image, kurbo::Affine::new(image_transform.to_cols_array())); + context.resource_overrides.push((image, row.element.data().clone())); + if layer { scene.pop_layer() } - }; - - for instance in self.instance_ref_iter() { - let image = peniko::Image::new(vec![].into(), peniko::ImageFormat::Rgba8, instance.instance.data().width(), instance.instance.data().height()).with_extend(peniko::Extend::Repeat); - - let id = image.data.id(); - context.resource_overrides.insert(id, instance.instance.data().clone()); - - render_stuff(image, *instance.transform, *instance.alpha_blending); } } @@ -1135,9 +1416,9 @@ impl GraphicElementRendered for RasterDataTable { metadata.click_targets.insert(element_id, vec![ClickTarget::new_with_subpath(subpath, 0.)]); metadata.upstream_footprints.insert(element_id, footprint); - // TODO: Find a way to handle more than one row of the graphical data table - if let Some(image) = self.instance_ref_iter().next() { - metadata.local_transforms.insert(element_id, *image.transform); + // TODO: Find a way to handle more than one row of the raster table + if let Some(raster) = self.iter().next() { + metadata.local_transforms.insert(element_id, *raster.transform); } } @@ -1147,160 +1428,168 @@ impl GraphicElementRendered for RasterDataTable { } } -impl GraphicElementRendered for GraphicElement { +impl Render for Table { fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { - match self { - GraphicElement::VectorData(vector_data) => vector_data.render_svg(render, render_params), - GraphicElement::RasterDataCPU(raster) => raster.render_svg(render, render_params), - GraphicElement::RasterDataGPU(_raster) => (), - GraphicElement::GraphicGroup(graphic_group) => graphic_group.render_svg(render, render_params), - } - } - - #[cfg(feature = "vello")] - fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2, context: &mut RenderContext, render_params: &RenderParams) { - match self { - GraphicElement::VectorData(vector_data) => vector_data.render_to_vello(scene, transform, context, render_params), - GraphicElement::RasterDataCPU(raster) => raster.render_to_vello(scene, transform, context, render_params), - GraphicElement::RasterDataGPU(raster) => raster.render_to_vello(scene, transform, context, render_params), - GraphicElement::GraphicGroup(graphic_group) => graphic_group.render_to_vello(scene, transform, context, render_params), - } - } - - fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option) { - if let Some(element_id) = element_id { - match self { - GraphicElement::GraphicGroup(_) => { - metadata.upstream_footprints.insert(element_id, footprint); - } - GraphicElement::VectorData(vector_data) => { - metadata.upstream_footprints.insert(element_id, footprint); - // TODO: Find a way to handle more than one row of the graphical data table - if let Some(vector_data) = vector_data.instance_ref_iter().next() { - metadata.first_instance_source_id.insert(element_id, *vector_data.source_node_id); - metadata.local_transforms.insert(element_id, *vector_data.transform); - } - } - GraphicElement::RasterDataCPU(raster_frame) => { - metadata.upstream_footprints.insert(element_id, footprint); - - // TODO: Find a way to handle more than one row of images - if let Some(image) = raster_frame.instance_ref_iter().next() { - metadata.local_transforms.insert(element_id, *image.transform); - } - } - GraphicElement::RasterDataGPU(raster_frame) => { - metadata.upstream_footprints.insert(element_id, footprint); - - // TODO: Find a way to handle more than one row of images - if let Some(image) = raster_frame.instance_ref_iter().next() { - metadata.local_transforms.insert(element_id, *image.transform); - } - } - } - } - - match self { - GraphicElement::VectorData(vector_data) => vector_data.collect_metadata(metadata, footprint, element_id), - GraphicElement::RasterDataCPU(raster) => raster.collect_metadata(metadata, footprint, element_id), - GraphicElement::RasterDataGPU(raster) => raster.collect_metadata(metadata, footprint, element_id), - GraphicElement::GraphicGroup(graphic_group) => graphic_group.collect_metadata(metadata, footprint, element_id), - } - } - - fn add_upstream_click_targets(&self, click_targets: &mut Vec) { - match self { - GraphicElement::VectorData(vector_data) => vector_data.add_upstream_click_targets(click_targets), - GraphicElement::RasterDataCPU(raster) => raster.add_upstream_click_targets(click_targets), - GraphicElement::RasterDataGPU(raster) => raster.add_upstream_click_targets(click_targets), - GraphicElement::GraphicGroup(graphic_group) => graphic_group.add_upstream_click_targets(click_targets), - } - } - - fn contains_artboard(&self) -> bool { - match self { - GraphicElement::VectorData(vector_data) => vector_data.contains_artboard(), - GraphicElement::GraphicGroup(graphic_group) => graphic_group.contains_artboard(), - GraphicElement::RasterDataCPU(raster) => raster.contains_artboard(), - GraphicElement::RasterDataGPU(raster) => raster.contains_artboard(), - } - } - - fn new_ids_from_hash(&mut self, reference: Option) { - match self { - GraphicElement::VectorData(vector_data) => vector_data.new_ids_from_hash(reference), - GraphicElement::GraphicGroup(graphic_group) => graphic_group.new_ids_from_hash(reference), - GraphicElement::RasterDataCPU(_) => (), - GraphicElement::RasterDataGPU(_) => (), - } - } -} - -/// Used to stop rust complaining about upstream traits adding display implementations to `Option`. This would not be an issue as we control that crate. -trait Primitive: std::fmt::Display + BoundingBox + RenderComplexity {} -impl Primitive for String {} -impl Primitive for bool {} -impl Primitive for f32 {} -impl Primitive for f64 {} -impl Primitive for DVec2 {} - -fn text_attributes(attributes: &mut SvgRenderAttrs) { - attributes.push("fill", "white"); - attributes.push("y", "30"); - attributes.push("font-size", "30"); -} - -impl GraphicElementRendered for P { - fn render_svg(&self, render: &mut SvgRender, _render_params: &RenderParams) { - render.parent_tag("text", text_attributes, |render| render.leaf_node(format!("{self}"))); - } - - #[cfg(feature = "vello")] - fn render_to_vello(&self, _scene: &mut Scene, _transform: DAffine2, _context: &mut RenderContext, _render_params: &RenderParams) {} -} - -impl GraphicElementRendered for Option { - fn render_svg(&self, render: &mut SvgRender, _render_params: &RenderParams) { - let Some(color) = self else { - render.parent_tag("text", |_| {}, |render| render.leaf_node("Empty color")); - return; - }; - let color_info = format!("{:?} #{} {:?}", color, color.to_rgba_hex_srgb(), color.to_rgba8_srgb()); - - render.leaf_tag("rect", |attributes| { - attributes.push("width", "100"); - attributes.push("height", "100"); - attributes.push("y", "40"); - attributes.push("fill", format!("#{}", color.to_rgb_hex_srgb_from_gamma())); - if color.a() < 1. { - attributes.push("fill-opacity", ((color.a() * 1000.).round() / 1000.).to_string()); - } - }); - render.parent_tag("text", text_attributes, |render| render.leaf_node(color_info)) - } - - #[cfg(feature = "vello")] - fn render_to_vello(&self, _scene: &mut Scene, _transform: DAffine2, _context: &mut RenderContext, _render_params: &RenderParams) {} -} - -impl GraphicElementRendered for Vec { - fn render_svg(&self, render: &mut SvgRender, _render_params: &RenderParams) { - for (index, &color) in self.iter().enumerate() { + for row in self.iter() { render.leaf_tag("rect", |attributes| { - attributes.push("width", "100"); - attributes.push("height", "100"); - attributes.push("x", (index * 120).to_string()); - attributes.push("y", "40"); + attributes.push("width", render_params.footprint.resolution.x.to_string()); + attributes.push("height", render_params.footprint.resolution.y.to_string()); + + let matrix = format_transform_matrix(render_params.footprint.transform.inverse()); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + + let color = row.element; attributes.push("fill", format!("#{}", color.to_rgb_hex_srgb_from_gamma())); if color.a() < 1. { attributes.push("fill-opacity", ((color.a() * 1000.).round() / 1000.).to_string()); } + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. { + attributes.push("opacity", opacity.to_string()); + } + + if row.alpha_blending.blend_mode != BlendMode::default() { + attributes.push("style", row.alpha_blending.blend_mode.render()); + } }); } } #[cfg(feature = "vello")] - fn render_to_vello(&self, _scene: &mut Scene, _transform: DAffine2, _context: &mut RenderContext, _render_params: &RenderParams) {} + fn render_to_vello(&self, scene: &mut Scene, parent_transform: DAffine2, _context: &mut RenderContext, render_params: &RenderParams) { + use vello::peniko; + + for row in self.iter() { + let alpha_blending = *row.alpha_blending; + let blend_mode = alpha_blending.blend_mode.to_peniko(); + let opacity = alpha_blending.opacity(render_params.for_mask); + + let transform = parent_transform * render_params.footprint.transform.inverse(); + let color = row.element; + let vello_color = peniko::Color::new([color.r(), color.g(), color.b(), color.a()]); + + let rect = kurbo::Rect::from_origin_size( + kurbo::Point::ZERO, + kurbo::Size::new(render_params.footprint.resolution.x as f64, render_params.footprint.resolution.y as f64), + ); + + let mut layer = false; + if opacity < 1. || alpha_blending.blend_mode != BlendMode::default() { + let blending = peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver); + scene.push_layer(blending, opacity, kurbo::Affine::IDENTITY, &rect); + layer = true; + } + + scene.fill(peniko::Fill::NonZero, kurbo::Affine::new(transform.to_cols_array()), vello_color, None, &rect); + + if layer { + scene.pop_layer(); + } + } + } +} + +impl Render for Table { + fn render_svg(&self, render: &mut SvgRender, render_params: &RenderParams) { + for row in self.iter() { + render.leaf_tag("rect", |attributes| { + attributes.push("width", render_params.footprint.resolution.x.to_string()); + attributes.push("height", render_params.footprint.resolution.y.to_string()); + + let matrix = format_transform_matrix(render_params.footprint.transform.inverse()); + if !matrix.is_empty() { + attributes.push("transform", matrix); + } + + let mut stop_string = String::new(); + for (position, color) in row.element.0.iter() { + let _ = write!(stop_string, r##""); + } + + let gradient_transform = render_params.footprint.transform * *row.transform; + let gradient_transform_matrix = format_transform_matrix(gradient_transform); + let gradient_transform_attribute = if gradient_transform_matrix.is_empty() { + String::new() + } else { + format!(r#" gradientTransform="{gradient_transform_matrix}""#) + }; + + let gradient_id = generate_uuid(); + let start = DVec2::ZERO; + let end = DVec2::X; + + match GradientType::Radial { + GradientType::Linear => { + let (x1, y1) = (start.x, start.y); + let (x2, y2) = (end.x, end.y); + let _ = write!( + &mut attributes.0.svg_defs, + r#"{stop_string}"# + ); + } + GradientType::Radial => { + let (cx, cy) = (start.x, start.y); + let r = start.distance(end); + let _ = write!( + &mut attributes.0.svg_defs, + r#"{stop_string}"# + ); + } + } + + attributes.push("fill", format!("url('#{gradient_id}')")); + + let opacity = row.alpha_blending.opacity(render_params.for_mask); + if opacity < 1. { + attributes.push("opacity", opacity.to_string()); + } + + if row.alpha_blending.blend_mode != BlendMode::default() { + attributes.push("style", row.alpha_blending.blend_mode.render()); + } + }); + } + } + + #[cfg(feature = "vello")] + fn render_to_vello(&self, scene: &mut Scene, parent_transform: DAffine2, _context: &mut RenderContext, render_params: &RenderParams) { + use vello::peniko; + + for row in self.iter() { + let alpha_blending = *row.alpha_blending; + let blend_mode = alpha_blending.blend_mode.to_peniko(); + let opacity = alpha_blending.opacity(render_params.for_mask); + + let transform = parent_transform * render_params.footprint.transform.inverse(); + let color = row.element.0.first().map(|stop| stop.1).unwrap_or(Color::MAGENTA); + let vello_color = peniko::Color::new([color.r(), color.g(), color.b(), color.a()]); + + let rect = kurbo::Rect::from_origin_size( + kurbo::Point::ZERO, + kurbo::Size::new(render_params.footprint.resolution.x as f64, render_params.footprint.resolution.y as f64), + ); + + let mut layer = false; + if opacity < 1. || alpha_blending.blend_mode != BlendMode::default() { + let blending = peniko::BlendMode::new(blend_mode, peniko::Compose::SrcOver); + scene.push_layer(blending, opacity, kurbo::Affine::IDENTITY, &rect); + layer = true; + } + + scene.fill(peniko::Fill::NonZero, kurbo::Affine::new(transform.to_cols_array()), vello_color, None, &rect); + + if layer { + scene.pop_layer(); + } + } + } } #[derive(Debug, Clone, PartialEq, Eq)] @@ -1348,13 +1637,16 @@ impl SvgRenderAttrs<'_> { value(self.0); self.0.svg.push("\"".into()); } + pub fn push(&mut self, name: impl Into, value: impl Into) { self.push_complex(name, move |renderer| renderer.svg.push(value.into())); } + pub fn push_val(&mut self, value: impl Into) { self.0.svg.push(value.into()); } - fn push_mask(&mut self, mask: &GraphicElement, render_params: RenderParams) { + + fn push_mask(&mut self, mask: &Graphic, render_params: RenderParams) { let uuid = generate_uuid(); let mut svg = SvgRender::new(); mask.render_svg(&mut svg, &render_params); diff --git a/node-graph/interpreted-executor/Cargo.toml b/node-graph/interpreted-executor/Cargo.toml index 119b8affb6..1a6185c88a 100644 --- a/node-graph/interpreted-executor/Cargo.toml +++ b/node-graph/interpreted-executor/Cargo.toml @@ -28,6 +28,7 @@ serde = { workspace = true } # Workspace dependencies graph-craft = { workspace = true, features = ["loading"] } criterion = { workspace = true } +iai-callgrind = { workspace = true } # Benchmarks [[bench]] @@ -42,3 +43,15 @@ harness = false name = "run_cached" harness = false +[[bench]] +name = "update_executor_iai" +harness = false + +[[bench]] +name = "run_once_iai" +harness = false + +[[bench]] +name = "run_cached_iai" +harness = false + diff --git a/node-graph/interpreted-executor/benches/benchmark_util.rs b/node-graph/interpreted-executor/benches/benchmark_util.rs index f35d5c4daa..b2c686c222 100644 --- a/node-graph/interpreted-executor/benches/benchmark_util.rs +++ b/node-graph/interpreted-executor/benches/benchmark_util.rs @@ -3,10 +3,14 @@ use criterion::measurement::Measurement; use futures::executor::block_on; use graph_craft::proto::ProtoNetwork; use graph_craft::util::{DEMO_ART, compile, load_from_name}; +use graphene_std::application_io::EditorApi; use interpreted_executor::dynamic_executor::DynamicExecutor; +use interpreted_executor::util::wrap_network_in_scope; pub fn setup_network(name: &str) -> (DynamicExecutor, ProtoNetwork) { let network = load_from_name(name); + let editor_api = std::sync::Arc::new(EditorApi::default()); + let network = wrap_network_in_scope(network, editor_api); let proto_network = compile(network); let executor = block_on(DynamicExecutor::new(proto_network.clone())).unwrap(); (executor, proto_network) diff --git a/node-graph/interpreted-executor/benches/run_cached.rs b/node-graph/interpreted-executor/benches/run_cached.rs index e6b132668e..0d645bfc69 100644 --- a/node-graph/interpreted-executor/benches/run_cached.rs +++ b/node-graph/interpreted-executor/benches/run_cached.rs @@ -2,15 +2,15 @@ mod benchmark_util; use benchmark_util::{bench_for_each_demo, setup_network}; use criterion::{Criterion, criterion_group, criterion_main}; -use graphene_std::Context; +use graphene_std::application_io::RenderConfig; fn subsequent_evaluations(c: &mut Criterion) { let mut group = c.benchmark_group("Subsequent Evaluations"); - let context: Context = None; + let context = RenderConfig::default(); bench_for_each_demo(&mut group, |name, g| { let (executor, _) = setup_network(name); g.bench_function(name, |b| { - b.iter(|| futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), criterion::black_box(context.clone()))).unwrap()) + b.iter(|| futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), criterion::black_box(context))).unwrap()) }); }); group.finish(); diff --git a/node-graph/interpreted-executor/benches/run_cached_iai.rs b/node-graph/interpreted-executor/benches/run_cached_iai.rs new file mode 100644 index 0000000000..0d4cab719d --- /dev/null +++ b/node-graph/interpreted-executor/benches/run_cached_iai.rs @@ -0,0 +1,27 @@ +mod benchmark_util; + +use benchmark_util::setup_network; +use graphene_std::application_io::RenderConfig; +use iai_callgrind::{black_box, library_benchmark, library_benchmark_group, main}; +use interpreted_executor::dynamic_executor::DynamicExecutor; + +fn setup_run_cached(name: &str) -> DynamicExecutor { + let (executor, _) = setup_network(name); + + // Warm up the cache by running once + let context = RenderConfig::default(); + let _ = futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), context)); + + executor +} + +#[library_benchmark] +#[benches::with_setup(args = ["isometric-fountain", "painted-dreams", "procedural-string-lights", "parametric-dunescape", "red-dress", "valley-of-spires"], setup = setup_run_cached)] +pub fn run_cached(executor: DynamicExecutor) { + let context = RenderConfig::default(); + black_box(futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), black_box(context))).unwrap()); +} + +library_benchmark_group!(name = run_cached_group; benchmarks = run_cached); + +main!(library_benchmark_groups = run_cached_group); diff --git a/node-graph/interpreted-executor/benches/run_once.rs b/node-graph/interpreted-executor/benches/run_once.rs index a55b6843ec..b8c6645412 100644 --- a/node-graph/interpreted-executor/benches/run_once.rs +++ b/node-graph/interpreted-executor/benches/run_once.rs @@ -2,16 +2,16 @@ mod benchmark_util; use benchmark_util::{bench_for_each_demo, setup_network}; use criterion::{Criterion, criterion_group, criterion_main}; -use graphene_std::Context; +use graphene_std::application_io::RenderConfig; fn run_once(c: &mut Criterion) { let mut group = c.benchmark_group("Run Once"); - let context: Context = None; + let context = RenderConfig::default(); bench_for_each_demo(&mut group, |name, g| { g.bench_function(name, |b| { b.iter_batched( || setup_network(name), - |(executor, _)| futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), criterion::black_box(context.clone()))).unwrap(), + |(executor, _)| futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), criterion::black_box(context))).unwrap(), criterion::BatchSize::SmallInput, ) }); diff --git a/node-graph/interpreted-executor/benches/run_once_iai.rs b/node-graph/interpreted-executor/benches/run_once_iai.rs new file mode 100644 index 0000000000..f28798ad82 --- /dev/null +++ b/node-graph/interpreted-executor/benches/run_once_iai.rs @@ -0,0 +1,22 @@ +mod benchmark_util; + +use benchmark_util::setup_network; +use graphene_std::application_io; +use iai_callgrind::{black_box, library_benchmark, library_benchmark_group, main}; +use interpreted_executor::dynamic_executor::DynamicExecutor; + +fn setup_run_once(name: &str) -> DynamicExecutor { + let (executor, _) = setup_network(name); + executor +} + +#[library_benchmark] +#[benches::with_setup(args = ["isometric-fountain", "painted-dreams", "procedural-string-lights", "parametric-dunescape", "red-dress", "valley-of-spires"], setup = setup_run_once)] +pub fn run_once(executor: DynamicExecutor) { + let context = application_io::RenderConfig::default(); + black_box(futures::executor::block_on(executor.tree().eval_tagged_value(executor.output(), black_box(context))).unwrap()); +} + +library_benchmark_group!(name = run_once_group; benchmarks = run_once); + +main!(library_benchmark_groups = run_once_group); diff --git a/node-graph/interpreted-executor/benches/update_executor_iai.rs b/node-graph/interpreted-executor/benches/update_executor_iai.rs new file mode 100644 index 0000000000..9a016d4441 --- /dev/null +++ b/node-graph/interpreted-executor/benches/update_executor_iai.rs @@ -0,0 +1,24 @@ +mod benchmark_util; + +use benchmark_util::setup_network; +use graph_craft::proto::ProtoNetwork; +use iai_callgrind::{black_box, library_benchmark, library_benchmark_group, main}; +use interpreted_executor::dynamic_executor::DynamicExecutor; + +fn setup_update_executor(name: &str) -> (DynamicExecutor, ProtoNetwork) { + let (_, proto_network) = setup_network(name); + let empty = ProtoNetwork::default(); + let executor = futures::executor::block_on(DynamicExecutor::new(empty)).unwrap(); + (executor, proto_network) +} + +#[library_benchmark] +#[benches::with_setup(args = ["isometric-fountain", "painted-dreams", "procedural-string-lights", "parametric-dunescape", "red-dress", "valley-of-spires"], setup = setup_update_executor)] +pub fn update_executor(setup: (DynamicExecutor, ProtoNetwork)) { + let (mut executor, network) = setup; + let _ = black_box(futures::executor::block_on(executor.update(black_box(network)))); +} + +library_benchmark_group!(name = update_group; benchmarks = update_executor); + +main!(library_benchmark_groups = update_group); diff --git a/node-graph/interpreted-executor/src/dynamic_executor.rs b/node-graph/interpreted-executor/src/dynamic_executor.rs index cca13cb3a8..2f52214ed7 100644 --- a/node-graph/interpreted-executor/src/dynamic_executor.rs +++ b/node-graph/interpreted-executor/src/dynamic_executor.rs @@ -150,8 +150,8 @@ pub enum IntrospectError { impl std::fmt::Display for IntrospectError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - IntrospectError::PathNotFound(path) => write!(f, "Path not found: {:?}", path), - IntrospectError::ProtoNodeNotFound(id) => write!(f, "ProtoNode not found: {:?}", id), + IntrospectError::PathNotFound(path) => write!(f, "Path not found: {path:?}"), + IntrospectError::ProtoNodeNotFound(id) => write!(f, "ProtoNode not found: {id:?}"), IntrospectError::NoData => write!(f, "No data found for this node"), IntrospectError::RuntimeNotReady => write!(f, "Node runtime is not ready"), } @@ -278,24 +278,24 @@ impl BorrowTree { /// let (proto_network, node_id, proto_node) = ProtoNetwork::example(); /// let typing_context = TypingContext::new(&node_registry::NODE_REGISTRY); /// let mut borrow_tree = BorrowTree::new(proto_network, &typing_context).await?; - /// + /// /// // Assert that the node exists in the BorrowTree /// assert!(borrow_tree.get(node_id).is_some(), "Node should exist before removal"); - /// + /// /// // Remove the node /// let removed_path = borrow_tree.free_node(node_id); - /// + /// /// // Assert that the node was successfully removed /// assert!(removed_path.is_some(), "Node removal should return a path"); /// assert!(borrow_tree.get(node_id).is_none(), "Node should not exist after removal"); - /// + /// /// // Try to remove the same node again /// let second_removal = borrow_tree.free_node(node_id); - /// + /// /// assert_eq!(second_removal, None, "Second removal should return None"); - /// + /// /// println!("All assertions passed. free_node function works as expected."); - /// + /// /// Ok(()) /// } /// ``` @@ -393,7 +393,7 @@ impl BorrowTree { } ConstructionArgs::Inline(_) => unimplemented!("Inline nodes are not supported yet"), ConstructionArgs::Nodes(ids) => { - let ids: Vec<_> = ids.iter().map(|(id, _)| *id).collect(); + let ids = ids.to_vec(); let construction_nodes = self.node_deps(&ids); let constructor = typing_context.constructor(id).ok_or_else(|| vec![GraphError::new(&proto_node, GraphErrorType::NoConstructor)])?; let node = constructor(construction_nodes).await; diff --git a/node-graph/interpreted-executor/src/lib.rs b/node-graph/interpreted-executor/src/lib.rs index 5c05ef62ba..19d2015773 100644 --- a/node-graph/interpreted-executor/src/lib.rs +++ b/node-graph/interpreted-executor/src/lib.rs @@ -19,7 +19,8 @@ mod tests { ( NodeId(0), DocumentNode { - inputs: vec![NodeInput::network(concrete!(u32), 0)], + inputs: vec![], + call_argument: concrete!(u32), implementation: DocumentNodeImplementation::ProtoNode(ops::identity::IDENTIFIER), ..Default::default() }, diff --git a/node-graph/interpreted-executor/src/node_registry.rs b/node-graph/interpreted-executor/src/node_registry.rs index 1dee5ed6da..2f90dca139 100644 --- a/node-graph/interpreted-executor/src/node_registry.rs +++ b/node-graph/interpreted-executor/src/node_registry.rs @@ -1,21 +1,29 @@ use dyn_any::StaticType; -use glam::{DAffine2, DVec2, IVec2, UVec2}; +use glam::{DAffine2, DVec2, IVec2}; +use graph_craft::document::DocumentNode; use graph_craft::document::value::RenderOutput; use graph_craft::proto::{NodeConstructor, TypeErasedBox}; use graphene_core::raster::color::Color; use graphene_core::raster::*; -use graphene_core::raster_types::{CPU, GPU, RasterDataTable}; -use graphene_core::vector::VectorDataTable; -use graphene_core::{Artboard, GraphicGroupTable, concrete, generic}; -use graphene_core::{Cow, ProtoNodeIdentifier, Type}; +#[cfg(feature = "gpu")] +use graphene_core::raster_types::GPU; +use graphene_core::raster_types::{CPU, Raster}; +use graphene_core::{Artboard, concrete}; +use graphene_core::{Cow, ProtoNodeIdentifier}; use graphene_core::{NodeIO, NodeIOTypes}; use graphene_core::{fn_type_fut, future}; use graphene_std::Context; -use graphene_std::GraphicElement; +use graphene_std::Graphic; #[cfg(feature = "gpu")] use graphene_std::any::DowncastBothNode; -use graphene_std::any::{ComposeTypeErased, DynAnyNode, IntoTypeErasedNode}; +use graphene_std::any::DynAnyNode; use graphene_std::application_io::{ImageTexture, SurfaceFrame}; +use graphene_std::brush::brush_cache::BrushCache; +use graphene_std::brush::brush_stroke::BrushStroke; +use graphene_std::gradient::GradientStops; +use graphene_std::table::Table; +use graphene_std::uuid::NodeId; +use graphene_std::vector::Vector; #[cfg(feature = "gpu")] use graphene_std::wasm_application_io::{WasmEditorApi, WasmSurfaceHandle}; use node_registry_macros::{async_node, convert_node, into_node}; @@ -30,25 +38,33 @@ use wgpu_executor::{WgpuSurface, WindowHandle}; // TODO: turn into hashmap fn node_registry() -> HashMap> { let mut node_types: Vec<(ProtoNodeIdentifier, NodeConstructor, NodeIOTypes)> = vec![ - into_node!(from: VectorDataTable, to: VectorDataTable), - into_node!(from: VectorDataTable, to: GraphicElement), - into_node!(from: VectorDataTable, to: GraphicGroupTable), - into_node!(from: GraphicGroupTable, to: GraphicGroupTable), - into_node!(from: GraphicGroupTable, to: GraphicElement), - into_node!(from: RasterDataTable, to: RasterDataTable), - // into_node!(from: RasterDataTable, to: RasterDataTable), - into_node!(from: RasterDataTable, to: GraphicElement), - into_node!(from: RasterDataTable, to: GraphicElement), - into_node!(from: RasterDataTable, to: GraphicGroupTable), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => RasterDataTable]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => ImageTexture]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => VectorDataTable]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => GraphicGroupTable]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => GraphicElement]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Artboard]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => RasterDataTable]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => RasterDataTable]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::instances::Instances]), + // ========== + // INTO NODES + // ========== + into_node!(from: Table, to: Table), + into_node!(from: Table, to: Table), + into_node!(from: Table>, to: Table>), + #[cfg(feature = "gpu")] + into_node!(from: Table>, to: Table>), + into_node!(from: Table, to: Table), + into_node!(from: Table>, to: Table), + #[cfg(feature = "gpu")] + into_node!(from: Table>, to: Table), + // into_node!(from: Table>, to: Table>), + #[cfg(feature = "gpu")] + into_node!(from: &WasmEditorApi, to: &WgpuExecutor), + // ============= + // MONITOR NODES + // ============= + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => ()]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table>]), + #[cfg(feature = "gpu")] + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table>]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Table]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => String]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => IVec2]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => DVec2]), @@ -57,12 +73,11 @@ fn node_registry() -> HashMap, input: Context, fn_params: [Context => f64]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => u32]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => u64]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => ()]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Vec]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => BlendMode]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => ImageTexture]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::transform::ReferencePoint]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_path_bool::BooleanOperation]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Option]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::Fill]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::StrokeCap]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::StrokeJoin]), @@ -70,16 +85,54 @@ fn node_registry() -> HashMap, input: Context, fn_params: [Context => graphene_core::vector::style::StrokeAlign]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::Stroke]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::Gradient]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::GradientStops]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => GradientStops]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Vec]), - async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Color]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Box]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::vector::misc::CentroidType]), async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::vector::misc::PointSpacingType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Option]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Vec]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => [f64; 4]]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Vec]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Graphic]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::text::Font]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => Vec]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => BrushCache]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => DocumentNode]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::curve::Curve]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::transform::Footprint]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::blending::BlendMode]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::LuminanceCalculation]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::extract_xy::XY]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::RedGreenBlue]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::RedGreenBlueAlpha]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::animation::RealTimeMode]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::NoiseType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::FractalType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::CellularDistanceFunction]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::CellularReturnType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::DomainWarpType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::RelativeAbsolute]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::raster::adjustments::SelectiveColorChoice]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::misc::GridType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::misc::ArcType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::misc::MergeByDistanceAlgorithm]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::misc::PointSpacingType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::FillType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::style::GradientType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::transform::ReferencePoint]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::vector::misc::CentroidType]), + async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_core::text::TextAlign]), + // ========== + // MEMO NODES + // ========== + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table>]), + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Image]), - async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => VectorDataTable]), - async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => RasterDataTable]), - async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => GraphicGroupTable]), + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Vec]), #[cfg(feature = "gpu")] async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Arc]), @@ -87,41 +140,30 @@ fn node_registry() -> HashMap, input: Context, fn_params: [Context => Option]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => WindowHandle]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => SurfaceFrame]), - async_node!(graphene_core::memo::MemoNode<_, _>, input: UVec2, fn_params: [UVec2 => SurfaceFrame]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => f64]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => String]), async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => RenderOutput]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicElement]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicGroupTable]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => VectorDataTable]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicGroupTable]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => WgpuSurface]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Option]), - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => ImageTexture]), - ( - ProtoNodeIdentifier::new("graphene_core::structural::ComposeNode"), - |args| { - Box::pin(async move { - let node = ComposeTypeErased::new(args[0].clone(), args[1].clone()); - node.into_type_erased() - }) - }, - // This is how we can generically define composition of two nodes. - // See further details in the code definition for the `struct ComposeNode { ... }` struct. - NodeIOTypes::new( - generic!(T), - generic!(U), - vec![Type::Fn(Box::new(generic!(T)), Box::new(generic!(V))), Type::Fn(Box::new(generic!(V)), Box::new(generic!(U)))], - ), - ), #[cfg(feature = "gpu")] async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => WgpuSurface]), #[cfg(feature = "gpu")] - async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => RasterDataTable]), + async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => Table>]), + // ================= + // IMPURE MEMO NODES + // ================= + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table>]), #[cfg(feature = "gpu")] - async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => RasterDataTable]), - #[cfg(feature = "gpu")] - into_node!(from: &WasmEditorApi, to: &WgpuExecutor), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table>]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Table]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => WgpuSurface]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => Option]), + async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => ImageTexture]), + // ======================= + // CREATE GPU SURFACE NODE + // ======================= #[cfg(feature = "gpu")] ( ProtoNodeIdentifier::new(stringify!(wgpu_executor::CreateGpuSurfaceNode<_>)), @@ -142,6 +184,9 @@ fn node_registry() -> HashMap { ( ProtoNodeIdentifier::new(concat!["graphene_core::ops::IntoNode<", stringify!($to), ">"]), - |_| { + |mut args| { Box::pin(async move { - let node = graphene_core::ops::IntoNode::<$to>::new(); - let any: DynAnyNode<$from, _, _> = graphene_std::any::DynAnyNode::new(node); + let node = graphene_core::ops::IntoNode::new( + graphene_std::any::downcast_node::(args.pop().unwrap()), + graphene_std::any::FutureWrapperNode::new(graphene_std::value::ClonedNode::new(std::marker::PhantomData::<$to>)), + ); + let any: DynAnyNode = graphene_std::any::DynAnyNode::new(node); Box::new(any) as TypeErasedBox }) }, { - let node = graphene_core::ops::IntoNode::<$to>::new(); - let mut node_io = NodeIO::<'_, $from>::to_async_node_io(&node, vec![]); - node_io.call_argument = future!(<$from as StaticType>::Static); + let node = graphene_core::ops::IntoNode::new( + graphene_std::any::PanicNode:: + Send>>>::new(), + graphene_std::any::FutureWrapperNode::new(graphene_std::value::ClonedNode::new(std::marker::PhantomData::<$to>)), + ); + let params = vec![fn_type_fut!(Context, $from)]; + let node_io = NodeIO::<'_, Context>::to_async_node_io(&node, params); node_io }, ) @@ -269,17 +320,20 @@ mod node_registry_macros { (from: $from:ty, to: $to:ty) => { ( ProtoNodeIdentifier::new(concat!["graphene_core::ops::ConvertNode<", stringify!($to), ">"]), - |_| { + |mut args| { Box::pin(async move { - let node = graphene_core::ops::ConvertNode::<$to>::new(); - let any: DynAnyNode<$from, _, _> = graphene_std::any::DynAnyNode::new(node); + let node = graphene_core::ops::ConvertNode::new(graphene_std::any::downcast_node::(args.pop().unwrap()), +graphene_std::any::FutureWrapperNode::new(graphene_std::value::ClonedNode::new(std::marker::PhantomData::<$to>)) ); + let any: DynAnyNode = graphene_std::any::DynAnyNode::new(node); Box::new(any) as TypeErasedBox }) }, { - let node = graphene_core::ops::ConvertNode::<$to>::new(); - let mut node_io = NodeIO::<'_, $from>::to_async_node_io(&node, vec![]); - node_io.call_argument = future!(<$from as StaticType>::Static); + let node = graphene_core::ops::ConvertNode::new(graphene_std::any::PanicNode:: + Send>>>::new(), + +graphene_std::any::FutureWrapperNode::new(graphene_std::value::ClonedNode::new(std::marker::PhantomData::<$to>)) ); + let params = vec![fn_type_fut!(Context, $from)]; + let node_io = NodeIO::<'_, Context>::to_async_node_io(&node, params); node_io }, ) diff --git a/node-graph/interpreted-executor/src/util.rs b/node-graph/interpreted-executor/src/util.rs index e0f52dae20..28d77e75e7 100644 --- a/node-graph/interpreted-executor/src/util.rs +++ b/node-graph/interpreted-executor/src/util.rs @@ -8,7 +8,6 @@ use graphene_std::Context; use graphene_std::uuid::NodeId; use std::sync::Arc; -// TODO: this is copy pasta from the editor (and does get out of sync) pub fn wrap_network_in_scope(mut network: NodeNetwork, editor_api: Arc) -> NodeNetwork { network.generate_node_paths(&[]); @@ -31,20 +30,20 @@ pub fn wrap_network_in_scope(mut network: NodeNetwork, editor_api: Arc syn::Result = fields.iter().enumerate().map(|(i, _)| format_ident!("Node{}", i)).collect(); let input_ident = &input.pat_ident; - let field_idents: Vec<_> = fields - .iter() - .map(|field| match field { - ParsedField::Regular { pat_ident, .. } | ParsedField::Node { pat_ident, .. } => pat_ident, - }) - .collect(); + let field_idents: Vec<_> = fields.iter().map(|f| &f.pat_ident).collect(); let field_names: Vec<_> = field_idents.iter().map(|pat_ident| &pat_ident.ident).collect(); let input_names: Vec<_> = fields .iter() - .map(|field| match field { - ParsedField::Regular { name, .. } | ParsedField::Node { name, .. } => name, - }) + .map(|f| &f.name) .zip(field_names.iter()) .map(|zipped| match zipped { (Some(name), _) => name.value(), @@ -61,12 +54,7 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields - .iter() - .map(|field| match field { - ParsedField::Regular { description, .. } | ParsedField::Node { description, .. } => description, - }) - .collect(); + let input_descriptions: Vec<_> = fields.iter().map(|f| &f.description).collect(); let struct_fields = field_names.iter().zip(struct_generics.iter()).map(|(name, r#gen)| { quote! { pub(super) #name: #r#gen } @@ -84,9 +72,9 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields .iter() - .map(|field| match field { - ParsedField::Regular { ty, .. } => ty.clone(), - ParsedField::Node { output_type, input_type, .. } => match parsed.is_async { + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { ty, .. }) => ty.clone(), + ParsedFieldType::Node(NodeParsedField { output_type, input_type, .. }) => match parsed.is_async { true => parse_quote!(&'n impl #graphene_core::Node<'n, #input_type, Output = impl core::future::Future>), false => parse_quote!(&'n impl #graphene_core::Node<'n, #input_type, Output = #output_type>), }, @@ -95,24 +83,18 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields .iter() - .map(|field| { - let parsed_widget_override = match field { - ParsedField::Regular { widget_override, .. } => widget_override, - ParsedField::Node { widget_override, .. } => widget_override, - }; - match parsed_widget_override { - ParsedWidgetOverride::None => quote!(RegistryWidgetOverride::None), - ParsedWidgetOverride::Hidden => quote!(RegistryWidgetOverride::Hidden), - ParsedWidgetOverride::String(lit_str) => quote!(RegistryWidgetOverride::String(#lit_str)), - ParsedWidgetOverride::Custom(lit_str) => quote!(RegistryWidgetOverride::Custom(#lit_str)), - } + .map(|field| match &field.widget_override { + ParsedWidgetOverride::None => quote!(RegistryWidgetOverride::None), + ParsedWidgetOverride::Hidden => quote!(RegistryWidgetOverride::Hidden), + ParsedWidgetOverride::String(lit_str) => quote!(RegistryWidgetOverride::String(#lit_str)), + ParsedWidgetOverride::Custom(lit_str) => quote!(RegistryWidgetOverride::Custom(#lit_str)), }) .collect(); let value_sources: Vec<_> = fields .iter() - .map(|field| match field { - ParsedField::Regular { value_source, .. } => match value_source { + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { value_source, .. }) => match value_source { ParsedValueSource::Default(data) => quote!(RegistryValueSource::Default(stringify!(#data))), ParsedValueSource::Scope(data) => quote!(RegistryValueSource::Scope(#data)), _ => quote!(RegistryValueSource::None), @@ -123,8 +105,8 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields .iter() - .map(|field| match field { - ParsedField::Regular { implementations, .. } => match implementations.first() { + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { implementations, .. }) => match implementations.first() { Some(ty) => quote!(Some(concrete!(#ty))), _ => quote!(None), }, @@ -134,8 +116,8 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields .iter() - .map(|field| match field { - ParsedField::Regular { number_soft_min, number_hard_min, .. } => match (number_soft_min, number_hard_min) { + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { number_soft_min, number_hard_min, .. }) => match (number_soft_min, number_hard_min) { (Some(soft_min), _) => quote!(Some(#soft_min)), (None, Some(hard_min)) => quote!(Some(#hard_min)), (None, None) => quote!(None), @@ -145,8 +127,8 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields .iter() - .map(|field| match field { - ParsedField::Regular { number_soft_max, number_hard_max, .. } => match (number_soft_max, number_hard_max) { + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { number_soft_max, number_hard_max, .. }) => match (number_soft_max, number_hard_max) { (Some(soft_max), _) => quote!(Some(#soft_max)), (None, Some(hard_max)) => quote!(Some(#hard_max)), (None, None) => quote!(None), @@ -156,77 +138,45 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result = fields .iter() - .map(|field| match field { - ParsedField::Regular { + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { number_mode_range: Some(number_mode_range), .. - } => quote!(Some(#number_mode_range)), + }) => quote!(Some(#number_mode_range)), _ => quote!(None), }) .collect(); let number_display_decimal_places: Vec<_> = fields .iter() - .map(|field| match field { - ParsedField::Regular { - number_display_decimal_places: Some(decimal_places), - .. - } - | ParsedField::Node { - number_display_decimal_places: Some(decimal_places), - .. - } => { - quote!(Some(#decimal_places)) - } - _ => quote!(None), - }) - .collect(); - let number_step: Vec<_> = fields - .iter() - .map(|field| match field { - ParsedField::Regular { number_step: Some(step), .. } | ParsedField::Node { number_step: Some(step), .. } => { - quote!(Some(#step)) - } - _ => quote!(None), - }) + .map(|field| field.number_display_decimal_places.as_ref().map_or(quote!(None), |i| quote!(Some(#i)))) .collect(); + let number_step: Vec<_> = fields.iter().map(|field| field.number_step.as_ref().map_or(quote!(None), |i| quote!(Some(#i)))).collect(); - let unit_suffix: Vec<_> = fields - .iter() - .map(|field| match field { - ParsedField::Regular { unit: Some(unit), .. } | ParsedField::Node { unit: Some(unit), .. } => { - quote!(Some(#unit)) - } - _ => quote!(None), - }) - .collect(); + let unit_suffix: Vec<_> = fields.iter().map(|field| field.unit.as_ref().map_or(quote!(None), |i| quote!(Some(#i)))).collect(); let exposed: Vec<_> = fields .iter() - .map(|field| match field { - ParsedField::Regular { exposed, .. } => quote!(#exposed), + .map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { exposed, .. }) => quote!(#exposed), _ => quote!(true), }) .collect(); - let eval_args = fields.iter().map(|field| match field { - ParsedField::Regular { pat_ident, .. } => { - let name = &pat_ident.ident; - quote! { let #name = self.#name.eval(__input.clone()).await; } - } - ParsedField::Node { pat_ident, .. } => { - let name = &pat_ident.ident; - quote! { let #name = &self.#name; } + let eval_args = fields.iter().map(|field| { + let name = &field.pat_ident.ident; + match &field.ty { + ParsedFieldType::Regular { .. } => { + quote! { let #name = self.#name.eval(__input.clone()).await; } + } + ParsedFieldType::Node { .. } => { + quote! { let #name = &self.#name; } + } } }); - let min_max_args = fields.iter().map(|field| match field { - ParsedField::Regular { - pat_ident, - number_hard_min, - number_hard_max, - .. - } => { - let name = &pat_ident.ident; + let min_max_args = fields.iter().map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { number_hard_min, number_hard_max, .. }) => { + let name = &field.pat_ident.ident; let mut tokens = quote!(); if let Some(min) = number_hard_min { tokens.extend(quote_spanned! {min.span()=> @@ -241,15 +191,13 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result { - quote!() - } + ParsedFieldType::Node { .. } => quote!(), }); - let all_implementation_types = fields.iter().flat_map(|field| match field { - ParsedField::Regular { implementations, .. } => implementations.into_iter().cloned().collect::>(), - ParsedField::Node { implementations, .. } => implementations - .into_iter() + let all_implementation_types = fields.iter().flat_map(|field| match &field.ty { + ParsedFieldType::Regular(RegularParsedField { implementations, .. }) => implementations.iter().cloned().collect::>(), + ParsedFieldType::Node(NodeParsedField { implementations, .. }) => implementations + .iter() .flat_map(|implementation| [implementation.input.clone(), implementation.output.clone()]) .collect(), }); @@ -260,11 +208,11 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result { let all_lifetime_ty = substitute_lifetimes(ty.clone(), "all"); @@ -284,7 +232,7 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result + #graphene_core::WasmNotSync ) } - (ParsedField::Node { input_type, output_type, .. }, true) => { + (ParsedFieldType::Node(NodeParsedField { input_type, output_type, .. }), true) => { let id = future_idents.len(); let fut_ident = format_ident!("F{}", id); future_idents.push(fut_ident.clone()); @@ -294,7 +242,7 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result + #graphene_core::WasmNotSync ) } - (ParsedField::Node { .. }, false) => unreachable!(), + (ParsedFieldType::Node { .. }, false) => unreachable!(), }); } let where_clause = where_clause.clone().unwrap_or(WhereClause { @@ -345,13 +293,15 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result (#input_ident: #input_type #(, #field_idents: #field_types)*) -> #output_type #where_clause #body + #cfg #[automatically_derived] impl<'n, #(#fn_generics,)* #(#struct_generics,)* #(#future_idents,)*> #graphene_core::Node<'n, #input_type> for #mod_name::#struct_name<#(#struct_generics,)*> #struct_where_clause @@ -359,17 +309,21 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result #graphene_core::ProtoNodeIdentifier { #graphene_core::ProtoNodeIdentifier::new(std::concat!(#identifier_path, "::", std::stringify!(#struct_name))) } + #cfg #[doc(inline)] pub use #mod_name::#struct_name; #[doc(hidden)] #node_input_accessor + #cfg #[doc(hidden)] + #[allow(clippy::module_inception)] mod #mod_name { use super::*; use #graphene_core as gcore; @@ -401,7 +355,7 @@ pub(crate) fn generate_node_code(parsed: &ParsedNodeFn) -> syn::Result syn::Result TokenStream2 { +fn generate_node_input_references( + parsed: &ParsedNodeFn, + fn_generics: &[crate::GenericParam], + field_idents: &[&PatIdent], + graphene_core: &TokenStream2, + identifier: &Ident, + cfg: &TokenStream2, +) -> TokenStream2 { let inputs_module_name = format_ident!("{}", parsed.struct_name.to_string().to_case(Case::Snake)); let mut generated_input_accessor = Vec::new(); @@ -442,9 +403,9 @@ fn generate_node_input_references(parsed: &ParsedNodeFn, fn_generics: &[crate::G let (mut modified, mut generic_collector) = FilterUsedGenerics::new(fn_generics); for (input_index, (parsed_input, input_ident)) in parsed.fields.iter().zip(field_idents).enumerate() { - let mut ty = match parsed_input { - ParsedField::Regular { ty, .. } => ty, - ParsedField::Node { output_type, .. } => output_type, + let mut ty = match &parsed_input.ty { + ParsedFieldType::Regular(RegularParsedField { ty, .. }) => ty, + ParsedFieldType::Node(NodeParsedField { output_type, .. }) => output_type, } .clone(); @@ -479,6 +440,7 @@ fn generate_node_input_references(parsed: &ParsedNodeFn, fn_generics: &[crate::G } quote! { + #cfg pub mod #inputs_module_name { use super::*; @@ -527,20 +489,20 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st .fields .iter() .map(|field| { - match field { - ParsedField::Regular { implementations, ty, .. } => { + match &field.ty { + ParsedFieldType::Regular(RegularParsedField { implementations, ty, .. }) => { if !implementations.is_empty() { implementations.iter().map(|ty| (&unit, ty)).collect() } else { vec![(&unit, ty)] } } - ParsedField::Node { + ParsedFieldType::Node(NodeParsedField { implementations, input_type, output_type, .. - } => { + }) => { if !implementations.is_empty() { implementations.iter().map(|impl_| (&impl_.input, &impl_.output)).collect() } else { @@ -565,7 +527,7 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st let field_name = field_names[j]; let (input_type, output_type) = &types[i.min(types.len() - 1)]; - let node = matches!(parsed.fields[j], ParsedField::Node { .. }); + let node = matches!(parsed.fields[j].ty, ParsedFieldType::Node { .. }); let downcast_node = quote!( let #field_name: DowncastBothNode<#input_type, #output_type> = DowncastBothNode::new(args[#j].clone()); @@ -605,7 +567,7 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st Ok(quote! { - #[cfg_attr(not(target_arch = "wasm32"), ctor)] + #[cfg_attr(not(target_family = "wasm"), ctor)] fn register_node() { let mut registry = NODE_REGISTRY.lock().unwrap(); registry.insert( @@ -615,7 +577,7 @@ fn generate_register_node_impl(parsed: &ParsedNodeFn, field_names: &[&Ident], st ] ); } - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] #[unsafe(no_mangle)] extern "C" fn #registry_name() { register_node(); diff --git a/node-graph/node-macro/src/derive_choice_type.rs b/node-graph/node-macro/src/derive_choice_type.rs index 380b0409dc..fac19403b7 100644 --- a/node-graph/node-macro/src/derive_choice_type.rs +++ b/node-graph/node-macro/src/derive_choice_type.rs @@ -111,13 +111,21 @@ fn derive_enum(enum_attributes: &[Attribute], name: Ident, input: syn::DataEnum) }) .collect(); - let crate_name = proc_macro_crate::crate_name("graphene-core") - .map_err(|e| syn::Error::new(Span::call_site(), format!("Failed to find location of graphene_core. Make sure it is imported as a dependency: {}", e)))?; - let crate_name = match crate_name { - proc_macro_crate::FoundCrate::Itself => quote!(crate), - proc_macro_crate::FoundCrate::Name(name) => { - let identifier = Ident::new(&name, Span::call_site()); - quote! { #identifier } + let crate_name = { + let crate_name = proc_macro_crate::crate_name("graphene-core-shaders") + .or_else(|_e| proc_macro_crate::crate_name("graphene-core")) + .map_err(|e| { + syn::Error::new( + Span::call_site(), + format!("Failed to find location of 'graphene_core' or 'graphene-core-shaders'. Make sure it is imported as a dependency: {e}"), + ) + })?; + match crate_name { + proc_macro_crate::FoundCrate::Itself => quote!(crate), + proc_macro_crate::FoundCrate::Name(name) => { + let identifier = Ident::new(&name, Span::call_site()); + quote! { #identifier } + } } }; @@ -140,19 +148,19 @@ fn derive_enum(enum_attributes: &[Attribute], name: Ident, input: syn::DataEnum) let docstring = match &variant.basic_item.description { Some(s) => { let s = s.trim(); - quote! { Some(::std::borrow::Cow::Borrowed(#s)) } + quote! { Some(#s) } } None => quote! { None }, }; let icon = match &variant.basic_item.icon { - Some(s) => quote! { Some(::std::borrow::Cow::Borrowed(#s)) }, + Some(s) => quote! { Some(#s) }, None => quote! { None }, }; quote! { ( - #name::#vname, #crate_name::registry::VariantMetadata { - name: ::std::borrow::Cow::Borrowed(#vname_str), - label: ::std::borrow::Cow::Borrowed(#label), + #name::#vname, #crate_name::choice_type::VariantMetadata { + name: #vname_str, + label: #label, docstring: #docstring, icon: #icon, } @@ -174,10 +182,10 @@ fn derive_enum(enum_attributes: &[Attribute], name: Ident, input: syn::DataEnum) } } - impl #crate_name::registry::ChoiceTypeStatic for #name { - const WIDGET_HINT: #crate_name::registry::ChoiceWidgetHint = #crate_name::registry::ChoiceWidgetHint::#widget_hint; + impl #crate_name::choice_type::ChoiceTypeStatic for #name { + const WIDGET_HINT: #crate_name::choice_type::ChoiceWidgetHint = #crate_name::choice_type::ChoiceWidgetHint::#widget_hint; const DESCRIPTION: Option<&'static str> = #enum_description; - fn list() -> &'static [&'static [(Self, #crate_name::registry::VariantMetadata)]] { + fn list() -> &'static [&'static [(Self, #crate_name::choice_type::VariantMetadata)]] { &[ #(#group)* ] } } diff --git a/node-graph/node-macro/src/lib.rs b/node-graph/node-macro/src/lib.rs index 1a87ce2cf9..001d3074ce 100644 --- a/node-graph/node-macro/src/lib.rs +++ b/node-graph/node-macro/src/lib.rs @@ -5,6 +5,7 @@ use syn::GenericParam; mod codegen; mod derive_choice_type; mod parsing; +mod shader_nodes; mod validation; /// Used to create a node definition. diff --git a/node-graph/node-macro/src/parsing.rs b/node-graph/node-macro/src/parsing.rs index 81151110a9..ef08388499 100644 --- a/node-graph/node-macro/src/parsing.rs +++ b/node-graph/node-macro/src/parsing.rs @@ -12,8 +12,9 @@ use syn::{ }; use crate::codegen::generate_node_code; +use crate::shader_nodes::ShaderNodeType; -#[derive(Debug)] +#[derive(Clone, Debug)] pub(crate) struct Implementation { pub(crate) input: Type, pub(crate) _arrow: RArrow, @@ -45,10 +46,14 @@ pub(crate) struct NodeFnAttributes { pub(crate) path: Option, pub(crate) skip_impl: bool, pub(crate) properties_string: Option, + /// whether to `#[cfg]` gate the node implementation, defaults to None + pub(crate) cfg: Option, + /// if this node should get a gpu implementation, defaults to None + pub(crate) shader_node: Option, // Add more attributes as needed } -#[derive(Debug, Default)] +#[derive(Clone, Debug, Default)] pub enum ParsedValueSource { #[default] None, @@ -59,7 +64,7 @@ pub enum ParsedValueSource { // #[widget(ParsedWidgetOverride::Hidden)] // #[widget(ParsedWidgetOverride::String = "Some string")] // #[widget(ParsedWidgetOverride::Custom = "Custom string")] -#[derive(Debug, Default)] +#[derive(Clone, Debug, Default)] pub enum ParsedWidgetOverride { #[default] None, @@ -97,39 +102,44 @@ impl Parse for ParsedWidgetOverride { } } -#[derive(Debug)] -pub(crate) enum ParsedField { - Regular { - pat_ident: PatIdent, - name: Option, - description: String, - widget_override: ParsedWidgetOverride, - ty: Type, - exposed: bool, - value_source: ParsedValueSource, - number_soft_min: Option, - number_soft_max: Option, - number_hard_min: Option, - number_hard_max: Option, - number_mode_range: Option, - number_display_decimal_places: Option, - number_step: Option, - implementations: Punctuated, - unit: Option, - }, - Node { - pat_ident: PatIdent, - name: Option, - description: String, - widget_override: ParsedWidgetOverride, - input_type: Type, - output_type: Type, - number_display_decimal_places: Option, - number_step: Option, - implementations: Punctuated, - unit: Option, - }, +#[derive(Clone, Debug)] +pub struct ParsedField { + pub pat_ident: PatIdent, + pub name: Option, + pub description: String, + pub widget_override: ParsedWidgetOverride, + pub ty: ParsedFieldType, + pub number_display_decimal_places: Option, + pub number_step: Option, + pub unit: Option, } + +#[derive(Clone, Debug)] +pub enum ParsedFieldType { + Regular(RegularParsedField), + Node(NodeParsedField), +} + +#[derive(Clone, Debug)] +pub struct RegularParsedField { + pub ty: Type, + pub exposed: bool, + pub value_source: ParsedValueSource, + pub number_soft_min: Option, + pub number_soft_max: Option, + pub number_hard_min: Option, + pub number_hard_max: Option, + pub number_mode_range: Option, + pub implementations: Punctuated, +} + +#[derive(Clone, Debug)] +pub struct NodeParsedField { + pub input_type: Type, + pub output_type: Type, + pub implementations: Punctuated, +} + #[derive(Debug)] pub(crate) struct Input { pub(crate) pat_ident: PatIdent, @@ -184,6 +194,8 @@ impl Parse for NodeFnAttributes { let mut path = None; let mut skip_impl = false; let mut properties_string = None; + let mut cfg = None; + let mut shader_node = None; let content = input; // let content; @@ -191,8 +203,10 @@ impl Parse for NodeFnAttributes { let nested = content.call(Punctuated::::parse_terminated)?; for meta in nested { - match meta { - Meta::List(meta) if meta.path.is_ident("category") => { + let name = meta.path().get_ident().ok_or_else(|| Error::new_spanned(meta.path(), "Node macro expects a known Ident, not a path"))?; + match name.to_string().as_str() { + "category" => { + let meta = meta.require_list()?; if category.is_some() { return Err(Error::new_spanned(meta, "Multiple 'category' attributes are not allowed")); } @@ -201,14 +215,16 @@ impl Parse for NodeFnAttributes { .map_err(|_| Error::new_spanned(meta, "Expected a string literal for 'category', e.g., category(\"Value\")"))?; category = Some(lit); } - Meta::List(meta) if meta.path.is_ident("name") => { + "name" => { + let meta = meta.require_list()?; if display_name.is_some() { return Err(Error::new_spanned(meta, "Multiple 'name' attributes are not allowed")); } let parsed_name: LitStr = meta.parse_args().map_err(|_| Error::new_spanned(meta, "Expected a string for 'name', e.g., name(\"Memoize\")"))?; display_name = Some(parsed_name); } - Meta::List(meta) if meta.path.is_ident("path") => { + "path" => { + let meta = meta.require_list()?; if path.is_some() { return Err(Error::new_spanned(meta, "Multiple 'path' attributes are not allowed")); } @@ -217,13 +233,15 @@ impl Parse for NodeFnAttributes { .map_err(|_| Error::new_spanned(meta, "Expected a valid path for 'path', e.g., path(crate::MemoizeNode)"))?; path = Some(parsed_path); } - Meta::Path(path) if path.is_ident("skip_impl") => { + "skip_impl" => { + let path = meta.require_path_only()?; if skip_impl { return Err(Error::new_spanned(path, "Multiple 'skip_impl' attributes are not allowed")); } skip_impl = true; } - Meta::List(meta) if meta.path.is_ident("properties") => { + "properties" => { + let meta = meta.require_list()?; if properties_string.is_some() { return Err(Error::new_spanned(path, "Multiple 'properties_string' attributes are not allowed")); } @@ -233,13 +251,27 @@ impl Parse for NodeFnAttributes { properties_string = Some(parsed_properties_string); } + "cfg" => { + if cfg.is_some() { + return Err(Error::new_spanned(path, "Multiple 'feature' attributes are not allowed")); + } + let meta = meta.require_list()?; + cfg = Some(meta.tokens.clone()); + } + "shader_node" => { + if shader_node.is_some() { + return Err(Error::new_spanned(path, "Multiple 'feature' attributes are not allowed")); + } + let meta = meta.require_list()?; + shader_node = Some(syn::parse2(meta.tokens.to_token_stream())?); + } _ => { return Err(Error::new_spanned( meta, indoc!( r#" Unsupported attribute in `node`. - Supported attributes are 'category', 'path' and 'name'. + Supported attributes are 'category', 'path' 'name', 'skip_impl', 'cfg' and 'properties'. Example usage: #[node_macro::node(category("Value"), name("Test Node"))] @@ -256,13 +288,15 @@ impl Parse for NodeFnAttributes { path, skip_impl, properties_string, + cfg, + shader_node, }) } } fn parse_node_fn(attr: TokenStream2, item: TokenStream2) -> syn::Result { - let attributes = syn::parse2::(attr.clone()).map_err(|e| Error::new(e.span(), format!("Failed to parse node_fn attributes: {}", e)))?; - let input_fn = syn::parse2::(item.clone()).map_err(|e| Error::new(e.span(), format!("Failed to parse function: {}. Make sure it's a valid Rust function.", e)))?; + let attributes = syn::parse2::(attr.clone()).map_err(|e| Error::new(e.span(), format!("Failed to parse node_fn attributes: {e}")))?; + let input_fn = syn::parse2::(item.clone()).map_err(|e| Error::new(e.span(), format!("Failed to parse function: {e}. Make sure it's a valid Rust function.")))?; let vis = input_fn.vis; let fn_name = input_fn.sig.ident.clone(); @@ -278,7 +312,7 @@ fn parse_node_fn(attr: TokenStream2, item: TokenStream2) -> syn::Result syn::Result::parse_terminated; parser.parse2(content.clone()).map_err(|e| { let span = e.span(); // Get the span of the error - Error::new(span, format!("Failed to parse implementations for argument '{}': {}", name, e)) + Error::new(span, format!("Failed to parse implementations for argument '{name}': {e}")) }) } @@ -397,27 +431,21 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul let ident = &pat_ident.ident; let default_value = extract_attribute(attrs, "default") - .map(|attr| { - attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid `default` value for argument '{}': {}", ident, e))) - }) + .map(|attr| attr.parse_args().map_err(|e| Error::new_spanned(attr, format!("Invalid `default` value for argument '{ident}': {e}")))) .transpose()?; let scope = extract_attribute(attrs, "scope") - .map(|attr| { - attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid `scope` value for argument '{}': {}", ident, e))) - }) + .map(|attr| attr.parse_args().map_err(|e| Error::new_spanned(attr, format!("Invalid `scope` value for argument '{ident}': {e}")))) .transpose()?; let name = extract_attribute(attrs, "name") - .map(|attr| attr.parse_args().map_err(|e| Error::new_spanned(attr, format!("Invalid `name` value for argument '{}': {}", ident, e)))) + .map(|attr| attr.parse_args().map_err(|e| Error::new_spanned(attr, format!("Invalid `name` value for argument '{ident}': {e}")))) .transpose()?; let widget_override = extract_attribute(attrs, "widget") .map(|attr| { attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid `widget override` value for argument '{}': {}", ident, e))) + .map_err(|e| Error::new_spanned(attr, format!("Invalid `widget override` value for argument '{ident}': {e}"))) }) .transpose()? .unwrap_or_default(); @@ -434,26 +462,26 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul let number_soft_min = extract_attribute(attrs, "soft_min") .map(|attr| { attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `soft_min` value for argument '{}': {}", ident, e))) + .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `soft_min` value for argument '{ident}': {e}"))) }) .transpose()?; let number_soft_max = extract_attribute(attrs, "soft_max") .map(|attr| { attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `soft_max` value for argument '{}': {}", ident, e))) + .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `soft_max` value for argument '{ident}': {e}"))) }) .transpose()?; let number_hard_min = extract_attribute(attrs, "hard_min") .map(|attr| { attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `hard_min` value for argument '{}': {}", ident, e))) + .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `hard_min` value for argument '{ident}': {e}"))) }) .transpose()?; let number_hard_max = extract_attribute(attrs, "hard_max") .map(|attr| { attr.parse_args() - .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `hard_max` value for argument '{}': {}", ident, e))) + .map_err(|e| Error::new_spanned(attr, format!("Invalid numerical `hard_max` value for argument '{ident}': {e}"))) }) .transpose()?; @@ -462,10 +490,7 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul attr.parse_args::().map_err(|e| { Error::new_spanned( attr, - format!( - "Invalid `range` tuple of min and max range slider values for argument '{}': {}\nUSAGE EXAMPLE: #[range((0., 100.))]", - ident, e - ), + format!("Invalid `range` tuple of min and max range slider values for argument '{ident}': {e}\nUSAGE EXAMPLE: #[range((0., 100.))]"), ) }) }) @@ -477,7 +502,7 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul } let unit = extract_attribute(attrs, "unit") - .map(|attr| attr.parse_args::().map_err(|_e| Error::new_spanned(attr, format!("Expected a unit type as string")))) + .map(|attr| attr.parse_args::().map_err(|_e| Error::new_spanned(attr, "Expected a unit type as string".to_string()))) .transpose()?; let number_display_decimal_places = extract_attribute(attrs, "display_decimal_places") @@ -485,14 +510,14 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul attr.parse_args::().map_err(|e| { Error::new_spanned( attr, - format!("Invalid `integer` for number of decimals for argument '{}': {}\nUSAGE EXAMPLE: #[display_decimal_places(2)]", ident, e), + format!("Invalid `integer` for number of decimals for argument '{ident}': {e}\nUSAGE EXAMPLE: #[display_decimal_places(2)]"), ) }) }) .transpose()? .map(|f| { if let Err(e) = f.base10_parse::() { - Err(Error::new_spanned(f, format!("Expected a `u32` for `display_decimal_places` for '{}': {}", ident, e))) + Err(Error::new_spanned(f, format!("Expected a `u32` for `display_decimal_places` for '{ident}': {e}"))) } else { Ok(f) } @@ -501,7 +526,7 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul let number_step = extract_attribute(attrs, "step") .map(|attr| { attr.parse_args::() - .map_err(|e| Error::new_spanned(attr, format!("Invalid `step` for argument '{}': {}\nUSAGE EXAMPLE: #[step(2.)]", ident, e))) + .map_err(|e| Error::new_spanned(attr, format!("Invalid `step` for argument '{ident}': {e}\nUSAGE EXAMPLE: #[step(2.)]"))) }) .transpose()?; @@ -534,16 +559,18 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul .transpose()? .unwrap_or_default(); - Ok(ParsedField::Node { + Ok(ParsedField { pat_ident, + ty: ParsedFieldType::Node(NodeParsedField { + input_type, + output_type, + implementations, + }), name, description, widget_override, - input_type, - output_type, number_display_decimal_places, number_step, - implementations, unit, }) } else { @@ -551,22 +578,24 @@ fn parse_field(pat_ident: PatIdent, ty: Type, attrs: &[Attribute]) -> syn::Resul .map(|attr| parse_implementations(attr, ident)) .transpose()? .unwrap_or_default(); - Ok(ParsedField::Regular { + Ok(ParsedField { pat_ident, + ty: ParsedFieldType::Regular(RegularParsedField { + exposed, + number_soft_min, + number_soft_max, + number_hard_min, + number_hard_max, + number_mode_range, + ty, + value_source, + implementations, + }), name, description, widget_override, - exposed, - number_soft_min, - number_soft_max, - number_hard_min, - number_hard_max, - number_mode_range, number_display_decimal_places, number_step, - ty, - value_source, - implementations, unit, }) } @@ -622,7 +651,7 @@ pub fn new_node_fn(attr: TokenStream2, item: TokenStream2) -> TokenStream2 { Ok(parsed) => parsed, Err(e) => { // Return the error as a compile error - Error::new(e.span(), format!("Failed to parse node function: {}", e)).to_compile_error() + Error::new(e.span(), format!("Failed to parse node function: {e}")).to_compile_error() } } } @@ -686,18 +715,24 @@ mod tests { for (parsed_field, expected_field) in parsed.fields.iter().zip(expected.fields.iter()) { match (parsed_field, expected_field) { ( - ParsedField::Regular { + ParsedField { pat_ident: p_name, - ty: p_ty, - exposed: p_exp, - value_source: p_default, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: p_ty, + exposed: p_exp, + value_source: p_default, + .. + }), .. }, - ParsedField::Regular { + ParsedField { pat_ident: e_name, - ty: e_ty, - exposed: e_exp, - value_source: e_default, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: e_ty, + exposed: e_exp, + value_source: e_default, + .. + }), .. }, ) => { @@ -713,25 +748,31 @@ mod tests { } _ => panic!("Mismatched default values"), } - assert_eq!(format!("{:?}", p_ty), format!("{:?}", e_ty)); + assert_eq!(format!("{p_ty:?}"), format!("{:?}", e_ty)); } ( - ParsedField::Node { + ParsedField { pat_ident: p_name, - input_type: p_input, - output_type: p_output, + ty: ParsedFieldType::Node(NodeParsedField { + input_type: p_input, + output_type: p_output, + .. + }), .. }, - ParsedField::Node { + ParsedField { pat_ident: e_name, - input_type: e_input, - output_type: e_output, + ty: ParsedFieldType::Node(NodeParsedField { + input_type: e_input, + output_type: e_output, + .. + }), .. }, ) => { assert_eq!(p_name, e_name); - assert_eq!(format!("{:?}", p_input), format!("{:?}", e_input)); - assert_eq!(format!("{:?}", p_output), format!("{:?}", e_output)); + assert_eq!(format!("{p_input:?}"), format!("{:?}", e_input)); + assert_eq!(format!("{p_output:?}"), format!("{:?}", e_output)); } _ => panic!("Mismatched field types"), } @@ -758,6 +799,8 @@ mod tests { path: Some(parse_quote!(graphene_core::TestNode)), skip_impl: true, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("add", Span::call_site()), struct_name: Ident::new("Add", Span::call_site()), @@ -771,22 +814,24 @@ mod tests { }, output_type: parse_quote!(f64), is_async: false, - fields: vec![ParsedField::Regular { + fields: vec![ParsedField { pat_ident: pat_ident("b"), name: None, description: String::new(), widget_override: ParsedWidgetOverride::None, - ty: parse_quote!(f64), - exposed: false, - value_source: ParsedValueSource::None, - number_soft_min: None, - number_soft_max: None, - number_hard_min: None, - number_hard_max: None, - number_mode_range: None, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: parse_quote!(f64), + exposed: false, + value_source: ParsedValueSource::None, + number_soft_min: None, + number_soft_max: None, + number_hard_min: None, + number_hard_max: None, + number_mode_range: None, + implementations: Punctuated::new(), + }), number_display_decimal_places: None, number_step: None, - implementations: Punctuated::new(), unit: None, }], body: TokenStream2::new(), @@ -819,6 +864,8 @@ mod tests { path: None, skip_impl: false, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("transform", Span::call_site()), struct_name: Ident::new("Transform", Span::call_site()), @@ -833,34 +880,38 @@ mod tests { output_type: parse_quote!(T), is_async: false, fields: vec![ - ParsedField::Node { + ParsedField { pat_ident: pat_ident("transform_target"), name: None, description: String::new(), widget_override: ParsedWidgetOverride::None, - input_type: parse_quote!(Footprint), - output_type: parse_quote!(T), + ty: ParsedFieldType::Node(NodeParsedField { + input_type: parse_quote!(Footprint), + output_type: parse_quote!(T), + implementations: Punctuated::new(), + }), number_display_decimal_places: None, number_step: None, - implementations: Punctuated::new(), unit: None, }, - ParsedField::Regular { + ParsedField { pat_ident: pat_ident("translate"), name: None, description: String::new(), widget_override: ParsedWidgetOverride::None, - ty: parse_quote!(DVec2), - exposed: false, - value_source: ParsedValueSource::None, - number_soft_min: None, - number_soft_max: None, - number_hard_min: None, - number_hard_max: None, - number_mode_range: None, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: parse_quote!(DVec2), + exposed: false, + value_source: ParsedValueSource::None, + number_soft_min: None, + number_soft_max: None, + number_hard_min: None, + number_hard_max: None, + number_mode_range: None, + implementations: Punctuated::new(), + }), number_display_decimal_places: None, number_step: None, - implementations: Punctuated::new(), unit: None, }, ], @@ -877,7 +928,7 @@ mod tests { let attr = quote!(category("Vector: Shape")); let input = quote!( /// Test - fn circle(_: impl Ctx, #[default(50.)] radius: f64) -> VectorData { + fn circle(_: impl Ctx, #[default(50.)] radius: f64) -> Vector { // Implementation details... } ); @@ -891,6 +942,8 @@ mod tests { path: None, skip_impl: false, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("circle", Span::call_site()), struct_name: Ident::new("Circle", Span::call_site()), @@ -902,24 +955,26 @@ mod tests { ty: parse_quote!(impl Ctx), implementations: Punctuated::new(), }, - output_type: parse_quote!(VectorData), + output_type: parse_quote!(Vector), is_async: false, - fields: vec![ParsedField::Regular { + fields: vec![ParsedField { pat_ident: pat_ident("radius"), name: None, description: String::new(), widget_override: ParsedWidgetOverride::None, - ty: parse_quote!(f64), - exposed: false, - value_source: ParsedValueSource::Default(quote!(50.)), - number_soft_min: None, - number_soft_max: None, - number_hard_min: None, - number_hard_max: None, - number_mode_range: None, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: parse_quote!(f64), + exposed: false, + value_source: ParsedValueSource::Default(quote!(50.)), + number_soft_min: None, + number_soft_max: None, + number_hard_min: None, + number_hard_max: None, + number_mode_range: None, + implementations: Punctuated::new(), + }), number_display_decimal_places: None, number_step: None, - implementations: Punctuated::new(), unit: None, }], body: TokenStream2::new(), @@ -934,7 +989,7 @@ mod tests { fn test_node_with_implementations() { let attr = quote!(category("Raster: Adjustment")); let input = quote!( - fn levels(image: RasterDataTable

, #[implementations(f32, f64)] shadows: f64) -> RasterDataTable

{ + fn levels(image: Table>, #[implementations(f32, f64)] shadows: f64) -> Table> { // Implementation details... } ); @@ -948,6 +1003,8 @@ mod tests { path: None, skip_impl: false, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("levels", Span::call_site()), struct_name: Ident::new("Levels", Span::call_site()), @@ -956,32 +1013,34 @@ mod tests { where_clause: None, input: Input { pat_ident: pat_ident("image"), - ty: parse_quote!(RasterDataTable

), + ty: parse_quote!(Table>), implementations: Punctuated::new(), }, - output_type: parse_quote!(RasterDataTable

), + output_type: parse_quote!(Table>), is_async: false, - fields: vec![ParsedField::Regular { + fields: vec![ParsedField { pat_ident: pat_ident("shadows"), name: None, description: String::new(), widget_override: ParsedWidgetOverride::None, - ty: parse_quote!(f64), - exposed: false, - value_source: ParsedValueSource::None, - number_soft_min: None, - number_soft_max: None, - number_hard_min: None, - number_hard_max: None, - number_mode_range: None, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: parse_quote!(f64), + exposed: false, + value_source: ParsedValueSource::None, + number_soft_min: None, + number_soft_max: None, + number_hard_min: None, + number_hard_max: None, + number_mode_range: None, + implementations: { + let mut p = Punctuated::new(); + p.push(parse_quote!(f32)); + p.push(parse_quote!(f64)); + p + }, + }), number_display_decimal_places: None, number_step: None, - implementations: { - let mut p = Punctuated::new(); - p.push(parse_quote!(f32)); - p.push(parse_quote!(f64)); - p - }, unit: None, }], body: TokenStream2::new(), @@ -1017,6 +1076,8 @@ mod tests { path: Some(parse_quote!(graphene_core::TestNode)), skip_impl: false, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("add", Span::call_site()), struct_name: Ident::new("Add", Span::call_site()), @@ -1030,22 +1091,24 @@ mod tests { }, output_type: parse_quote!(f64), is_async: false, - fields: vec![ParsedField::Regular { + fields: vec![ParsedField { pat_ident: pat_ident("b"), name: None, description: String::from("b"), widget_override: ParsedWidgetOverride::None, - ty: parse_quote!(f64), - exposed: false, - value_source: ParsedValueSource::None, - number_soft_min: Some(parse_quote!(-500.)), - number_soft_max: Some(parse_quote!(500.)), - number_hard_min: None, - number_hard_max: None, - number_mode_range: Some(parse_quote!((0., 100.))), + ty: ParsedFieldType::Regular(RegularParsedField { + ty: parse_quote!(f64), + exposed: false, + value_source: ParsedValueSource::None, + number_soft_min: Some(parse_quote!(-500.)), + number_soft_max: Some(parse_quote!(500.)), + number_hard_min: None, + number_hard_max: None, + number_mode_range: Some(parse_quote!((0., 100.))), + implementations: Punctuated::new(), + }), number_display_decimal_places: None, number_step: None, - implementations: Punctuated::new(), unit: None, }], body: TokenStream2::new(), @@ -1060,7 +1123,7 @@ mod tests { fn test_async_node() { let attr = quote!(category("IO")); let input = quote!( - async fn load_image(api: &WasmEditorApi, #[expose] path: String) -> RasterDataTable { + async fn load_image(api: &WasmEditorApi, #[expose] path: String) -> Table> { // Implementation details... } ); @@ -1074,6 +1137,8 @@ mod tests { path: None, skip_impl: false, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("load_image", Span::call_site()), struct_name: Ident::new("LoadImage", Span::call_site()), @@ -1085,24 +1150,26 @@ mod tests { ty: parse_quote!(&WasmEditorApi), implementations: Punctuated::new(), }, - output_type: parse_quote!(RasterDataTable), + output_type: parse_quote!(Table>), is_async: true, - fields: vec![ParsedField::Regular { + fields: vec![ParsedField { pat_ident: pat_ident("path"), name: None, - ty: parse_quote!(String), description: String::new(), widget_override: ParsedWidgetOverride::None, - exposed: true, - value_source: ParsedValueSource::None, - number_soft_min: None, - number_soft_max: None, - number_hard_min: None, - number_hard_max: None, - number_mode_range: None, + ty: ParsedFieldType::Regular(RegularParsedField { + ty: parse_quote!(String), + exposed: true, + value_source: ParsedValueSource::None, + number_soft_min: None, + number_soft_max: None, + number_hard_min: None, + number_hard_max: None, + number_mode_range: None, + implementations: Punctuated::new(), + }), number_display_decimal_places: None, number_step: None, - implementations: Punctuated::new(), unit: None, }], body: TokenStream2::new(), @@ -1131,6 +1198,8 @@ mod tests { path: None, skip_impl: false, properties_string: None, + cfg: None, + shader_node: None, }, fn_name: Ident::new("custom_node", Span::call_site()), struct_name: Ident::new("CustomNode", Span::call_site()), @@ -1205,7 +1274,7 @@ mod tests { fn test_invalid_implementation_syntax() { let attr = quote!(category("Test")); let input = quote!( - fn test_node(_: (), #[implementations((Footprint, Color), (Footprint, RasterDataTable))] input: impl Node) -> T { + fn test_node(_: (), #[implementations((Footprint, Color), (Footprint, Table>))] input: impl Node) -> T { // Implementation details... } ); @@ -1228,15 +1297,18 @@ mod tests { let tuples = quote_spanned!(problem_span=> () ()); let input = quote! { fn test_node( - #[implementations((), #tuples, Footprint)] footprint: F, + #[implementations((), #tuples, Footprint)] + footprint: F, #[implementations( - () -> Color, - () -> RasterDataTable, - () -> GradientStops, - Footprint -> Color, - Footprint -> RasterDataTable, - Footprint -> GradientStops, - )] + () -> Table>, + () -> Table, + () -> Table, + () -> GradientStops, + Footprint -> Table>, + Footprint -> Table, + Footprint -> Table, + Footprint -> GradientStops, + )] image: impl Node, ) -> T { // Implementation details... diff --git a/node-graph/node-macro/src/shader_nodes.rs b/node-graph/node-macro/src/shader_nodes.rs new file mode 100644 index 0000000000..919d3ef878 --- /dev/null +++ b/node-graph/node-macro/src/shader_nodes.rs @@ -0,0 +1,32 @@ +use crate::parsing::NodeFnAttributes; +use proc_macro2::{Ident, TokenStream}; +use quote::quote; +use strum::{EnumString, VariantNames}; +use syn::Error; +use syn::parse::{Parse, ParseStream}; + +pub const STD_FEATURE_GATE: &str = "std"; + +pub fn modify_cfg(attributes: &NodeFnAttributes) -> TokenStream { + match (&attributes.cfg, &attributes.shader_node) { + (Some(cfg), Some(_)) => quote!(#[cfg(all(#cfg, feature = #STD_FEATURE_GATE))]), + (Some(cfg), None) => quote!(#[cfg(#cfg)]), + (None, Some(_)) => quote!(#[cfg(feature = #STD_FEATURE_GATE)]), + (None, None) => quote!(), + } +} + +#[derive(Debug, EnumString, VariantNames)] +pub(crate) enum ShaderNodeType { + PerPixelAdjust, +} + +impl Parse for ShaderNodeType { + fn parse(input: ParseStream) -> syn::Result { + let ident: Ident = input.parse()?; + Ok(match ident.to_string().as_str() { + "PerPixelAdjust" => ShaderNodeType::PerPixelAdjust, + _ => return Err(Error::new_spanned(&ident, format!("attr 'shader_node' must be one of {:?}", Self::VARIANTS))), + }) + } +} diff --git a/node-graph/node-macro/src/validation.rs b/node-graph/node-macro/src/validation.rs index 9ce43a650e..ae60663095 100644 --- a/node-graph/node-macro/src/validation.rs +++ b/node-graph/node-macro/src/validation.rs @@ -1,4 +1,4 @@ -use crate::parsing::{Implementation, ParsedField, ParsedNodeFn}; +use crate::parsing::{Implementation, NodeParsedField, ParsedField, ParsedFieldType, ParsedNodeFn, RegularParsedField}; use proc_macro_error2::emit_error; use quote::quote; use syn::spanned::Spanned; @@ -21,11 +21,14 @@ pub fn validate_node_fn(parsed: &ParsedNodeFn) -> syn::Result<()> { fn validate_min_max(parsed: &ParsedNodeFn) { for field in &parsed.fields { - if let ParsedField::Regular { - number_hard_max, - number_hard_min, - number_soft_max, - number_soft_min, + if let ParsedField { + ty: ParsedFieldType::Regular(RegularParsedField { + number_hard_max, + number_hard_min, + number_soft_max, + number_soft_min, + .. + }), pat_ident, .. } = field @@ -78,7 +81,12 @@ fn validate_min_max(parsed: &ParsedNodeFn) { } fn validate_primary_input_expose(parsed: &ParsedNodeFn) { - if let Some(ParsedField::Regular { exposed: true, pat_ident, .. }) = parsed.fields.first() { + if let Some(ParsedField { + ty: ParsedFieldType::Regular(RegularParsedField { exposed: true, .. }), + pat_ident, + .. + }) = parsed.fields.first() + { emit_error!( pat_ident.span(), "Unnecessary #[expose] attribute on primary input `{}`. Primary inputs are always exposed.", @@ -94,8 +102,9 @@ fn validate_implementations_for_generics(parsed: &ParsedNodeFn) { if !has_skip_impl && !parsed.fn_generics.is_empty() { for field in &parsed.fields { - match field { - ParsedField::Regular { ty, implementations, pat_ident, .. } => { + let pat_ident = &field.pat_ident; + match &field.ty { + ParsedFieldType::Regular(RegularParsedField { ty, implementations, .. }) => { if contains_generic_param(ty, &parsed.fn_generics) && implementations.is_empty() { emit_error!( ty.span(), @@ -107,13 +116,12 @@ fn validate_implementations_for_generics(parsed: &ParsedNodeFn) { ); } } - ParsedField::Node { + ParsedFieldType::Node(NodeParsedField { input_type, output_type, implementations, - pat_ident, .. - } => { + }) => { if (contains_generic_param(input_type, &parsed.fn_generics) || contains_generic_param(output_type, &parsed.fn_generics)) && implementations.is_empty() { emit_error!( pat_ident.span(), diff --git a/node-graph/preprocessor/Cargo.toml b/node-graph/preprocessor/Cargo.toml index e39fef365c..08d03c8524 100644 --- a/node-graph/preprocessor/Cargo.toml +++ b/node-graph/preprocessor/Cargo.toml @@ -7,6 +7,7 @@ license = "MIT OR Apache-2.0" [features] [dependencies] +log = { workspace = true } # Workspace dependencies graphene-std = { workspace = true, features = ["gpu"] } diff --git a/node-graph/preprocessor/src/lib.rs b/node-graph/preprocessor/src/lib.rs index e0b4a01685..b440f570d9 100644 --- a/node-graph/preprocessor/src/lib.rs +++ b/node-graph/preprocessor/src/lib.rs @@ -1,3 +1,6 @@ +#[macro_use] +extern crate log; + use graph_craft::document::value::*; use graph_craft::document::*; use graph_craft::proto::RegistryValueSource; @@ -61,7 +64,7 @@ pub fn generate_node_substitutions() -> HashMap { + 1 => { let input = inputs.iter().next().unwrap(); let input_ty = input.nested_type(); @@ -84,9 +87,9 @@ pub fn generate_node_substitutions() -> HashMap HashMap HashMap {} - RegistryValueSource::Default(data) => return NodeInput::value(TaggedValue::from_primitive_string(data, ty).unwrap_or(TaggedValue::None), exposed), + RegistryValueSource::Default(data) => { + if let Some(custom_default) = TaggedValue::from_primitive_string(data, ty) { + return NodeInput::value(custom_default, exposed); + } else { + // It is incredibly useful to get a warning when the default type cannot be parsed rather than defaulting to `()`. + warn!("Failed to parse default value for type {ty:?} with data {data}"); + } + } RegistryValueSource::Scope(data) => return NodeInput::scope(Cow::Borrowed(data)), }; diff --git a/node-graph/wgpu-executor/Cargo.toml b/node-graph/wgpu-executor/Cargo.toml index e939abd8cf..388b8a7eec 100644 --- a/node-graph/wgpu-executor/Cargo.toml +++ b/node-graph/wgpu-executor/Cargo.toml @@ -4,11 +4,6 @@ version = "0.1.0" edition = "2024" license = "MIT OR Apache-2.0" -[features] -default = [] -profiling = [] -passthrough = [] - [dependencies] # Local dependencies graphene-core = { workspace = true, features = ["wgpu"] } @@ -25,3 +20,4 @@ futures = { workspace = true } web-sys = { workspace = true } winit = { workspace = true } vello = { workspace = true } +bytemuck = { workspace = true } diff --git a/node-graph/wgpu-executor/src/context.rs b/node-graph/wgpu-executor/src/context.rs index a8ffd7b17f..06da16e0ac 100644 --- a/node-graph/wgpu-executor/src/context.rs +++ b/node-graph/wgpu-executor/src/context.rs @@ -32,24 +32,17 @@ impl Context { let (device, queue) = adapter .request_device(&wgpu::DeviceDescriptor { label: None, - // #[cfg(not(feature = "passthrough"))] + #[cfg(target_family = "wasm")] required_features: wgpu::Features::empty(), - // Currently disabled because not all backend support passthrough. - // TODO: reenable only when vulkan adapter is available - // #[cfg(feature = "passthrough")] - // required_features: wgpu::Features::SPIRV_SHADER_PASSTHROUGH, + #[cfg(not(target_family = "wasm"))] + required_features: wgpu::Features::PUSH_CONSTANTS, required_limits, memory_hints: Default::default(), trace: wgpu::Trace::Off, }) .await - .unwrap(); + .ok()?; - let info = adapter.get_info(); - // skip this on LavaPipe temporarily - if info.vendor == 0x10005 { - return None; - } Some(Self { device: Arc::new(device), queue: Arc::new(queue), diff --git a/node-graph/wgpu-executor/src/lib.rs b/node-graph/wgpu-executor/src/lib.rs index c0113a45c6..920a002c4e 100644 --- a/node-graph/wgpu-executor/src/lib.rs +++ b/node-graph/wgpu-executor/src/lib.rs @@ -1,4 +1,5 @@ mod context; +pub mod texture_upload; use anyhow::Result; pub use context::Context; @@ -41,13 +42,14 @@ pub struct Surface { } pub struct TargetTexture { + texture: wgpu::Texture, view: wgpu::TextureView, size: UVec2, } -#[cfg(target_arch = "wasm32")] +#[cfg(target_family = "wasm")] pub type Window = web_sys::HtmlCanvasElement; -#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(target_family = "wasm"))] pub type Window = Arc; unsafe impl StaticType for Surface { @@ -59,7 +61,47 @@ const VELLO_SURFACE_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba8Unor impl WgpuExecutor { pub async fn render_vello_scene(&self, scene: &Scene, surface: &WgpuSurface, size: UVec2, context: &RenderContext, background: Color) -> Result<()> { let mut guard = surface.surface.target_texture.lock().await; - let target_texture = if let Some(target_texture) = &*guard + + let surface_inner = &surface.surface.inner; + let surface_caps = surface_inner.get_capabilities(&self.context.adapter); + surface_inner.configure( + &self.context.device, + &SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::STORAGE_BINDING, + format: VELLO_SURFACE_FORMAT, + width: size.x, + height: size.y, + present_mode: surface_caps.present_modes[0], + alpha_mode: wgpu::CompositeAlphaMode::Opaque, + view_formats: vec![], + desired_maximum_frame_latency: 2, + }, + ); + + self.render_vello_scene_to_target_texture(scene, size, context, background, &mut guard).await?; + + let surface_texture = surface_inner.get_current_texture()?; + let mut encoder = self.context.device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some("Surface Blit") }); + surface.surface.blitter.copy( + &self.context.device, + &mut encoder, + &guard.as_ref().unwrap().view, + &surface_texture.texture.create_view(&wgpu::TextureViewDescriptor::default()), + ); + self.context.queue.submit([encoder.finish()]); + surface_texture.present(); + + Ok(()) + } + + pub async fn render_vello_scene_to_texture(&self, scene: &Scene, size: UVec2, context: &RenderContext, background: Color) -> Result { + let mut output = None; + self.render_vello_scene_to_target_texture(scene, size, context, background, &mut output).await?; + Ok(output.unwrap().texture) + } + + async fn render_vello_scene_to_target_texture(&self, scene: &Scene, size: UVec2, context: &RenderContext, background: Color, output: &mut Option) -> Result<()> { + let target_texture = if let Some(target_texture) = output && target_texture.size == size { target_texture @@ -79,31 +121,13 @@ impl WgpuExecutor { view_formats: &[], }); let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); - *guard = Some(TargetTexture { size, view }); - guard.as_ref().unwrap() + *output = Some(TargetTexture { texture, view, size }); + output.as_mut().unwrap() }; - let surface_inner = &surface.surface.inner; - let surface_caps = surface_inner.get_capabilities(&self.context.adapter); - surface_inner.configure( - &self.context.device, - &SurfaceConfiguration { - usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::STORAGE_BINDING, - format: VELLO_SURFACE_FORMAT, - width: size.x, - height: size.y, - present_mode: surface_caps.present_modes[0], - alpha_mode: wgpu::CompositeAlphaMode::Opaque, - view_formats: vec![], - desired_maximum_frame_latency: 2, - }, - ); - - let [r, g, b, _] = background.to_rgba8_srgb(); + let [r, g, b, a] = background.to_rgba8_srgb(); let render_params = RenderParams { - // We are using an explicit opaque color here to eliminate the alpha premultiplication step - // which would be required to support a transparent webgpu canvas - base_color: vello::peniko::Color::from_rgba8(r, g, b, 0xff), + base_color: vello::peniko::Color::from_rgba8(r, g, b, a), width: size.x, height: size.y, antialiasing_method: AaConfig::Msaa16, @@ -111,42 +135,29 @@ impl WgpuExecutor { { let mut renderer = self.vello_renderer.lock().await; - for (id, texture) in context.resource_overrides.iter() { - let texture = texture.clone(); + for (image, texture) in context.resource_overrides.iter() { let texture_view = wgpu::TexelCopyTextureInfoBase { - texture, + texture: texture.clone(), mip_level: 0, origin: Origin3d::ZERO, aspect: TextureAspect::All, }; - renderer.override_image( - &vello::peniko::Image::new(vello::peniko::Blob::from_raw_parts(Arc::new(vec![]), *id), vello::peniko::ImageFormat::Rgba8, 0, 0), - Some(texture_view), - ); + renderer.override_image(image, Some(texture_view)); } renderer.render_to_texture(&self.context.device, &self.context.queue, scene, &target_texture.view, &render_params)?; + for (image, _) in context.resource_overrides.iter() { + renderer.override_image(image, None); + } } - - let surface_texture = surface_inner.get_current_texture()?; - let mut encoder = self.context.device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: Some("Surface Blit") }); - surface.surface.blitter.copy( - &self.context.device, - &mut encoder, - &target_texture.view, - &surface_texture.texture.create_view(&wgpu::TextureViewDescriptor::default()), - ); - self.context.queue.submit([encoder.finish()]); - surface_texture.present(); - Ok(()) } - #[cfg(target_arch = "wasm32")] + #[cfg(target_family = "wasm")] pub fn create_surface(&self, canvas: graphene_application_io::WasmSurfaceHandle) -> Result> { let surface = self.context.instance.create_surface(wgpu::SurfaceTarget::Canvas(canvas.surface))?; self.create_surface_inner(surface, canvas.window_id) } - #[cfg(not(target_arch = "wasm32"))] + #[cfg(not(target_family = "wasm"))] pub fn create_surface(&self, window: SurfaceHandle) -> Result> { let surface = self.context.instance.create_surface(wgpu::SurfaceTarget::Window(Box::new(window.surface)))?; self.create_surface_inner(surface, window.window_id) @@ -167,12 +178,13 @@ impl WgpuExecutor { impl WgpuExecutor { pub async fn new() -> Option { - let context = Context::new().await?; + Self::with_context(Context::new().await?) + } + pub fn with_context(context: Context) -> Option { let vello_renderer = Renderer::new( &context.device, RendererOptions { - // surface_format: Some(wgpu::TextureFormat::Rgba8Unorm), pipeline_cache: None, use_cpu: false, antialiasing_support: AaSupport::all(), diff --git a/node-graph/wgpu-executor/src/texture_upload.rs b/node-graph/wgpu-executor/src/texture_upload.rs new file mode 100644 index 0000000000..e3cd9bcba9 --- /dev/null +++ b/node-graph/wgpu-executor/src/texture_upload.rs @@ -0,0 +1,53 @@ +use crate::WgpuExecutor; +use graphene_core::color::SRGBA8; +use graphene_core::raster_types::{CPU, GPU, Raster}; +use graphene_core::table::{Table, TableRow}; +use graphene_core::{Ctx, ExtractFootprint}; +use wgpu::util::{DeviceExt, TextureDataOrder}; +use wgpu::{Extent3d, TextureDescriptor, TextureDimension, TextureFormat, TextureUsages}; + +#[node_macro::node(category(""))] +pub async fn upload_texture<'a: 'n>(_: impl ExtractFootprint + Ctx, input: Table>, executor: &'a WgpuExecutor) -> Table> { + let device = &executor.context.device; + let queue = &executor.context.queue; + let table = input + .iter() + .map(|row| { + let image = row.element; + let rgba8_data: Vec = image.data.iter().map(|x| (*x).into()).collect(); + + let texture = device.create_texture_with_data( + queue, + &TextureDescriptor { + label: Some("upload_texture node texture"), + size: Extent3d { + width: image.width, + height: image.height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: TextureDimension::D2, + format: TextureFormat::Rgba8UnormSrgb, + // I don't know what usages are actually necessary + usage: TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST | TextureUsages::COPY_SRC, + view_formats: &[], + }, + TextureDataOrder::LayerMajor, + bytemuck::cast_slice(rgba8_data.as_slice()), + ); + + TableRow { + element: Raster::new_gpu(texture), + mask: row.mask.clone(), + transform: *row.transform, + alpha_blending: *row.alpha_blending, + source_node_id: *row.source_node_id, + } + }) + .collect(); + + queue.submit([]); + + table +} diff --git a/package.json b/package.json index 5528659282..8d605249a3 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,15 @@ "scripts": { "---------- DEV SERVER ----------": "", "start": "cd frontend && npm start", + "start-desktop": "cd frontend && npm run build-native-dev && cargo run -p graphite-desktop", "profiling": "cd frontend && npm run profiling", "production": "cd frontend && npm run production", "---------- BUILDS ----------": "", "build-dev": "cd frontend && npm run build-dev", "build-profiling": "cd frontend && npm run build-profiling", "build": "cd frontend && npm run build", + "build-desktop": "cd frontend && npm run build-native && cargo build -r -p graphite-desktop", + "build-desktop-dev": "cd frontend && npm run build-native-dev && cargo build -p graphite-desktop", "---------- UTILITIES ----------": "", "lint": "cd frontend && npm run lint", "lint-fix": "cd frontend && npm run lint-fix" diff --git a/proc-macros/src/discriminant.rs b/proc-macros/src/discriminant.rs index 681351e43e..224fd9e47a 100644 --- a/proc-macros/src/discriminant.rs +++ b/proc-macros/src/discriminant.rs @@ -101,14 +101,11 @@ pub fn derive_discriminant_impl(input_item: TokenStream) -> syn::Result, Vec<_>>(); #[cfg(feature = "serde-discriminant")] diff --git a/proc-macros/src/extract_fields.rs b/proc-macros/src/extract_fields.rs index 606b3b8a37..949ff3f50d 100644 --- a/proc-macros/src/extract_fields.rs +++ b/proc-macros/src/extract_fields.rs @@ -31,23 +31,23 @@ pub fn derive_extract_field_impl(input: TokenStream) -> syn::Result }) .collect::>(); - let field_str = field_info.into_iter().map(|(name, ty)| (format!("{}: {}", name, ty))); + let field_str = field_info.into_iter().map(|(name, ty)| (format!("{name}: {ty}"))); let res = quote! { - impl #impl_generics #struct_name #ty_generics #where_clause { - pub fn field_types() -> Vec<(String, usize)> { + impl #impl_generics ExtractField for #struct_name #ty_generics #where_clause { + fn field_types() -> Vec<(String, usize)> { vec![ #((String::from(#field_str), #field_line)),* ] } - pub fn print_field_types() { + fn print_field_types() { for (field, line) in Self::field_types() { println!("{} at line {}", field, line); } } - pub fn path() -> &'static str { + fn path() -> &'static str { file!() } } diff --git a/proc-macros/src/helpers.rs b/proc-macros/src/helpers.rs index 4beb44f42e..5f5c22fd30 100644 --- a/proc-macros/src/helpers.rs +++ b/proc-macros/src/helpers.rs @@ -55,7 +55,7 @@ pub fn clean_rust_type_syntax(input: String) -> String { } } '<' => { - while let Some(' ') = result.chars().rev().next() { + while let Some(' ') = result.chars().next_back() { result.pop(); } result.push('<'); @@ -64,7 +64,7 @@ pub fn clean_rust_type_syntax(input: String) -> String { } } '>' => { - while let Some(' ') = result.chars().rev().next() { + while let Some(' ') = result.chars().next_back() { result.pop(); } result.push('>'); @@ -74,7 +74,7 @@ pub fn clean_rust_type_syntax(input: String) -> String { } '-' => { if let Some('>') = chars.peek() { - while let Some(' ') = result.chars().rev().next() { + while let Some(' ') = result.chars().next_back() { result.pop(); } result.push_str(" -> "); @@ -88,7 +88,7 @@ pub fn clean_rust_type_syntax(input: String) -> String { } ':' => { if let Some(':') = chars.peek() { - while let Some(' ') = result.chars().rev().next() { + while let Some(' ') = result.chars().next_back() { result.pop(); } } diff --git a/proc-macros/src/hierarchical_tree.rs b/proc-macros/src/hierarchical_tree.rs index e0d6fb6a71..a37f8e4140 100644 --- a/proc-macros/src/hierarchical_tree.rs +++ b/proc-macros/src/hierarchical_tree.rs @@ -1,3 +1,4 @@ +use crate::helpers::clean_rust_type_syntax; use proc_macro2::{Span, TokenStream}; use quote::{ToTokens, quote}; use syn::{Data, DeriveInput, Fields, Type, parse2}; @@ -11,51 +12,87 @@ pub fn generate_hierarchical_tree(input: TokenStream) -> syn::Result return Err(syn::Error::new(Span::call_site(), "Tried to derive HierarchicalTree for non-enum")), }; - let build_message_tree = data.variants.iter().map(|variant| { - let variant_type = &variant.ident; + let build_message_tree: Result, syn::Error> = data + .variants + .iter() + .map(|variant| { + let variant_type = &variant.ident; - let has_child = variant - .attrs - .iter() - .any(|attr| attr.path().get_ident().is_some_and(|ident| ident == "sub_discriminant" || ident == "child")); + let has_child = variant + .attrs + .iter() + .any(|attr| attr.path().get_ident().is_some_and(|ident| ident == "sub_discriminant" || ident == "child")); - if has_child { - if let Fields::Unnamed(fields) = &variant.fields { - let field_type = &fields.unnamed.first().unwrap().ty; - quote! { - { - let mut variant_tree = DebugMessageTree::new(stringify!(#variant_type)); - let field_name = stringify!(#field_type); - const message_string: &str = "Message"; - if message_string == &field_name[field_name.len().saturating_sub(message_string.len())..] { - // The field is a Message type, recursively build its tree - let sub_tree = #field_type::build_message_tree(); - variant_tree.add_variant(sub_tree); - } - message_tree.add_variant(variant_tree); + match &variant.fields { + Fields::Unit => Ok(quote! { + message_tree.add_variant(DebugMessageTree::new(stringify!(#variant_type))); + }), + Fields::Unnamed(fields) => { + if has_child { + let field_type = &fields.unnamed.first().unwrap().ty; + Ok(quote! { + { + let mut variant_tree = DebugMessageTree::new(stringify!(#variant_type)); + let field_name = stringify!(#field_type); + const MESSAGE_SUFFIX: &str = "Message"; + if MESSAGE_SUFFIX == &field_name[field_name.len().saturating_sub(MESSAGE_SUFFIX.len())..] { + // The field is a Message type, recursively build its tree + let sub_tree = #field_type::build_message_tree(); + variant_tree.add_variant(sub_tree); + } else { + variant_tree.add_fields(vec![format!("{field_name}")]); + } + message_tree.add_variant(variant_tree); + } + }) + } else { + let error_msg = match fields.unnamed.len() { + 0 => format!("Remove the unnecessary `()` from the `{variant_type}` message enum variant."), + 1 => { + let field_type = &fields.unnamed.first().unwrap().ty; + format!( + "The `{variant_type}` message should be defined as a struct-style (not tuple-style) enum variant to maintain consistent formatting across all editor messages.\n\ + Replace `{}` with a named field using {{curly braces}} instead of a positional field using (parentheses).", + field_type.to_token_stream() + ) + } + _ => { + let field_types = fields.unnamed.iter().map(|f| f.ty.to_token_stream().to_string()).collect::>().join(", "); + format!( + "The `{variant_type}` message should be defined as a struct-style (not tuple-style) enum variant to maintain consistent formatting across all editor messages.\n\ + Replace `{field_types}` with named fields using {{curly braces}} instead of positional fields using (parentheses)." + ) + } + }; + Err(syn::Error::new(Span::call_site(), error_msg)) } } - } else { - quote! { - message_tree.add_variant(DebugMessageTree::new(stringify!(#variant_type))); + Fields::Named(fields) => { + let names = fields.named.iter().map(|f| f.ident.as_ref().unwrap()); + let ty = fields.named.iter().map(|f| clean_rust_type_syntax(f.ty.to_token_stream().to_string())); + Ok(quote! { + { + let mut field_names = Vec::new(); + #(field_names.push(format!("{}: {}",stringify!(#names), #ty));)* + let mut variant_tree = DebugMessageTree::new(stringify!(#variant_type)); + variant_tree.add_fields(field_names); + message_tree.add_variant(variant_tree); + } + }) } } - } else { - quote! { - message_tree.add_variant(DebugMessageTree::new(stringify!(#variant_type))); - } - } - }); + }) + .collect(); + let build_message_tree = build_message_tree?; let res = quote! { impl HierarchicalTree for #input_type { fn build_message_tree() -> DebugMessageTree { let mut message_tree = DebugMessageTree::new(stringify!(#input_type)); #(#build_message_tree)* + let message_handler_str = #input_type::message_handler_str(); - if message_handler_str.fields().len() > 0 { - message_tree.add_message_handler_field(message_handler_str); - } + message_tree.add_message_handler_field(message_handler_str); let message_handler_data_str = #input_type::message_handler_data_str(); if message_handler_data_str.fields().len() > 0 { diff --git a/proc-macros/src/message_handler_data_attr.rs b/proc-macros/src/message_handler_data_attr.rs index 6c1c88b886..2459ac5a64 100644 --- a/proc-macros/src/message_handler_data_attr.rs +++ b/proc-macros/src/message_handler_data_attr.rs @@ -43,10 +43,8 @@ pub fn message_handler_data_attr_impl(attr: TokenStream, input_item: TokenStream quote! { #input_item impl #message_type { - pub fn message_handler_data_str() -> MessageData - { + pub fn message_handler_data_str() -> MessageData { MessageData::new(format!("{}", stringify!(#type_name)), #type_name::field_types(), #type_name::path()) - } pub fn message_handler_str() -> MessageData { MessageData::new(format!("{}", stringify!(#input_type)), #input_type::field_types(), #input_type::path()) diff --git a/proc-macros/src/widget_builder.rs b/proc-macros/src/widget_builder.rs index f5c6d0a546..5705d4b25c 100644 --- a/proc-macros/src/widget_builder.rs +++ b/proc-macros/src/widget_builder.rs @@ -110,7 +110,7 @@ pub fn derive_widget_builder_impl(input_item: TokenStream2) -> syn::Result crate::messages::layout::utility_types::layout_widget::WidgetHolder{ + pub fn widget_holder(self) -> crate::messages::layout::utility_types::layout_widget::WidgetHolder { crate::messages::layout::utility_types::layout_widget::WidgetHolder::new( crate::messages::layout::utility_types::layout_widget::Widget::#struct_name_ident(self)) } } diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 885f49d3e7..0000000000 --- a/shell.nix +++ /dev/null @@ -1,85 +0,0 @@ -# This is a helper file for people using NixOS as their operating system. -# If you don't know what this file does, you can safely ignore it. - -# If you are using Nix as your package manager, you can run 'nix-shell' -# in the root directory of the project and Nix will open a bash shell -# with all the packages needed to build and run Graphite installed. -# A shell.nix file is used in the Nix ecosystem to define a development -# environment with specific dependencies. When you enter a Nix shell using -# this file, it ensures that all the specified tools and libraries are -# available regardless of the host system's configuration. This provides -# a reproducible development environment across different machines and developers. - -# You can enter the Nix shell and run Graphite like normal with: -# > npm start -# Or you can run it like this without needing to first enter the Nix shell: -# > nix-shell --command "npm start" - -let - # Get oxalica's Rust overlay for better Rust integration - rust-overlay-source = builtins.fetchGit { - url = "https://github.com/oxalica/rust-overlay"; - }; - - # Import it so we can use it in Nix - rust-overlay = import rust-overlay-source; - - # Import system packages overlaid with the Rust overlay - pkgs = import { - overlays = [ rust-overlay ]; - }; - - # Define the rustc we need - rustc-wasm = pkgs.rust-bin.stable.latest.default.override { - targets = [ "wasm32-unknown-unknown" ]; - # wasm-pack needs this - extensions = [ "rust-src" "rust-analyzer" "clippy" "cargo"]; - }; -in - # Make a shell with the dependencies we need - pkgs.mkShell { - packages = with pkgs; [ - rustc-wasm - nodejs - cargo-watch - cargo-nextest - cargo-expand - cargo-about - wasm-pack - binaryen - wasm-bindgen-cli - vulkan-loader - libxkbcommon - pkg-config - # used for profiling - gnuplot - samply - cargo-flamegraph - - # For Tauri - at-spi2-atk - atkmm - cairo - gdk-pixbuf - glib - gtk3 - harfbuzz - librsvg - libsoup_3 - pango - webkitgtk_4_1 - openssl - - # For Rawkit tests - libraw - - # Use Mold as a linker - mold - ]; - - # Hacky way to run Cargo through Mold - LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [pkgs.openssl pkgs.vulkan-loader pkgs.libxkbcommon pkgs.llvmPackages.libcxxStdenv pkgs.gcc-unwrapped.lib pkgs.llvm pkgs.libraw]; - shellHook = '' - alias cargo='mold --run cargo' - ''; - } diff --git a/website/.gitignore b/website/.gitignore index c9dbb6337b..0fc0af5ddb 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -3,4 +3,3 @@ public/ static/fonts/ static/syntax-highlighting.css static/text-balancer.js -other/editor-structure/replacement.html diff --git a/website/other/editor-structure/generate.js b/website/build-scripts/generate-editor-structure.js similarity index 81% rename from website/other/editor-structure/generate.js rename to website/build-scripts/generate-editor-structure.js index b9ce6d9969..a2d9d2ef4f 100644 --- a/website/other/editor-structure/generate.js +++ b/website/build-scripts/generate-editor-structure.js @@ -57,31 +57,37 @@ function buildHtmlList(nodes, currentIndex, currentLevel) { continue; } - const hasChildren = (i + 1 < nodes.length) && (nodes[i + 1].level > node.level); + const hasDirectChildren = i + 1 < nodes.length && nodes[i + 1].level > node.level; + const hasDeeperChildren = hasDirectChildren && i + 2 < nodes.length && nodes[i + 2].level > nodes[i + 1].level; + const linkHtml = node.link ? `${path.basename(node.link)}` : ""; const fieldPieces = node.text.match(/([^:]*):(.*)/); - const partOfMessageFromNamingConvention = ["Message", "MessageHandler", "MessageContext"].some((suffix) => node.text.replace(/(.*)<.*>/g, "$1").endsWith(suffix)); - const partOfMessageViolatesNamingConvention = node.link && !partOfMessageFromNamingConvention; - const partOfMessage = node.link ? "subsystem" : ""; - const messageParent = (hasChildren && !node.link) ? " submessage": ""; - const violatesNamingConvention = partOfMessageViolatesNamingConvention ? "(violates naming convention โ€” should end with 'Message', 'MessageHandler', or 'MessageContext')" : ""; let escapedText; if (fieldPieces && fieldPieces.length === 3) { escapedText = [escapeHtml(fieldPieces[1].trim()), escapeHtml(fieldPieces[2].trim())]; } else { escapedText = [escapeHtml(node.text)]; } + + let role = "message"; + if (node.link) role = "subsystem"; + else if (hasDeeperChildren) role = "submessage"; + else if (escapedText.length === 2) role = "field"; - if (hasChildren) { - html += `

  • ${escapedText}${linkHtml}${violatesNamingConvention}`; + const partOfMessageFromNamingConvention = ["Message", "MessageHandler", "MessageContext"].some((suffix) => node.text.replace(/(.*)<.*>/g, "$1").endsWith(suffix)); + const partOfMessageViolatesNamingConvention = node.link && !partOfMessageFromNamingConvention; + const violatesNamingConvention = partOfMessageViolatesNamingConvention ? "(violates naming convention โ€” should end with 'Message', 'MessageHandler', or 'MessageContext')" : ""; + + if (hasDirectChildren) { + html += `
  • ${escapedText}${linkHtml}${violatesNamingConvention}`; const childResult = buildHtmlList(nodes, i + 1, node.level + 1); html += `
    ${childResult.html}
  • \n`; i = childResult.nextIndex; - } else if (escapedText.length === 2) { - html += `
  • ${escapedText[0]}: ${escapedText[1]}${linkHtml}
  • \n`; + } else if (role === "field") { + html += `
  • ${escapedText[0]}: ${escapedText[1]}${linkHtml}
  • \n`; i++; } else { - html += `
  • ${escapedText[0]}${linkHtml}${violatesNamingConvention}
  • \n`; + html += `
  • ${escapedText[0]}${linkHtml}${violatesNamingConvention}
  • \n`; i++; } } @@ -95,7 +101,7 @@ const outputFile = process.argv[3]; if (!inputFile || !outputFile) { console.error("Error: Please provide the input text and output HTML file paths as arguments."); - console.log("Usage: node generate.js "); + console.log("Usage: node generate-editor-structure.js "); process.exit(1); } diff --git a/website/install-fonts.js b/website/build-scripts/install-fonts.js similarity index 92% rename from website/install-fonts.js rename to website/build-scripts/install-fonts.js index e3fbb12d68..4cfa10df58 100644 --- a/website/install-fonts.js +++ b/website/build-scripts/install-fonts.js @@ -8,15 +8,15 @@ const basePath = path.resolve(__dirname); // Define files to copy as [source, destination] pairs // Files with the same destination will be concatenated const FILES_TO_COPY = [ - ["node_modules/@fontsource-variable/inter/opsz.css", "static/fonts/common.css"], - ["node_modules/@fontsource-variable/inter/opsz-italic.css", "static/fonts/common.css"], - ["node_modules/@fontsource/bona-nova/700.css", "static/fonts/common.css"], + ["../node_modules/@fontsource-variable/inter/opsz.css", "../static/fonts/common.css"], + ["../node_modules/@fontsource-variable/inter/opsz-italic.css", "../static/fonts/common.css"], + ["../node_modules/@fontsource/bona-nova/700.css", "../static/fonts/common.css"], ]; // Define directories to copy recursively as [source, destination] pairs const DIRECTORIES_TO_COPY = [ - ["node_modules/@fontsource-variable/inter/files", "static/fonts/files"], - ["node_modules/@fontsource/bona-nova/files", "static/fonts/files"], + ["../node_modules/@fontsource-variable/inter/files", "../static/fonts/files"], + ["../node_modules/@fontsource/bona-nova/files", "../static/fonts/files"], ]; // Track processed destination files and CSS content @@ -159,7 +159,7 @@ console.log("\nFont installation complete!"); // Fetch and save text-balancer.js, which we don't commit to the repo so we're not version controlling dependency code const textBalancerUrl = "https://static.graphite.rs/text-balancer/text-balancer.js"; -const textBalancerDest = path.join(basePath, "static", "text-balancer.js"); +const textBalancerDest = path.join(basePath, "../static", "text-balancer.js"); console.log("\nDownloading text-balancer.js..."); https .get(textBalancerUrl, (res) => { diff --git a/website/content/_index.md b/website/content/_index.md index a22928a9c2..8611e7a10c 100644 --- a/website/content/_index.md +++ b/website/content/_index.md @@ -279,11 +279,11 @@ Presently, Graphite is a lightweight offline web app with features primarily ori Where's the download? The web app is [currently live](https://editor.graphite.rs) and desktop apps for Windows, Mac, and Linux should be available in 2025. -Graphite is designed principally as a professional desktop application that is also accessible in a browser for quick, casual usage. It's built for speed with (nearly) no JavaScript. And regardless of platform, your work runs locally and privately on your own hardware. There is no server. +Graphite is designed principally as a professional desktop application that is also accessible in a browser for quick access from anywhere. It's built for speed with (nearly) no JavaScript. And regardless of platform, it runs locally and privately on your own hardwareโ€” there is no server. Engineering the tech for a native app distributed across three new platforms takes extra time. That's why supporting the web platform, which keeps up-to-date and reaches all devices, has been the initial target. For now, you can install the app as a PWA for a desktop-like experience. -Once it's ready to shine, Graphite's code architecture is structured to deliver native performance for your graphically intensive workloads on desktop platforms and very low overhead on the web thanks to WebAssembly and WebGPU, new high-performance browser technologies. +Graphite's code architecture is structured to deliver true native performance for your graphically intensive workloads on desktop platforms and very low overhead on the web thanks to WebAssembly and WebGPU, new high-performance browser technologies.
    @@ -298,9 +298,9 @@ Once it's ready to shine, Graphite's code architecture is structured to deliver

    Support the mission

    -Free software doesn't grow on trees! Chip in your share of the (very real) development costs so you're not leaving others to pick up the tab. Becoming a member (or giving a one-time donation) lets you help maintain Graphite's sustainability and independence. +Free software doesn't grow on trees! Chip in your share of the (very real) development costs so you're not leaving others to pick up your tab. In just a few clicks, becoming a member (or giving a one-time donation) lets you help maintain Graphite's sustainability and independence. -Become a member +Donate now
    @@ -317,7 +317,7 @@ Free software doesn't grow on trees! Chip in your share of the (very real) devel --- -Graphite is the first and only graphic design package built for procedural editing โ€” where everything you make is nondestructive. +Graphite is the first and only comprehensive graphic design suite built for procedural editing โ€” where everything you make is nondestructive.
    diff --git a/website/content/blog/2024-01-01-looking-back-on-2023-and-what's-next.md b/website/content/blog/2024-01-01-looking-back-on-2023-and-what's-next.md index 3b108e1c18..50df3460dd 100644 --- a/website/content/blog/2024-01-01-looking-back-on-2023-and-what's-next.md +++ b/website/content/blog/2024-01-01-looking-back-on-2023-and-what's-next.md @@ -166,7 +166,7 @@ And then from a development perspective, I am looking forward to accomplishing t - Restoring several previous features that were removed during refactors in the past year to a fully working state including Imaginate, snapping, folder bounding boxes, transform pivots, and vector shape boolean operations - Deploying GPU-based rendering by default and moving from an experimental to a production-ready hardware-accelerated compositing system using [Vello](https://github.com/linebender/vello) to unify the currently separate raster and vector pipelines -- Shipping desktop apps for Windows, Mac, and Linux by integrating [Tauri](https://tauri.app/) and bundling built-in AI models to run Imaginate and other upcoming features directly on user hardware +- Shipping desktop apps for Windows, Mac, and Linux and bundling built-in AI models to run Imaginate and other upcoming features directly on user hardware - Designing a new vector graphics data format suitable for advanced procedural editing and rendering, plus the associated procedural workflow features - Remaking the Brush tool with the GPU-accelerated pipeline and the adaptive resolution system so digital painting in Graphite becomes practical - Implementing the Mask Mode feature for Magic Wand tool marquee selections, which will dramatically improve Graphite's utility as a raster graphics editor diff --git a/website/content/blog/2025-01-16-year-in-review-2024-highlights-and-a-peek-at-2025.md b/website/content/blog/2025-01-16-year-in-review-2024-highlights-and-a-peek-at-2025.md index f34dc883d6..283b590853 100644 --- a/website/content/blog/2025-01-16-year-in-review-2024-highlights-and-a-peek-at-2025.md +++ b/website/content/blog/2025-01-16-year-in-review-2024-highlights-and-a-peek-at-2025.md @@ -173,7 +173,7 @@ There are so many plans that I'm eager to carry out to improve the clarity and c Starting out with our most in-demand request: a desktop app. This has been on our roadmap from the start but only recently it's begun making sense putting it at the front of the roadmap priorities. We hoped to complete it by the end of 2024, but that wasn't in the cards due to developer availability and the specialized skills needed to complete the task. -Now to get technical, the lazy option exists: chucking the whole web app in an unaltered Electron wrapper, but this is a technological dead end that I believe offers no value compared to a PWA. The value comes from offering an actual native app where the editor Rust code and GPU-accelerated rendering runs on a user's Windows, Mac, or Linux machine without browser overhead. Tauri provides this capability, but our use case presents some unsupported challenges that our team has to overcomeโ€” individually on each platform. The natively rendered viewport content must be composited with the rest of the Tauri window's editor GUI. When investigating this earlier in the year, this isn't properly supported and we will have to develop solutions to fix Tauri's use of the OS platform APIs. If you have experience with native development on Windows, Mac, and/or Linux, please get involved to speed up this effort! With our current resources, I am anticipating this will be ready for release around spring. +Now to get technical, the lazy option exists: chucking the whole web app in an unaltered Electron wrapper, but this is a technological dead end that I believe offers no value compared to a PWA. The value comes from offering an actual native app where the editor Rust code and GPU-accelerated rendering runs on a user's Windows, Mac, or Linux machine without browser overhead. Our use case of combining the web-rendered editor interface with the user's native-rendered artwork presents several unique challenges that our team has to overcomeโ€” individually on each platform. If you have experience with native development on Windows, Mac, and/or Linux, please get involved to speed up this effort! With our current resources, I am anticipating this will be ready for release around spring. ### Animation diff --git a/website/content/blog/2025-04-02-internships-for-a-rust-graphics-engine-gsoc-2025.md b/website/content/blog/2025-04-02-internships-for-a-rust-graphics-engine-gsoc-2025.md index e7b68c4716..1c8a54a583 100644 --- a/website/content/blog/2025-04-02-internships-for-a-rust-graphics-engine-gsoc-2025.md +++ b/website/content/blog/2025-04-02-internships-for-a-rust-graphics-engine-gsoc-2025.md @@ -41,7 +41,7 @@ Out of the [full list of project opportunities](/volunteer/guide/student-project - Creating an efficient brush rendering system for large painted path datasets - Managing colors through flexible use of color spaces, color models, and color profiles - Researching an assortment of algorithms for image processing operations -- Engineering solutions for combining Tauri's webview and Graphite's WGPU renderer in the same window across Windows, Mac, and Linux desktop applications +- Engineering solutions for combining our web-based editor GUI and native WGPU renderer in the same window across Windows, Mac, and Linux desktop applications These recently added projects are pending an extended description, but we'll be happy to discuss the details if you pop into our [Discord server](https://discord.graphite.rs) and introduce yourself with links to related experience and projects. diff --git a/website/content/features.md b/website/content/features.md index ad0e7796c9..a071648005 100644 --- a/website/content/features.md +++ b/website/content/features.md @@ -13,7 +13,7 @@ js = ["/js/youtube-embed.js"] The current alpha version of Graphite is a tool for vector art and graphic design. It also supports a limited, experimental raster editing toolset. This tooling is built around a procedural graphics engine, letting artists build complex graphics and animations in its visual scripting language. -In 2025, stay tuned for performance improvements, native multiplatform desktop apps, and the beginnings of a full raster editing tool suite. +In 2025, stay tuned for performance improvements, a native multiplatform desktop app, and the beginnings of a full raster editing tool suite.
    @@ -40,11 +40,11 @@ In 2025, stay tuned for performance improvements, native multiplatform desktop a ## Layers & nodes: hybrid editing -Graphite combines the best ideas from multiple categories of digital content creation software to redefine the workflows of 2D graphics editing. It is influenced by the core editing experience of traditional layer-based raster and vector apps, the nondestructive approaches of VFX compositing programs used by film studios, and the boundless creative possibilities of procedural production tools daily-driven by the 3D industry. +Graphite combines the best ideas from multiple categories of digital content creation software to reimagine the workflows of 2D graphics editing. It is influenced by the core editing experience of traditional layer-based raster and vector tools, the nondestructive approaches of VFX compositing programs used by film studios, and the boundless creative possibilities of procedural production tools daily-driven by the 3D industry. -Classic layer-based image editing is easy to understand, with collapsable folders that help artists stay organized. A variety of interactive viewport tools make it easy to manipulate the layers by drawing directly onto the canvas. On the other hand, node-based editing is like artist-friendly programming. It works by describing manipulations as steps in a flowchart, which is vastly more powerful but comes with added complexity. +Classic layer-based image editing is easy to understand, employing collapsable folders that help artists stay organized. A variety of interactive viewport tools make it easy to manipulate the layers by drawing directly onto the canvas. On the other hand, node-based editing is essentially artist-friendly programming. It works by describing manipulations as steps in a flowchart, which is vastly more powerful but comes with added complexity. -The hybrid workflow of Graphite offers a classic tool-centric, layer-based editing experience built around a procedural, node-based compositor. Users can ignore the node graph, use it exclusively, or switch back and forth with the press of a button while creating content. Interacting with the canvas using tools will manipulate the nodes behind the scenes. And the layer panel and node graph provide two equivalent, interchangeable views of the same document structure. +The hybrid workflow pioneered by Graphite is able to deliver a classic tool-centric, layer-based editing experience built around a procedural, node-based compositor. Users can ignore the node graph, use it exclusively, or switch back and forth with the press of a button while creating content. Interacting with the canvas using tools will manipulate the nodes behind the scenes. And the layer panel and node graph provide two equivalent, interchangeable views of the same document structure.
    @@ -53,39 +53,11 @@ The hybrid workflow of Graphite offers a classic tool-centric, layer-based editi Digital 2D art commonly takes two forms. Raster artwork is made out of pixels which means it can look like anything imaginable, but it becomes blurry or pixelated when upscaling to a higher resolution. Vector artwork is made out of curved shapes which is perfect for some art styles but limiting to others. The magic of vector is that its mathematically-described curves can be enlarged to any size and remain crisp. -Other apps usually focus on just raster or vector, forcing artists to buy and learn both products. Mixing art styles requires shuttling content back and forth between programs. And since picking a raster document resolution is a one-time deal, artists often choose to start really big, resulting in sluggish editing performance and multi-gigabyte documents. +Other apps commonly focus on just raster or vector, forcing artists to buy and learn separate products for both. Mixing art styles requires shuttling content back and forth between programs. And since picking a raster document resolution is a one-time commitment, artists often choose to start out big, resulting in sluggish editing performance and multi-gigabyte documents. -Graphite reinvents raster rendering so it stays sharp at any scale. Artwork is treated as data, not pixels, and is always redrawn at the current viewing resolution. Zoom the viewport and export images at any sizeโ€” the document's paint brushes, masks, filters, and effects will all be rendered at the current native resolution. +Graphite reinvents raster rendering so it stays sharp at any scale. Artwork is treated as data, not pixels, and is always redrawn at the current viewing resolution. Zoom the viewport and export images at any sizeโ€” the document's paint brushes, masks, filters, and effects will always be rendered in full detail. -Marrying vector and raster under one roof enables both art forms to complement each other in a cohesive content creation workflow. *(Scalable raster compositing is still in-development.)* - -
    - -
    - - - -
    - -
    - -
    - -## Powered by Graphene - -**Graphene** is the purpose-built node graph engine that powers Graphite's compositor and procedural graphics pipeline. It's a visual scripting environment built upon the high-performance Rust programming language. Its runtime is [designed](/blog/distributed-computing-in-the-graphene-runtime/) to distribute rendering across CPU cores, GPUs, and network/cloud machines while optimizing for interactive frame rates. - - - -
    -
    - - -## Built with Rust - -Always on the bleeding edge and built to lastโ€” Graphite is written on a robust foundation with Rust, a modern programming language optimized for creating fast, reliable, future-proof software. Even the GPU compute shaders are written in Rust, enabling reuse of CPU code implementations for nodes. - - +Marrying vector and raster under one roof enables both art forms to complement each other in one cohesive creative workflow. *(Scalable raster compositing is still experimental.)*
    @@ -144,77 +116,65 @@ Always on the bleeding edge and built to lastโ€” Graphite is written on a robust Instancer repeat nodes
    -
    - - Graph data attribute spreadsheets -
    -
    - - Robust vector mesh editing/rendering +
    + + Table-based graphical data
    Desktop app (Windows, Mac, Linux)
    -
    - - Simplified main properties panel -
    GPU-accelerated raster rendering
    -
    - - Infinitely zoomable/panable raster +
    + + Evolution of the graphical data format
    -
    - - Select mode (marquee masking) +
    + + Robust vector mesh editing/rendering
    Timeline panel for animation curves
    - - Node version management -
    -
    - - Brush tool rewrite + + Custom attributes for table data
    Signed distance field rendering
    - - Variable color swatches + + Simplified main properties panel
    - - Command palette and context menus + + Automatic image trace vectorization
    - - Local fonts access + + Brush tool rewrite
    Local file browser for saving/loading
    - - Raw photo processing + + Local fonts access
    - - Stylus and touch interaction + + Variable color swatches
    - - Dockable workspace panels + + Node version management
    @@ -229,44 +189,64 @@ Always on the bleeding edge and built to lastโ€” Graphite is written on a robust

    โ€” Beta โ€”

    - - Code editor for custom nodes + + Command palette and context menus
    - - Frozen-in-time graph references + + Stylus and touch interaction
    - - AI nodes and tools (e.g. magic wand) -
    -
    - - Liquify and non-affine transforms -
    -
    - - Outliner panel (node graph tree view) + + Broader SVG support including filters
    Shape builder tool
    - - Internationalization and accessibility + + Dockable and multi-window panels +
    +
    + + Code editor for custom nodes
    Document history management
    +
    + + Offline edit resolution with CRDTs +
    +
    + + Asset libraries and node marketplace +
    Automation and batch processing
    - - Construction geometry mode + + Standalone parametric documents +
    +
    + + Raw photo processing +
    +
    + + Select mode (marquee masking) +
    +
    + + Liquify and warp transforms +
    +
    + + PDF, EPS, AI, DXF, PSD, and TIFF
    @@ -276,53 +256,61 @@ Always on the bleeding edge and built to lastโ€” Graphite is written on a robust CMYK and other color spaces
    -
    - - Asset libraries and marketplace -
    Advanced typography and typesetting
    - - Predictive graph rendering/caching + + Frozen-in-time graph references

    โ€” 1.0 Release โ€”

    +
    + + Internationalization and accessibility +
    +
    + + Outliner panel (node graph tree view) +
    +
    + + AI nodes and tools (e.g. magic wand) +
    Procedural styling of paint brushes
    +
    + + Infinite generative vector patterns +
    +
    + + Construction geometry mode +
    - CAD-like constraint relationships + CAD style constraint relationships
    Responsive design constraint solvers
    - - PDF export + + Authoring animated SVGs, Lottie, etc.
    - - Finer-grain control over SVG export + + Live video stream compositing
    - - Portable, embeddable render engine -
    -
    - - Distributed graph rendering -
    -
    - - Cloud rendering accelerator service + + iPad app and keyboard-free controls
    @@ -333,20 +321,16 @@ Always on the bleeding edge and built to lastโ€” Graphite is written on a robust Multiplayer collaborative editing
    - - Offline edit resolution with CRDTs + + Predictive graph rendering/caching
    - - Animated SVG creation + + Distributed graph rendering
    - - Live video compositing -
    -
    - - iPad app and keyboard-free controls + + Cloud rendering accelerator service
    diff --git a/website/content/volunteer/guide/codebase-overview/_index.md b/website/content/volunteer/guide/codebase-overview/_index.md index c3b8cd6dad..0316f447e6 100644 --- a/website/content/volunteer/guide/codebase-overview/_index.md +++ b/website/content/volunteer/guide/codebase-overview/_index.md @@ -15,17 +15,6 @@ The best introduction for getting up-to-speed with Graphite contribution comes f Workshop: Intro to Coding for Graphite
    - - - - - - - - - - - ## Codebase structure Graphite is built from several main software components. New developers may choose to specialize in one or more area without having to attain a working knowledge of the full codebase. diff --git a/website/content/volunteer/guide/graphene/_index.md b/website/content/volunteer/guide/graphene/_index.md index 76e2c5098c..3ca8f5d0c9 100644 --- a/website/content/volunteer/guide/graphene/_index.md +++ b/website/content/volunteer/guide/graphene/_index.md @@ -62,7 +62,7 @@ The fully compiled regime is used only when the user exports the procedural artw ### Compile server -The three regimes have thus far been only a description of the eventual architecture direction. The interpreted regime is currently the only mode implemented in Graphene. The other two will require access to `rustc` which will necessitate the compile server that we will finish building and then publicly host for Graphite users in the future. Users of the desktop version of Graphite, utilizing [Tauri](https://tauri.app/), will be able to use an embedded `rustc` if the user has opted to download the Rust toolchain while installing Graphite. +The three regimes have thus far been only a description of the eventual architecture direction. The interpreted regime is currently the only mode implemented in Graphene. The other two will require access to `rustc` which will necessitate the compile server that we will finish building and then publicly host for Graphite users in the future. Users of the desktop version of Graphite will be able to use an embedded `rustc` if the user has opted to download the Rust toolchain while installing Graphite. Without a compile server, all the nodes are precompiled when Graphite is built. The node registry (in the file `node_registry.rs`) currently exists to allow the interpreted executor to find the Rust functions that correspond to each node with its appropriate type signature. Nodes support generics, so it's currently necessary to list every forseeable concrete type signature in the registry until the compile server can generate bytecode for less common type combinations on-the-fly. @@ -89,7 +89,6 @@ Since Graphene is fundamentally a programming language, throughout this document -